2016年2月28日 星期日

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



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

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

硬體
無源蜂鳴器*1
電位器*1(可調電阻)
LED燈+220或330電阻*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程式就簡單的讓其他腳位都設低電位,便會讓4位8個燈全都點亮↓