起因:
由於最近家電遙控器越來越多,想說做一個整合的控制板,可以控制家電
材料:
- 紅外線收發模組
- DC遙控風扇一台(配有遙控器)
- Arduino NANO 一片
- 100歐姆電阻一個
- 杜邦線若干條
- 麵包版一片
開發平台
開發過程紀錄
凡事最麻煩的就是一開始XD,首先要買材料
硬體電路準備
紅外線遙控器
這邊因為我買禾聯的風扇所以就拿禾聯的遙控器拉,就是下面這張
實驗步驟
1. 驗證紅外線接收模組是否正常
接線說明
由於作者沒有DIP 的100歐姆電阻,所以使用SMD的電阻和在洞洞板上,拉出兩條線來插在麵包版上
程式碼
開啟Arduino IDE 並且在匯入程式庫->管理程式庫
輸入IRRemote,並選擇最新版本安裝
安裝完畢後 ,依照下方的程式碼撰寫測試接收模組的程式
#include <IRremote.h>
#define RECV_PIN 7
IRrecv irrecv(RECV_PIN);
decode_results ReciveData;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&ReciveData)) {
Serial.println(ReciveData.value,HEX);
irrecv.resume();
}
}
完成後按下上傳(怎麼選板子跟COMPORT這裡就不多說了~)
接下來開啟序列埠,並拿著遙控器對接收器按下去~
資料出來了"CF311EE"就是遙控器按下開啟的編碼資料
2. 驗證紅外線發射模組是否正常
接線說明
程式碼
#define SEND_PIN 3
void setup()
{
pinMode(SEND_PIN,OUTPUT);
}
void loop() {
irsend.sendNEC(0x0CF311EE, 32);
delay(3000);
}
上傳到arduino NANO
可以開啟關閉電扇了~ YA
3. 反覆第一步紀錄每個按鈕的編碼並記錄下來
4. 撰寫命令控制風扇
此處是加入控制命令,從COMPORT下字串命令下來執行對應的行為
#include <IRremote.h>
#define RECV_PIN 7
#define SEND_PIN 3
IRrecv irrecv(RECV_PIN);
Irsend Irsend(SEND_PIN);
String recive = "";
void setup()
{
Serial.begin(9600);
}
void loop() {
if(Serial.available()>0)
{
char re = Serial.read();
if(re == '\n')
{
if(recive.equals("Fan ON"))
{
Serial.println("Fan ON\n");
Irsend.sendNEC(0x0CF311EE, 32);
}
else if(recive.equals("Fan OFF"))
{
Serial.println("Fan OFF\n");
Irsend.sendNEC(0x0CF311EE, 32);
}
else if(recive.equals("FanSpeed+"))
{
Serial.println("FanSpeed+\n");
Irsend.sendNEC(0xCF3619E, 32);
}
else if(recive.equals("FanSpeed-"))
{
Serial.println("FanSpeed-\n");
Irsend.sendNEC(0xCF3E11E, 32);
}
recive = "";
}
else
{
recive += re;
}
}
}
#define RECV_PIN 7
#define SEND_PIN 3
IRrecv irrecv(RECV_PIN);
Irsend Irsend(SEND_PIN);
String recive = "";
void setup()
{
Serial.begin(9600);
}
void loop() {
if(Serial.available()>0)
{
char re = Serial.read();
if(re == '\n')
{
if(recive.equals("Fan ON"))
{
Serial.println("Fan ON\n");
Irsend.sendNEC(0x0CF311EE, 32);
}
else if(recive.equals("Fan OFF"))
{
Serial.println("Fan OFF\n");
Irsend.sendNEC(0x0CF311EE, 32);
}
else if(recive.equals("FanSpeed+"))
{
Serial.println("FanSpeed+\n");
Irsend.sendNEC(0xCF3619E, 32);
}
else if(recive.equals("FanSpeed-"))
{
Serial.println("FanSpeed-\n");
Irsend.sendNEC(0xCF3E11E, 32);
}
recive = "";
}
else
{
recive += re;
}
}
}
問題紀錄
1.有時候發現怎麼無法成功控制,可能原因有距離太遠,方向不對
參考來源
https://blog.jmaker.com.tw/irremoterecv/
https://blog.jmaker.com.tw/irremotesend/
沒有留言:
發佈留言