查看: 154|回复: 0

红外遥控小船

[复制链接]
本帖最后由 gada888 于 2021-4-30 23:56 编辑

引言:
Arduino做的各种应用广泛被开源硬件爱好者喜欢。今天给大家介绍一个互动性强的arduino做的小船,特别适合五一户外娱乐,这个项目与众不同之处是电机的控制用了继电器,而不是用的电机控制模块。这个创意最初是看到了国外的instructable里的一个项目,可惜原文里没有提供代码和连线图,于是就想复盘一下,刚好我本来就想写个小船代码,正好把小船底盘用上。玩嘛,创造的乐趣是一般人想象不到的。
原文链接如下:
https://www.instructables.com/Wind-Boat/

thumb.png
第一步:展示内容
人从微波传感前经过后,伺服和水泵同时工作。一个转角度,一个喷水。

第三步:硬件搭建
所需器材:
序号 名称 数量
1 DF Romeo UNO 1
2 四联继电器 1
3 红外接收器 1
4 小船底盘 1
5 小船电机 2
6
7

第五步:
发一些硬件的图片。让人有个直观的认识
图片 (2).jpg
、最初是用arduino nano和led做的测试,
图片 (1).jpg
内部连线
图片 (3).jpg
准备下水实测
第六步:关键步骤
代码上传之前,首先要知道遥控的发送器发出的码值。
2021-04-30_234554.png
  1. #include <IRremote.h>
  2. const int RECV_PIN = 7;
  3. IRrecv irrecv(RECV_PIN);
  4. decode_results results;
  5. void setup(){
  6.   Serial.begin(9600);
  7.   irrecv.enableIRIn();
  8.   irrecv.blink13(true);
  9. }
  10. void loop(){
  11.   if (irrecv.decode(&results)){
  12.         Serial.println(results.value, HEX);
  13.         irrecv.resume();
  14.   }
  15. }
复制代码
我只用了上箭头,左箭头,右箭头,和中键停止几个按钮。因此通过运行上述代码,在COM里看到了码值如下。
上--511DBB
左--52A3D41F
右--20FE4DBB
中--D7E84B1B

这几个码值被我用到了主程序里。作为控制电机工作的关键值。

第七部:连线图
Wiring.png
第八部:代码部分的设计
  1. //coding is done by gada888 from Luoyang
  2. #include "IRremote.h"
  3. int input_pin = 7;
  4. IRrecv irrecv(input_pin);
  5. decode_results signals;
  6. int Chan_1_etat=1;
  7. int Chan_2_etat=1;
  8. const int Chan_1 = 2;
  9. const int Chan_2 = 3;
  10. #define goUp   0x511DBB
  11. //#define goDown 0xA3C8EDDB
  12. #define goLeft 0x52A3D41F
  13. #define goRight 0x20FE4DBB
  14. #define DoStop 0xD7E84B1B
  15. void setup()
  16. {
  17.   Serial.begin(9600);
  18.   irrecv.enableIRIn();
  19.   pinMode(Chan_1, OUTPUT);
  20.   pinMode(Chan_2, OUTPUT);
  21.   digitalWrite(Chan_1, HIGH);
  22.   digitalWrite(Chan_2, HIGH);
  23. }
  24. void loop() {
  25.   if (irrecv.decode(&signals)) {
  26.     Serial.println(signals.decode_type);
  27.     Serial.print(F("received code = 0x"));
  28.     Serial.println(signals.value, HEX); //hex value
  29.     irrecv.blink13(true); //blink leds when code is received
  30.     if (signals.value == goUp )
  31.     {
  32.    digitalWrite(Chan_1, LOW);
  33.    digitalWrite(Chan_2, LOW);
  34.     }
  35. if (signals.value == goLeft )
  36.     {
  37.    digitalWrite(Chan_1, HIGH);
  38.    digitalWrite(Chan_2, LOW);
  39.     }
  40.      if (signals.value == goRight )
  41.     {
  42.    digitalWrite(Chan_1, LOW);
  43.    digitalWrite(Chan_2, HIGH);
  44.     }
  45.    
  46.     if (signals.value == DoStop) {
  47.   digitalWrite(Chan_1, HIGH);
  48.   digitalWrite(Chan_2, HIGH);
  49.     }
  50.     irrecv.resume();
  51.     delay(100);
  52.   }
  53. }
复制代码



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail