本帖最后由 gada888 于 2021-4-30 23:56 编辑  
 
引言: Arduino做的各种应用广泛被开源硬件爱好者喜欢。今天给大家介绍一个互动性强的arduino做的小船,特别适合五一户外娱乐,这个项目与众不同之处是电机的控制用了继电器,而不是用的电机控制模块。这个创意最初是看到了国外的instructable里的一个项目,可惜原文里没有提供代码和连线图,于是就想复盘一下,刚好我本来就想写个小船代码,正好把小船底盘用上。玩嘛,创造的乐趣是一般人想象不到的。 原文链接如下: https://www.instructables.com/Wind-Boat/  
第一步:展示内容 人从微波传感前经过后,伺服和水泵同时工作。一个转角度,一个喷水。  
第三步:硬件搭建 所需器材: |  序号 |  名称 |  数量 |  |  1 |  DF Romeo UNO |  1 |  |  2 |  四联继电器 |  1 |  |  3 |  红外接收器 |  1 |  |  4 |  小船底盘 |  1 |  |  5 |  小船电机 |  2 |  |  6 |   |   |  |  7 |   |   |  
  
第五步: 发一些硬件的图片。让人有个直观的认识 、最初是用arduino nano和led做的测试, 内部连线 准备下水实测 第六步:关键步骤 代码上传之前,首先要知道遥控的发送器发出的码值。 
			
			
			- #include <IRremote.h>
 - 
 - const int RECV_PIN = 7;
 - IRrecv irrecv(RECV_PIN);
 - decode_results results;
 - 
 - void setup(){
 -   Serial.begin(9600);
 -   irrecv.enableIRIn();
 -   irrecv.blink13(true);
 - }
 - 
 - void loop(){
 -   if (irrecv.decode(&results)){
 -         Serial.println(results.value, HEX);
 -         irrecv.resume();
 -   }
 - }
 
  复制代码
 我只用了上箭头,左箭头,右箭头,和中键停止几个按钮。因此通过运行上述代码,在COM里看到了码值如下。 上--511DBB 左--52A3D41F 右--20FE4DBB 中--D7E84B1B  
这几个码值被我用到了主程序里。作为控制电机工作的关键值。  
第七部:连线图 第八部:代码部分的设计 - //coding is done by gada888 from Luoyang 
 - #include "IRremote.h"
 -  
 - int input_pin = 7;
 - IRrecv irrecv(input_pin);
 - decode_results signals;
 - 
 - int Chan_1_etat=1;
 - int Chan_2_etat=1;
 - 
 - const int Chan_1 = 2;
 - const int Chan_2 = 3;
 - 
 - #define goUp   0x511DBB
 - //#define goDown 0xA3C8EDDB
 - #define goLeft 0x52A3D41F
 - #define goRight 0x20FE4DBB
 - #define DoStop 0xD7E84B1B 
 - 
 - void setup()
 - {
 -   Serial.begin(9600);
 -   irrecv.enableIRIn();
 - 
 -   pinMode(Chan_1, OUTPUT);
 -   pinMode(Chan_2, OUTPUT);
 - 
 -   digitalWrite(Chan_1, HIGH); 
 -   digitalWrite(Chan_2, HIGH); 
 -  
 - }
 - 
 - void loop() {
 - 
 -   if (irrecv.decode(&signals)) {
 -     Serial.println(signals.decode_type);
 -     Serial.print(F("received code = 0x"));
 -     Serial.println(signals.value, HEX); //hex value
 -     irrecv.blink13(true); //blink leds when code is received
 - 
 -     if (signals.value == goUp )
 -     {
 -    digitalWrite(Chan_1, LOW); 
 -    digitalWrite(Chan_2, LOW); 
 -     }
 - 
 -  if (signals.value == goLeft )
 -     {
 -    digitalWrite(Chan_1, HIGH); 
 -    digitalWrite(Chan_2, LOW); 
 -     }
 - 
 -      if (signals.value == goRight )
 -     {
 -    digitalWrite(Chan_1, LOW); 
 -    digitalWrite(Chan_2, HIGH); 
 -     }
 -     
 -     if (signals.value == DoStop) { 
 -   digitalWrite(Chan_1, HIGH); 
 -   digitalWrite(Chan_2, HIGH); 
 -     }
 -     irrecv.resume();
 -     delay(100);
 -   }
 - }
 
  复制代码
  
 
 
 |