<source : greatway9999>


一、功能描述

(一)、紅外線遙控

按下遙控的前後左右,可讓車子做出 "前進"、"後退"、"左旋"、"右旋"的動作。
按下 "OK"鍵 (或自行選擇合適按鍵來定義),讓車子 "停止",並且蜂鳴器發出旋律。
自行定義兩個按鍵,控制紅燈與綠燈。

(二)、藍芽遙控

動作同上,讓藍芽與紅外線可自由控制。


二、所需材料列表

1.紅外線接收模組

<圖片來源 : 露天拍賣>


2.藍芽模組


<圖片來源 : 露天拍賣>

3.蜂鳴器
4.智高Arduino積木組


備註 : 以上圖片來源為隨機在露天拍賣上尋找,非和特定廠商合作。

三、實作分享

(一)、查找紅外線按鈕的對應數字組

請先於此處,下載 <IRRemote>程式庫。並載入Arduino的城市庫,同時記得將原本的 Robot Remote程式庫先移除,避免衝突。

再透過IRrecvDemo這支範例程式,讀取遙控器上各指定按鍵的十進位數字。如下圖。



以我接收到的數字為例 :
前進 : 417813165
後退 : 417845805
...,把這些數字記錄下來,待會要填到程式中。


(二)、撰寫動作指令,以Ardublock為例

1.設定紅外線與藍芽

先宣告一個紅外線數值變數 "IR" ,初始值為0。
接著再將紅外線接收器所接受到的值,存到 "IR" 變數。

宣告一個字元變數 "char" ,並設定讀取序列的值存到 "char" 。作為藍芽模組控制用。

程式撰寫如下圖 :


2.定義動作

右馬達接到腳位pin4,左馬達接到腳位pin7。紅燈接到D9腳位。綠燈接到D11腳位。

以 "OR"的方式將讓紅外線與藍芽兩個條件並存。將剛紀錄到的紅外線對應數字組,填到條件中。

若你是使用Android手機,請於Play商店中下載藍芽控制app,同時設定前、後、左、右、停、亮紅燈、亮綠燈。記得這些條件要和紅外線遙控的功能相對應。

最後以副程式的方式呈現。程式碼如下 :




3.將副程式整合到主程式,如下圖。



4.下載 TimeFreeTone模組,並寫入程式

將上述程式的ardublock轉成 ardu C語言,接著下載 TimeFreeTone模組。



下載完後,把TimeFreeTone載入 Arduino 程式庫,再重新開啟。如此將可以在Arduino範例程式中看到TimeFreeTone模組。打開TimeFreeToneExample程式,並將標頭擋、腳位宣告、和旋律程式寫入剛才轉好的 ardu C語言。完成程式如下圖,最後記得要將藍芽的brad rate改成38400。

#include <IRremote.h>
#include <Servo.h>
#include <TimerFreeTone.h>

#define TONE_PIN 10

int melody[] = { 262, 196, 196, 220, 196, 0, 247, 262 };
int duration[] = { 250, 125, 125, 250, 250, 250, 250, 250 };

unsigned long _ABVAR_1_IR = 0UL ;
//libraries at http://www.duinoedu.com/
IRrecv monRecepteur(3);
char _ABVAR_2_char = ' ' ;
Servo servo_pin_4;
Servo servo_pin_7;

void IR_control();

void setup()
{
  monRecepteur.enableIRIn(); 
  Serial.begin(38400);
  servo_pin_4.attach(4);
  servo_pin_7.attach(7);
  pinMode( 9 , OUTPUT);
  pinMode( 11 , OUTPUT);
  _ABVAR_1_IR = 0UL ;

}

void loop()
{
  _ABVAR_1_IR = monRecepteur.lireCodeIr()  ;
  _ABVAR_2_char = Serial.read();
  IR_control();
  Serial.print("IR=");
  Serial.print(_ABVAR_1_IR);
  Serial.println();
  Serial.print("CHAR=");
  Serial.print(_ABVAR_2_char);
  Serial.println();
  delay( 100 );
}

void IR_control()
{
  if (( ( ( _ABVAR_1_IR ) == ( 417813165 ) ) || ( ( _ABVAR_2_char ) == ('1') ) ))
  {
    servo_pin_4.write( 120 );
    servo_pin_7.write( 60 );
  }
  if (( ( ( _ABVAR_1_IR ) == ( 417829485 ) ) || ( ( _ABVAR_2_char ) == ('2') ) ))
  {
    servo_pin_4.write( 60 );
    servo_pin_7.write( 60 );
  }
  if (( ( ( _ABVAR_1_IR ) == ( 417796845 ) ) || ( ( _ABVAR_2_char ) == ('3') ) ))
  {
    servo_pin_4.write( 120 );
    servo_pin_7.write( 120 );
  }
  if (( ( ( _ABVAR_1_IR ) == ( 417845805 ) ) || ( ( _ABVAR_2_char ) == ('4') ) ))
  {
    servo_pin_4.write( 60 );
    servo_pin_7.write( 120 );
  }
  if (( ( ( _ABVAR_1_IR ) == ( 417857280 ) ) || ( ( _ABVAR_2_char ) == ('5') ) ))
  {
    servo_pin_4.write( 90 );
    servo_pin_7.write( 90 );
    for (int thisNote = 0; thisNote < 8; thisNote++) { // Loop through the notes in the array.
    TimerFreeTone(TONE_PIN, melody[thisNote], duration[thisNote]); 
    delay(50); // Short delay between notes.
  }
  }
  if (( ( ( _ABVAR_1_IR ) == ( 417808575 ) ) || ( ( _ABVAR_2_char ) == ('6') ) ))
  {
    digitalWrite( 9 , HIGH );
    digitalWrite( 11 , LOW );
  }
  if (( ( ( _ABVAR_1_IR ) == ( 417841215 ) ) || ( ( _ABVAR_2_char ) == ('7') ) ))
  {
    digitalWrite( 9 , LOW );
    digitalWrite( 11 , HIGH );
  }
}


程式到此結束。
---
相關文章 :

#紅外線接收模組 #bluetooth #IRRemote #TimeFreeTone


0 留言