风筝
发表于: 2019-8-17 15:07:14 | 显示全部楼层

在本篇文章中,您将了解IR协议以及如何使用IR接收器模块。首先,您将看到IR协议的工作原理,然后您将学习使用Arduino和红外遥控套件。还提供了一些实用示例,以帮助您更好地学习它。


IR协议简介

IR红外通信是最常用的无线通信方法之一,因为它易于使用且价格合理。波长比可见光长的红外光不在人类视觉范围内。这就是为什么它是无线通信的好选择。当您按下电视控制器上的按钮时,控制器上的LED会持续打开和关闭,并使调制的红外信号从控制器发送到电视。该信号在解调后执行。IR接收器模块用于接收IR信号。这些模块工作频率为3.8 KHz。当传感器未以工作频率暴露在任何光线下时,VOUT输出的值等于VS(电源)。当暴露在38 kHz红外光下时,此输出将为零。

Figure-2-IR-Receiver-Modules.jpg

Figure-3-IR-Receiver-Modules-pinout.png

这些模块有3个引脚用于VOUT、VDD和地,因此在电路中非常容易使用它们。


所需的材料

●    Arduino UNO开发板

●    RGB LED灯

●    红外遥控和红外传感器

●    跳线

●    Arduino IDE


找到每个遥控器按键的代码

在这部分中,我们要在Arduino和IR发送器、接收器之间建立连接。为此,我们首先需要知道遥控器上每个按钮的代码。通过按下每个按钮,特定信号发送到接收器并将显示在串行监视器窗口中。


电路连接:

Figure-4-circuit1-1.png

代码:

您需要安装IR库才能使用IR模块。从以下链接下载库,在Sketch窗口中,打开Include library选项并选择IRRemote.h。


默认情况下,此库可能在您的Arduino库中可用。

  1. /*  

  2. *  IR read codes

  3. *  by Hanie kiani

  4. *  https://electropeak.com/learn/   

  5. */

  6. #include <IRremote.h>  //including infrared remote header file

  7. int RECV_PIN = 7; // the pin where you connect the output pin of IR sensor

  8. IRrecv irrecv(RECV_PIN);

  9. decode_results results;

  10. void setup()

  11. {

  12. Serial.begin(9600);

  13. irrecv.enableIRIn();

  14. {

  15. void loop()

  16. {

  17. if (irrecv.decode(&results))// Returns 0 if no data ready, 1 if data ready.

  18. {

  19.   int results.value = results;// Results of decoding are stored in result.value

  20.   Serial.println(" ");

  21.   Serial.print("Code: ");

  22.   Serial.println(results.value); //prints the value a a button press

  23.   Serial.println(" ");

  24.   irrecv.resume(); // Restart the ISR state machine and Receive the next value

  25. }
复制代码

让我们仔细看看代码:

  1. int RECV_PIN = 7;
  2. IRrecv irrecv(RECV_PIN);
复制代码

以上代码指定连接到接收器模块输出的引脚。

  1. irrecv.enableIRIn();
复制代码

初始化接收IR信号

  1. if (irrecv.decode(&results))
复制代码

irrecv.decode(&results)函数对接收到的IR信号进行解码并将其存储在变量中。没有收到任何内容时返回0。


使用红外遥控器控制RGB LED颜色

找到每个按钮的代码后,可以使用它来控制命令。在此示例中,我们将RGB LED连接到Arduino并使用遥控器更改颜色。为此,请在遥控器上指定几个按钮并保存其代码。在该示例中,使用按钮1至3。然后为每个按钮指定特定颜色。最后,按下1至3键中的任意一个,LED会改变其颜色。


电路连接

Figure-5-circuit2-1.png

代码

  1. /*  

  2. *  IR read codes

  3. *  by Hanie kiani

  4. *  https://electropeak.com/learn/   

  5. */

  6. #include <IRremote.h>



  7. int RECV_PIN =6;

  8. int bluePin = 11;

  9. int greenPin = 10;   

  10. int redPin = 9;

  11. IRrecv irrecv(RECV_PIN);

  12. decode_results results;



  13. void setup(){

  14.   Serial.begin(9600);

  15.   irrecv.enableIRIn();

  16.   pinMode(redPin, OUTPUT);

  17.   pinMode(greenPin, OUTPUT);

  18.     pinMode(bluePin, OUTPUT);

  19. }



  20. void loop(){

  21.     if (irrecv.decode(&results)){

  22. int value = results.value;

  23. Serial.println(value);  

  24.         switch(value){

  25.           case 12495: //Keypad button "1"

  26.           //set color red

  27.           analogWrite(redPin, 0xFF);

  28.           analogWrite(greenPin,0x08);

  29.           analogWrite(bluePin, 0xFB);

  30.           }



  31.         switch(value){

  32.           case -7177: //Keypad button "2"

  33.           //set color skyblue

  34.           analogWrite(redPin, 0x00);

  35.           analogWrite(greenPin,0xFF);

  36.           analogWrite(bluePin, 0xFF);

  37.           }

  38.           switch(value){

  39.           case 539: //Keypad button "3"

  40.            //set color pink

  41.           analogWrite(redPin, 0x1F);

  42.           analogWrite(greenPin,0x00);

  43.           analogWrite(bluePin, 0x8F);

  44.           }

  45.           switch(value){

  46.           case 25979: //Keypad button "4"

  47.           //set color light green

  48.           analogWrite(redPin, 0x11);

  49.           analogWrite(greenPin,0x5F);

  50.           analogWrite(bluePin, 0x01);

  51.           }



  52.         irrecv.resume();  

  53.     }

  54. }
复制代码

使用红外遥控器播放超级马里奥!

现在,您将使用IR遥控器而不是键盘来玩超级马里奥。 要做到这一点,你需要一台Arduino Leonardo或Micro开发板。


电路连接

Figure-6-circuit3-1.png

代码

为了控制键盘,你需要keyboard.h库。 您可以在以下链接中找到它:Keyboard.h库

  1. /*  

  2. *  IR REMOTE CONTROL + RGB

  3. *  by Hanie Kiani

  4. *  https://electropeak.com/learn/   

  5. */



  6. #include <IRremote.h>

  7. #include  <Keyboard.h>





  8. int RECV_PIN = 11;

  9. IRrecv irrecv(RECV_PIN);

  10. decode_results results;



  11. void setup()

  12. {

  13.   Serial.begin(9600);

  14.   irrecv.enableIRIn(); // Start the receiver

  15.   Keyboard.begin();

  16. }



  17. void loop() {

  18.   if (irrecv.decode(&results))  

  19.   {  int value = results.value;

  20. Serial.println(value);         

  21.       switch(value)

  22.       {

  23.          

  24.         //Backward key is used for left key operation                  

  25.         case 8925:  Keyboard.press(KEY_LEFT_ARROW); //left key

  26.                          delay(100);

  27.                          Keyboard.releaseAll();

  28.                          break;

  29.         //Forward Key is used for right key operation

  30.         case 765:  Keyboard.press(KEY_RIGHT_ARROW); //right  key

  31.                          delay(100);

  32.                          Keyboard.releaseAll();

  33.        //Play Key is used for up key operation

  34.         case -15811:  Keyboard.press(KEY_UP_ARROW); //up  key

  35.                          delay(100);

  36.                          Keyboard.releaseAll();

  37.                          break;                        

  38.       }   

  39.     irrecv.resume(); // Receive the next value

  40.   }

  41. }
复制代码

注意:Keyboard.h库只支持基于32u4和SAMD的开发板(Leonardo、Esplora、Zero、Due和MKR系列)充当键盘。


以上就是本篇文章的全部内容。您可以尝试使用红外遥控器控制机器人。如有问题,请随时在本帖下面进行回复。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-16 20:43 , Processed in 0.037716 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表