2016年3月27日 星期日

第一次挑戰兒童樂園

一個問題,請問兒童樂園的英文是?
Children's Paradise Park 嗎?
逐字翻譯可以選Paradise 這單字嗎?

結果兒童樂園英文為Children's Amusement Park.
我猜錯了.

這次的新挑戰是帶兩位小孩 三歲以及兩歲,身高未滿100公分的女兒前往兒童新樂園
現在的交通非常發達,過去前往士林夜市的公車R9有經過.
一班車可抵達20分鐘內可到,比上班還快.交通不成問題.

天氣好,一開始姐姐配合度很高,興致非常高.

妹妹不知道為啥,鬧脾氣堅持一定要抱著水瓶,整天都很在乎水瓶的存在.
但還是很配合的跟摩天輪來個合照了.表情就不在乎了.


園內設施蠻多的,用餐區美食街的座位也很多.
但很多設施都有設限,所以身高不超過100公分去兒童樂園 只能玩
1.Carousel 旋轉木馬..(海馬 海豚),玩了兩次,畢竟連總統都愛(註)


剛開始還笑得很開心,一會開始跑了,妹妹就怕了.

2.Ferris wheel 摩天輪,運氣很好 搭到少女最愛的粉紅草莓車廂.

但當爸爸的相當怕高,這張照片笑得很緊張.

3.Garden Train  遊園軌道車.搭起來感覺跟捷運很像,不知樂趣在哪?

4. 兒童樂園最紅的玩具竟然是 溜滑梯,但人多到擠不進去.

因為有參與園遊會活動.還有額外的四個闖關遊戲
最讓我女兒有成就感的就是釣鴨子.夜市的遊戲真的有其不敗的歷史定位

妹妹還搞不清楚到底要如何操作,姐姐已經釣到了鴨子了.姐姐的領悟力真高,好厲害.

天氣好到這裡帶小孩子走走,看她們玩累了,也是件很開心的事.
但累到睡著,倒楣的就是要揹他們回家的爸媽,截至現在.當爸媽的肩膀還在貼痠痛藥膏.

註.早點到的好處是,意外遇到總統逛樂園.整個維安小組包圍旋轉木馬.

滿滿的攝影機 繞著一圈 看來當總統一點娛樂的機會都沒有.
話說排我後面的粉紅衣妹妹,申手跟總統握手,他的家人跟隨伴同齡小孩也瞬間被維安包圍.
傳說中的武林高手嗎?維安小組是八極拳高手嗎?

2016年3月21日 星期一

Arduino lightsaber upgrade

上網找了一下,應該要用更小規格的LilyPad Arduino

規格如下,不過看了價格.....還是 Nano有優勢.
MicrocontrollerATmega168 or ATmega328V
Operating Voltage2.7-5.5 V
Input Voltage2.7-5.5 V
Digital I/O Pins14
PWM Channels6
Analog Input Channels6
DC Current per I/O Pin40 mA
Flash Memory16 KB (of which 2 KB used by bootloader)
SRAM1 KB
EEPROM512 bytes
Clock Speed8 MHz
上回的code把全部的digital pin都用掉了,剩下的pin為Analog,不用上就可惜了.
以下圖為Touch Switch的接法,經測試,不接5V以及PNP電晶體,也是可以有一樣的功能.

重新改寫Code,採用sub function的方式撰寫,方便有興趣的朋友進行修改.
追加一段閃爍控制,主要功能是用來強化LED 揮舞時出現閃爍的感受
追加Analog Touch SW的sub function.實際功能等想到再規畫吧!

效果要實際測試調整delay的速度.
Code展開如下.


#include "softwareserial.h"
#include "dfplayer_mini_mp3.h"

int LEDstatus = 0; //定義變量為LEDstatus
int Touchstatus = 0;
bool hum[4];
int sensorValue;
int prevValue;
const int LEDdelay = 20;  //定義延遲0.020秒進行一次LED升降50FPS
const int BreatheStep = 5;
const int PowerSW = 12;
const int WaveSW = 13;
const int LEDMartix[10] = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2} ;  //設定LED Martix
const int PWMpin[10] = {1, 1, 1, 0, 0, 1, 1, 0, 1, 0}; // PWM: 3, 5, 6, 9, 10, 11. Provide 8-bit PWM output with the analogWrite() function.

int CheckTouch(int AnalogPin) {
  prevValue = sensorValue;
  sensorValue = analogRead(AnalogPin);
  if (sensorValue >= 1023 && sensorValue >= prevValue) {
    return 1;
  }
  if (sensorValue < 1010 & prevValue  <=  1010) {
    return 0;
  }
}

void SaberInital() {
  for (int i = 9; i >= 0; i--) {
    digitalWrite(LEDMartix[i], LOW);
  }
  LEDstatus = 0;
}

void SaberON() {
  for (int i = 0; i <= 9; i++) {
    digitalWrite(LEDMartix[i], HIGH);
    delay(LEDdelay);
    LEDstatus = 1;
  }
}

void SaberOFF() {
  for (int i = 9; i >= 0; i--) {
    digitalWrite(LEDMartix[i], LOW);
    delay(LEDdelay);
    LEDstatus = 0;
  }
}

void SaberFlickON() {
  for (int j = 0 ; j <= 100; j++) {
    for (int i = 0; i <= 10; i++) {
      if (i != 10) {
        digitalWrite(LEDMartix[i], LOW);
      }
      if (i != 0) {
        digitalWrite(LEDMartix[i - 1], HIGH);
      }
    }
    delay( LEDdelay / 2); //定義延遲0.01秒進行
  }
  LEDstatus = 1;
}

void SaberBreatheON() {
  for (int j = -255 ; j <= 255   ; j + BreatheStep) {
    for (int i = 0; i <= 10; i++) {
      if (PWMpin[i] == 0) {
        if (i != 10) {
          digitalWrite(LEDMartix[i], LOW);
        }
        if (i != 0 || PWMpin[i - 1] != 1 ) {
          digitalWrite(LEDMartix[i - 1], HIGH);
        }
      }
      if (PWMpin[i] == 1) {
        analogWrite(LEDMartix[i], abs(j));
      }
    }
    delay( LEDdelay);  //定義延遲0.02秒進行
  }
  LEDstatus = 1;
}

void setup () {
  Serial.begin (9600);
  mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module
  mp3_set_volume (10);
  pinMode(2, OUTPUT); //設定D2為輸出端,劍尾端
  pinMode(3, OUTPUT); //設定D3為輸出端
  pinMode(4, OUTPUT); //設定D4為輸出端
  pinMode(5, OUTPUT); //設定D5為輸出端
  pinMode(6, OUTPUT); //設定D6為輸出端
  pinMode(7, OUTPUT); //設定D7為輸出端
  pinMode(8, OUTPUT); //設定D8為輸出端
  pinMode(9, OUTPUT); //設定D9為輸出端
  pinMode(10, OUTPUT);  //設定D10為輸出端
  pinMode(11, OUTPUT);  //設定D11為輸出端,劍首端,接近劍柄
  pinMode(PowerSW, INPUT);  //設定LED啟動開關接腳在D12,為輸入端
  pinMode(WaveSW, INPUT);  //設定震動開關接腳在D13,為輸入端
  SaberInital();
}

void loop() {
  if (LEDstatus == 0 && digitalRead(PowerSW) == HIGH) { //當有開關觸發LED亮
    mp3_play (random(6, 8));  //先將光劍啟動的音效檔定為0006.mp3 或0007.mp3, 藉由亂數處理任意播放
    SaberON();
    delay (1000 - LEDdelay * 9); //播放1秒音效
  }
  if (LEDstatus == 1 &&  digitalRead(PowerSW) == HIGH) { //當有開關觸發LED暗
    mp3_play (random(9, 11)); //先將光劍關閉的音效檔定為0009.mp3 或0010.mp3, 藉由亂數處理任意播放
    SaberOFF();
    delay (1000 - LEDdelay * 9); //播放1秒音效
  }
  if (LEDstatus == 1 && CheckTouch(A0) == 1) {
    mp3_play (2);  //播放揮光劍的音效檔定為0002.mp3
    SaberBreatheON();
    delay (2000 - LEDdelay * 255 / BreatheStep * 2);
  }
  if (LEDstatus == 1) { //當光劍啟動時紀錄震動開關觸發狀態
    for (int i = 0; i < 4; i++) {
      hum[i] = digitalRead(WaveSW);
      delay(250);
    }
    if ((hum[0] != 0 && hum[1] != 0 && hum[2] != 0 && hum[3] != 0) || (hum[0] != 1 && hum[1] != 1 && hum[2] !=  1 && hum[3] != 1)) {
      mp3_play (1);  //播放揮光劍的音效檔定為0001.mp3
      SaberFlickON();
      delay (1000 - LEDdelay * 9 / 2);
    }
  }
}

2016年3月17日 星期四

Arduino lightsaber DIY


光劍的題材很多人在做,比如說 泡棉光劍..有音效 可對打不怕重傷 又有藍芽控制 真的好棒.
想要當原力武士要打造一把自己專屬光劍,只要會Arduino,靠網路上的分享文章就可以DIY了,
以下文章的資源大部分都來自於網路上的分享.

如想要簡單的光劍,揮舞有音效,開啟以及關閉時會有光線升降的效果
  • 就材料上單晶片挑選Arduino nano當控制板,一來小二來便宜.
  • 音效需要MP3 player. Mini MP3 module *1, 稍嫌貴了些...
    音效coding的部分可參考DFPlayer Mini MP3的範例
  • TF card *1 用來存放MP3檔案,MP3的音效檔可以到The Force Net尋找Lightsaber sound的MP3
  • 劍身先找壓克力燈管 直徑23mm左右的.先把燈管做出來
  • 劍柄的部分找3D印表機列印囉.
  • 電源的部分,可以找單顆18650電池的行動電源提供5V的DC輸出
  • 開關的部分 需要微動開關作為Power ON/OFF的切換
  • 水銀開關作為晃動時的Audio ON/FF的判斷
  • LED數顆,光劍的LED串接可以參考超炫IoT光劍自製HowTo完全公開!
    (以下相關LED連接的圖片都擷取自上述連結)

但使用上 就要規劃一下,看一下如果想要有10段光線升降,會用掉D2~D11 pin
超炫IoT光劍自製的文章中採用的是6段光線升降,用的是3.3V的DC,

可能實際上要考慮一下Arduino是5V的DC
至於5V能並聯幾顆LED,串聯電阻多大,可以先參考一下這篇文章,
為什麼LED需要串聯的電阻值是220 ohm?
也可利用以下連結直接在線上作計算.
LED限流電阻值-線上計算器


針對Arduino的pin define先規劃一下




D0~D1連接Mini MP3 player
D2~D11連接LED Matrix控制LED燈管
剩下的D12 / D13當電源控制開關的訊號囉.
Pin define的規劃如下.剩下就是coding跟買材料來組裝.

Arduino Nano
DFPlayer Mini MP3
Speaker
LED 
N/A
SPK_1
RED Line
 
N/A
SPK_2
Black Line
 
TX/D1
RX
 
 
RX/D0
TX
 
 
RST
 
 
 
GND
GND
GND
GND
D2
 
 
LED matrix 1
D3
 
 
LED matrix 2
D4
 
 
LED matrix 3
D5
 
 
LED matrix 4
D6
 
 
LED matrix 5
D7
 
 
LED matrix 6
D8
 
 
LED matrix 7
D9
 
 
LED matrix 8
D10
 
 
LED matrix 9
D11
 
 
LED matrix 10
D12
 
 
LED On/OFF
D13
 
 
Audio On/OFF
3V3
 
 
 
AREF
 
 
 
A0
 
 
 
A1
 
 
 
A2
 
 
 
A3
 
 
 
A4
 
 
 
A5
 
 
 
A6
 
 
 
A7
 
 
 
5V
VCC
 
VCC
RESET
 
 
 
GND
 
 
 
VIN
 
 
 





就以上的規劃coding的展開如下,剩下就是debug囉.!


#include "SoftwareSerial.h"
#include "DFPlayer_Mini_Mp3.h"

const int LedMartix1 = 2;     //設定LED Martix1接腳在第2pin
const int LedMartix2 = 3;     //設定LED Martix2接腳在第3pin
const int LedMartix3 = 4;     //設定LED Martix3接腳在第4pin
const int LedMartix4 = 5;     //設定LED Martix4接腳在第5pin
const int LedMartix5 = 6;     //設定LED Martix5接腳在第6pin
const int LedMartix6 = 7;     //設定LED Martix6接腳在第7pin
const int LedMartix7 = 8;     //設定LED Martix7接腳在第8pin
const int LedMartix8 = 9;     //設定LED Martix8接腳在第9pin
const int LedMartix9 = 10;      //設定LED Martix9接腳在第10pin
const int LedMartix10 = 11;     //設定LED Martix10接腳在第11pin
const int PowerON = 12;     //設定LED啟動開關接腳在第12pin
const int AudioON = 13;     //設定水銀開關接腳在第13pin
const int LEDdelay = 30;      //延遲0.03秒進行一次LED升降
int LEDstatus = 0;      //定義變量為LEDstatus=0

void setup () {
  Serial.begin (9600);
  mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module
  mp3_set_volume (10);
  pinMode(AudioON, INPUT);          //設定水銀開關為輸入端
  pinMode(PowerON, INPUT);          //設定LED啟動開關為輸入端
  pinMode(LedMartix10, OUTPUT);     //設定LED Martix10為輸出端
  pinMode(LedMartix9, OUTPUT);      //設定LED Martix9為輸出端
  pinMode(LedMartix8, OUTPUT);      //設定LED Martix8為輸出端
  pinMode(LedMartix7, OUTPUT);      //設定LED Martix7為輸出端
  pinMode(LedMartix6, OUTPUT);      //設定LED Martix6為輸出端
  pinMode(LedMartix5, OUTPUT);      //設定LED Martix5為輸出端
  pinMode(LedMartix4, OUTPUT);      //設定LED Martix4為輸出端
  pinMode(LedMartix3, OUTPUT);      //設定LED Martix3為輸出端
  pinMode(LedMartix2, OUTPUT);      //設定LED Martix2為輸出端
  pinMode(LedMartix1, OUTPUT);      //設定LED Martix1為輸出端
  digitalWrite(LedMartix10, LOW);    //設定LED Martix10預設LOW
  digitalWrite(LedMartix9, LOW);    //設定LED Martix9預設LOW
  digitalWrite(LedMartix8, LOW);    //設定LED Martix8預設LOW
  digitalWrite(LedMartix7, LOW);    //設定LED Martix7預設LOW
  digitalWrite(LedMartix6, LOW);    //設定LED Martix6預設LOW
  digitalWrite(LedMartix5, LOW);    //設定LED Martix5預設LOW
  digitalWrite(LedMartix4, LOW);    //設定LED Martix4預設LOW
  digitalWrite(LedMartix3, LOW);    //設定LED Martix3預設LOW
  digitalWrite(LedMartix2, LOW);    //設定LED Martix2預設LOW
  digitalWrite(LedMartix1, LOW);    //設定LED Martix1預設LOW
}

void loop() {
  if (LEDstatus == 0 && digitalRead(PowerON) == HIGH) { //當有開關觸發LED亮
    mp3_play (random(6, 8));     //先將光劍啟動的音效檔定為0006.mp3 或0007.mp3, 藉由亂數處理任意播放
    delay (1000);    //播放1秒音效
    for (int i = 2; i <= 11; i++) {
      digitalWrite(i, HIGH);
      delay(LEDdelay);
      LEDstatus = 1;
    }
  }
  if (LEDstatus == 1 && digitalRead(PowerON) == HIGH) { //當有再次開關觸發LED暗
    mp3_play (random(9, 11));     //先將光劍關閉的音效檔定為0009.mp3 或0010.mp3, 藉由亂數處理任意播放
    delay (1000);    //播放1秒音效
    for (int i = 11; i >= 2; i--) {
      digitalWrite(i, LOW);
      delay(LEDdelay);
      LEDstatus = 0;
    }
  }
  if (LEDstatus == 1) { //當光劍啟動時紀錄水銀開關觸發狀態
    for (int i = 0; i < 4; i++) {
      hum[i] = digitalRead(AudioON);
    }
    if ((hum[0] != LOW && hum[1] != LOW && hum[2] != LOW && hum[3] != LOW) || (hum[0] != HIGH && hum[1] != HIGH && hum[2] !=  HIGH && hum[3] != HIGH)) {
      randNumber = random(1, 5);
      mp3_play (randNumber);     //先將揮光劍的音效檔定為0001~0004.mp3, 藉由亂數處理任意播放
      delay (randNumber * 1000);
    }
  }
}

2016年3月16日 星期三

小豬仔兩歲囉


集體慶生的優點就是熱鬧非凡,蛋糕一定出色,媽媽特地挑了一個只要是小孩都一定會認識的巧虎
果然震撼力十足每個小孩都認識.

要一群不知道自己是壽星的小孩聚在蛋糕前面是件非常困難的工作.
小朋友腦袋想的大概是巧虎是要拿來玩得嗎?(我個人猜想)

瑄瑄壓根沒想到這是她的生日蛋糕,倒是對其他的工具感到好奇.

反倒是當姐姐比較懂,對於蠟燭蛋糕.很快就想到生日,但這是妹妹的生日,別搶著吹蠟燭.

結論最後是,姊姊比妹妹還享受生日宴會.當然啦!也只有妹妹傻呼呼的年紀才能這樣做.
等再大一點.可能就懂了.長大後的姊姊應該是不會搶著替妹妹吹蠟燭啦!

之後,還是在家裡再吃一次專屬於壽星的蛋糕.
比起一歲慶生的他,更加懂事,也會跑了.

要乖乖長大唷.小豬仔.

光線與植物生長的關係

擷取兩份網頁上的知識

LED植物生長燈知識


光譜範圍對植物生理的影響
  • 280 ~ 315nm ––>  此種波長已屬紫外線光線,對於各類動、植物甚至於菌類生長,均有直接壓制性生長的功能,對形態與生理過程的影響極小。
  • 315 ~ 400nm ––> 此種光波亦屬遠紫外線光雖無紫外線傷害植物,為對植物生長並無直接作用,葉綠素吸收少,影響光週期效應,阻止莖伸長。
  • 400 ~ 520nm(藍)–> 此類波長可直接處使植物根、莖部位發展,對於葉綠素與類胡蘿蔔素吸收比例最大,對光合作用影響最大。
  • 520 ~ 610nm(綠)–> 綠色性植物排斥性推擠,綠色素的吸收率不高。
  • 610 ~ 720nm(紅)–> 植物的葉綠素吸收率不高,唯此波長對於光合作用與植物生長速度有顯著影響。
  • 720 ~ 1000nm ––> 此類波長泛屬紅外線波長,對於植物的吸收率低,可直接刺激細胞延長,會影響開花與種子發芽。
  • >1000nm ––> 已接近雷射光波長已轉換成為熱量。

以上的植物與光譜資料來看,每種波長的光線對於植物光合作用的影響是不同的,植物對於光合作用需要的光線中,400 ~ 520nm(藍色)光線,以及610 ~ 720nm(紅色)對於光合作用貢獻最大,而520 ~ 610nm(綠色)光線,對於植物行使生長作用的功效比率很低。
若按照以上原理植物只對於400 ~ 520nm(藍色)及610 ~ 720nm(紅色),的光譜有直接幫助生長的效果,所以學術概念下的植物燈都是做成紅藍組合、全藍、全紅三種形式,以提供紅藍兩種波長的光線,用來覆蓋植物行光合作用所需的波長範圍。
在視覺效果上,紅、藍組合的LED植物生長燈呈現粉紅色,這種混光色實對生物照明是極為不舒服的色系,然卻只能以實用性怯其外觀,以擇其實用性為主。
利用上述的數據一般的植物燈的紅藍燈色譜比例一般在5:1 ~ 10:1之間為宜,通常可選7~ 9:1的比例,唯比例分配需採燈珠亮度比為混光依據,非採燈珠數量為混光依據。
用led植物生長燈於植物種植時時,一般距離葉片的高度為30-50公分左右,這中間尚需要實際依種植植物的種類給予不同光強度,調整高度一般視為最簡便的亮度調整方式。

---------------------這篇文章還針對水中植物該注意的參數介紹-------------
水草缸的光照
光照是水草生長發育的重要環境,光照由,(1)燈光的光質,(2)燈光的光度,(3)照明的時間,三項要件所構成。當水草缸中的水草,會正常的冒出氣泡,這表示水草在行光合作用,也表示這個水草缸「美得冒泡」很正常。
(1)燈光的光質
水草缸使用一般植物燈就可以,注意太陽光譜中,只有在藍光區的400~520nm,紅燈區的610~720nm,可以使植物可以行光合作用,所以選擇植物燈時,藍光400~520nm,紅燈610~720nm的光質一定要好,紅光對綠色水草較有利,藍光對紅色水草較有利。一般植物燈的演色性不佳,人在觀賞水草缸時,觀賞的效果並不理想,解決之道,只要另外增加「觀賞光源」即可,例﹔太陽燈管。
備註﹕植物行光合作用,葉綠素a的吸收高峰,在藍光區的430nm處,在紅光區的660nm處,葉綠素b的吸收高峰,在藍光區的435nm處,在紅光區的643nm處。所以選購燈管的時候選波長高峰分佈在430nm~435還有643nm~660nm,如果不能同時滿足葉綠素a,b的話.,以葉綠素a為主要考量,對水草比較好。
(2)燈光的光度
燈光的光度要高,一般燈的瓦數(W)愈高,光度愈高,燈具距離水面愈近,光度愈高。以螢光燈(俗稱日光燈)60流明/瓦的功率來估算,平均每公升水量,需要0.5~1W的功率。詳細的預估,每公升水量,水深30cm需要0.5~0.6W,水深30~40cm需要0.7~0.8W,水深40~50cm需要0.9~1W。光度高不高,可以種一兩株陽性水草,陰性水草,看看生長狀況就知道。水草盡量選擇,耐陰性的水草,不管光度高不高,耐陰性水草都可以生長的很好。
(3)照明的時間
平均每天照明 8~12小時,主要是看水草的生長狀況,生長狀況好每天照明 10小時也可以,生長狀況不理想,可以適度的延長照明時間。
如何選擇水草缸的燈源
根據實驗水草缸的流明值,每公升至少要30-50流明(LUMEN)的光照。所以每個水草缸在選擇燈源之前,必須以該燈源每瓦流明值,估算一下該燈源合不合適,該不該選用。
各種燈源的每瓦流明值,參考如下:
燈泡,約7流明/瓦螢光燈泡,約9流明/瓦鹵素燈泡,約16流明/瓦日光燈,約16流明/瓦水銀燈,約52~55流明/瓦金屬鹵素燈,約74~77流明/瓦T8螢光管,約55~75流明/瓦PL螢光燈,約66~80流明/瓦T5螢光管,約96~64流明/瓦
高功率T5螢光燈己受到水族市場的關注與青睞,主要原因是燈管體積細小,光效高,演色性好,光衰小,壽命長,無頻閃等。這特性提供了使用者更多的使用空間與達到節省能的重大效果,必將成為水草缸的首選。
如何計算水草缸所需要的流明
根據實驗水草缸的流明值,每公升至少要30-50流明(LUMEN)的光照。一個200公升水量的水草缸,若選擇太陽螢光燈管,其每瓦流明值為75流明/瓦,水族箱所需的總流明值為8000流明(40流明/公升 x 200公升),若選擇每瓦具有70流明的40瓦太陽螢光管,每支40瓦太陽螢光管的流明值為2800流明(70流明/瓦 x 40瓦),三支40瓦太陽螢光管的流明總值為8400流明,所以一個200公升水量的水草缸,需要三支40瓦的燈太陽螢光管。
色溫是什麼
所謂色溫是表示「光顏色的量」,它的定義是:當光源所發射的光顏色與「黑體」在某一溫度輻射的溫度相同時,這時黑體的溫度稱為該光源的色溫度,簡稱色溫,用絕對溫度(K)表示。

看來商品已經問世了,連介紹都很詳細呢,還有光譜的說明.
----------------------------------------------------------------------------------------------
VITALUZ多波段LED植物栽培燈