红外遥控小船
本帖最后由 gada888 于 2021-4-30 23:56 编辑引言:Arduino做的各种应用广泛被开源硬件爱好者喜欢。今天给大家介绍一个互动性强的arduino做的小船,特别适合五一户外娱乐,这个项目与众不同之处是电机的控制用了继电器,而不是用的电机控制模块。这个创意最初是看到了国外的instructable里的一个项目,可惜原文里没有提供代码和连线图,于是就想复盘一下,刚好我本来就想写个小船代码,正好把小船底盘用上。玩嘛,创造的乐趣是一般人想象不到的。原文链接如下:https://www.instructables.com/Wind-Boat/https://www.bilibili.com/video/BV1Wq4y1J73d/
第一步:展示内容人从微波传感前经过后,伺服和水泵同时工作。一个转角度,一个喷水。
第三步:硬件搭建所需器材:
序号 名称 数量
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);
}
}
页:
[1]