2016年2月28日 星期日

Arduino UNO學習411.電位器調頻蜂鳴器



Arduino UNO學習411.電位器調頻蜂鳴器

請找2腳一樣長的5V的無源蜂鳴器,安裝時注意正負腳位,
無源蜂鳴器由不同頻率訊號產生音效,頻率可參照Arduino.cc官網資訊,
此學習要由可調電阻輸入數值,再轉換成數據產生頻率並調整LED亮度,

硬體
無源蜂鳴器*1
電位器*1(可調電阻)
LED+220330電阻*1
Arduino的類比輸入數值為0~1023,將其轉換為音頻50~2000,
PWM輸出值為0~255,1023/4=255,轉算給LED,
完成後上傳,並調整電位器電阻值,蜂鳴器將產生不同頻率的聲音,
並同時調整LED的亮度,

int _ABVAR_1_TONE = 0 ;

void setup()
{
  pinMode( 5 , OUTPUT);
}

void loop()
{
  _ABVAR_1_TONE = map ( analogRead(A0) , 0 , 1023 , 50 , 2000 )  ;
  tone(7, _ABVAR_1_TONE);
  analogWrite(5 , ( analogRead(A0) / 4 ));
  delay( 50 );
  noTone(7);
}
 
 

Arduino UNO學習151.PWM呼吸燈



Arduino學習151.PWM呼吸燈

Arduino內建範例中有呼吸燈程式,檔案>範例>Basics>Fade,
此學習則使用ArduBlock來編寫呼吸燈
 
注意數位腳位有標示著~的3,5,6,9,10,11腳位,才有PWM訊號功能,
PWM是輸出模擬類比訊號,讓數位訊號不再只是開和關,
在積木上主要讓輸出值在0~255之間逐加,255時再逐減輸出值,
因此用到許多的數學運算,當正數*-1時轉為負數,當負數*-1時轉為正數,

上傳程式後LED燈是否是漸亮後再漸暗,試著比對Arduino的內建範例,
檔案>範例>Basics>Fade,比較2個程式的差異,
把硬體和軟體腳位改為D8非PWM腳位,比較其差別,

int _ABVAR_1_Bright = 0 ;
int _ABVAR_2_Fade = 0 ;

void setup()
{
  pinMode( 9 , OUTPUT);
  _ABVAR_1_Bright = 0 ;

  _ABVAR_2_Fade = 5 ;

}

void loop()
{
  analogWrite(9 , _ABVAR_1_Bright);
  _ABVAR_1_Bright = ( _ABVAR_1_Bright + _ABVAR_2_Fade ) ;
  if (( ( ( _ABVAR_1_Bright ) == ( 0 ) ) || ( ( _ABVAR_1_Bright ) == ( 255 ) ) ))
  {
    _ABVAR_2_Fade = ( _ABVAR_2_Fade * -1 ) ;
  }
  delay( 30 );
}


2016年2月27日 星期六

Arduino UNO學習540.多工函式庫scoop



Arduino UNO學習540.多工函式庫scoop

之前的學習在loop程式裡是逐一執行的,
若要讓不同燈不同速度同時閃動,或和馬達蜂鳴器等其他設備同時運作,
則需要使用到函式庫scoop.h,來利用delay時的空檔運作其他程式列,
以達到多設備同時運作,
先下載外部函式庫scoop.h,以下載點擇一下載,
下載後copy安裝於Arduino的目錄之下..\Arduino\libraries
再重新執行Arduino,於範例會多出SCoop

另外檢查ArduBlock版本,需要20140704之後的版本才有多工SCoop拼圖塊,
若沒有則請更新版本,
下載後放在.. \Arduino\tools\ArduBlockTool\tool
或是..\Administrator\My Documents\Arduino\tools\ArduBlockTool\tool
一樣重新執行Arduino後執行ArduBlock,確認是否有SCoop拼圖塊

完成scoop.h及ArduBlock版本安裝後,程式才能正確對應,
以下學習簡單的讓2個燈及蜂鳴器以各自不同速度運作,




www.ee543.com

2016年2月25日 星期四

Arduino UNO學習530.74HC595N移位暫存器


Arduino UNO學習530.74HC595N移位暫存器

Arduino UNO的輸出接口不多,可利用其他晶片如74HC595/N,
來減少腳位的使用,以下為腳位圖,並依說明接上硬體
晶片腳位
名稱
功能
硬體對應
1~7
Q1~Q7
輸出
各電阻接燈正腳
8
GND
接地
GND
9
Q7S
串接輸出
 
10
MR
低電位清除資料
+5V
11
SHCP
clock移位時脈
D5
12
STCP
latch暫存時脈
D4
13
OE
低電輸出
 
14
DS
data資料輸入
D2
15
Q0
輸出
各電阻接燈正腳
16
VCC
輸入電壓
+5V


直接引用晶片時脈0~256,作內存8位元資料的閃燈測試

int clockPin = 5;
int latchPin = 4;
int dataPin = 2;
void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}
void loop() {
  for (int numb = 0; numb < 256; numb++) {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, numb);
    digitalWrite(latchPin, HIGH);
    delay(50);
  }
}

在實作時經常會有失敗的情形,多半是接錯或晶片腳與麵包板的接觸問題,
請確認接腳或手壓觸動晶片,或另接外部電源6V1A~9V2A使用,
若上面的程式沒問題,再來用陣列方式來指定控制亮燈
int clockPin = 5;
int latchPin = 4;
int dataPin = 2;
byte index = 0;

const byte LED_A[10] = {
  B11111111,
  B00000001,
  B00000011,
  B00000110,
  B00001100,
  B00011000,
  B00110000,
  B01100000,
  B11000000,
  B10000000,
}; // 8顆10種亮燈方式可自行修改測試

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, LED_A[index]);
  digitalWrite(latchPin, HIGH);
  delay(100);
  index ++;
  if (index == 10) {
    index = 0;  // 10種亮燈後歸0
  }

2016年2月13日 星期六

Arduino學習520.紅外線搖控器IRremote



Arduino學習520.紅外線搖控器IRremote

人類可見光的波長約390~ 700 nm奈米左右,而紅外光的波長超過760 nm,
人眼看不見,各種電器也各用不同的頻率協定以免錯誤搖控,
此篇搭配已開發開放的IRremote程式庫指令解碼,
先到Maker大神Ken Shirriff的部落格網站下載程式庫,以下位址擇一下載,
http://www.righto.com/2010/11/irremote-library-now-runs-on-teensy.html
https://github.com/shirriff/Arduino-IRremote/zipball/master
https://github.com/z3t0/Arduino-IRremote
https://drive.google.com/file/d/0B_hzaKBiDSLgUzFjMmFDZ2I4RFU
將壓縮檔Arduino-IRremote-master.zip解開後,修改目錄名稱更名為IRremote,
並將整個目錄放在安裝Arduino的目錄libraries之中,注意可能為次次目錄,
預設位置為C:\Program Files\Arduino\libraries\IRremote

重新執行Arduino,在範例中會多一個IRremote,並選擇打開IRrecvDemo

跳出另一視窗,查看程式內容得知,訊號腳位為Pin11

搭配寫好的程式來安裝硬體,注意各種IR接收器的腳位不一定相同,
以下為訊號/Gnd/Vcc ,將訊號腳位接Pin11及分別Gnd及+5V

完成硬體後回到電腦上連線上傳程式,並打開監控視窗,
搭配學習套件中的搖控器,或是家中任何的紅外線搖控器,


任意按幾個鍵,Arduino會把接收到的訊號顯示在監控視窗上,
該編碼即是按鍵的指令,取得按鍵編碼後再進一步做對應控制元件,
內建範例HEX為8位元16進位模式,當搖控按太久或是太遠錯誤等,
則會顯示FFFFFFFF ,也可改成DEC為10進位模式以符其他需求,
ArduBlock在201407版之後雖有紅外線接收搖控器拼圖模塊,
但由於紅外線解碼程式並非Arduino內建程式庫,
故外掛資料庫和ArduBlock無法完全相容對應,
若對Arduino IDE已有一定程度了解,可試著安裝ardublock-beta-20140702.jar,
或最後版本ardublock-beta-20140828.jar試試


接著打開另一範例IRrecvDump



上傳後一樣打開監控視窗,取遙控器按任一鍵,一樣由P11接收訊號,取得更完整的資料,可得編碼協定及位元波形等等,可先記錄下需要的資料以便運用,
建議多按幾次確認,以免收到不完整的編碼













www.ee543.com 

Arduino UNO學習360.火災警報器

Arduino UNO學習360.火燄傳感器+蜂鳴器=火災警報器

準備硬體
火燄傳感器*1
1K或10K電阻*1  (接傳感器)
蜂鳴器*1  (或LED燈加電阻)

火燄傳感器長的像二極管LED燈,但顏色為黑色,一樣有長短腳,
用來檢測760nm~1100nm奈米波長內的火源或光源,
由於每款火燄傳感器輸出數值不大相同,故先量測手上的傳感器數值範圍,
將短腳接上5V電源,長腳接電阻到GND及A0,
並套用Arduino的內建範例,,檔案>範例>Basics>AnalogReadSerial,
執行後取打火機點火靠近感應器得到數據,↓

得到基本數據後接上蜂鳴器↓
 

因手邊測得數據為0~900左右,火源越接近感測器數據越大,
所以將啟動值設定為20,可自行修改數值來啟動蜂鳴器,
並斷音300毫秒警告,為方便取數另加了視窗監控數據,
找出ArduBlock程式執行後取打火機點火測試,務必注意安全↓
 
int _ABVAR_1_A0 = 0 ;

void setup()
{
Serial.begin(9600);
    pinMode( 13 , OUTPUT);
}

void loop()
{
    _ABVAR_1_A0 = analogRead(0) ;
Serial.print( _ABVAR_1_A0 );
Serial.println();
    if (( ( _ABVAR_1_A0 ) > ( 20 ) ))
    {
        digitalWrite( 13 , HIGH );
        delay( 300 );
        digitalWrite( 13 , LOW );
    }
    else
    {
        digitalWrite( 13 , LOW );
    }
    delay( 300 );
}

www.ee543.com

2016年2月7日 星期日

Arduino UNO學習142.四位數字LED燈共陽型



Arduino UNO學習142.四位數字LED燈共陽型

之前學習了1位數字的LED燈,此次使用4位數字的LED燈,
一樣要注意共陰或共陽,此學習使用共陽型號為3641BS或是3461BS,
以下為腳位關係圖,燈的第6,8,9,12分別為4位數字的共陽接腳
因是共陽的,只是要點亮所有燈,各腳位只要發出低電位訊號即可,
所以偷懶的搭配外部3V電池,可使用1.5V*2電池盒或3V鈕扣電池,可省去電阻,直接引線到D2~D9共8個負極,而燈腳6,8,9,12到共陽,並接上3V電池,
若是共陰的就不能這樣作了,因為Arduino是輸出5V的,需加上電阻才行,↓

ArduBlock程式就簡單的讓其他腳位都設低電位,便會讓48個燈全都點亮↓