伪智能开关
前言
天气越来越热,顶楼更是热得不行,白天是不舍得开空调的,毕竟电费贵两毛钱。埋头折腾,也就不觉得热了。
本文介绍了最近折腾的一个无聊的装置——伪智能开关,没有什么实际用处,就跟之前制作的黑白棋子分类一样,纯粹是觉得好玩,不喜可喷。
简介
舵机控制模块
装置使用了四个舵机,为了方便接线,先做了一个舵机控制模块,整合了5V1A电源、Arduino Nano板及拓展板、HC05蓝牙模块和38KHz红外接收模块。
本次未使用HC05蓝牙模块,考虑下一个项目通过MIT App Inventor做一个配套的App,配合蓝牙模块演示。
控制方式使用的红外遥控,控制套件在之前的文章里介绍过,这里就偷懒直接复制粘贴了。
红外遥控套件介绍
红外遥控套件包括红外遥控器和38KHz红外接收模块。
红外遥控器具有17个功能键,发射距离最远可达8米,适合在室内操控各种设备。实际控制距离只有5-8米,受周围环境因素以及中间阻挡物影响。
38KHz红外接收模块采用HX1838,可接收标准38KHz调制的遥控器信号,通过对进行编程,即可实现对遥控器信号的解码操作,从而可制作各种遥控机器人以及互动作品。
使用以下代码可以在串口监视器中读取红外遥控器17个功能键的输出信号。
#includeint RECV_PIN = 9; //接收模块信号线接D9
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){
irrecv.enableIRIn();
Serial.begin(9600);
}
void loop() {
if (irrecv.decode(&results)) //读取遥控器信号
{
Serial.println(results.value);
irrecv.resume();
}
}
经过一一测试得到如下表格:
按键 | 输出信号 |
---|---|
1 | 16753245 |
2 | 16736925 |
3 | 16769565 |
4 | 16720605 |
5 | 16712445 |
6 | 16761405 |
7 | 16769055 |
8 | 16754775 |
9 | 16748655 |
星号 | 16738455 |
0 | 16750695 |
井号 | 16756815 |
上 | 16718055 |
左 | 16716015 |
确认 | 16726215 |
右 | 16734885 |
下 | 16730805 |
开关盒外框架
开关盒外框架构思了三种方案,一脉相承,从极蠢到还能接受。方案一浪费了六个多小时打印,直接放弃了,方案二和方案三是可行的,演示在文末。代码和接线是方案三的。
-
方案二
-
方案三
接线
代码
#include#include
Servo servoA,servoB,servoC,servoD;
#define PinA 2
#define PinB 3
#define PinC 4
#define PinD 5 //四个舵机的控制针脚
#define RECV_PIN 12
int state = 90;
int state1 = 170;
int state2 = 10; //舵机的三种状态
char value;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
servoA.attach(PinA);
servoB.attach(PinB);
servoC.attach(PinC);
servoD.attach(PinD);
servoA.write(state);
servoB.write(state);
servoC.write(state);
servoD.write(state); //起始状态均为90°
irrecv.enableIRIn();
}
void loop(){
if (irrecv.decode(&results)) {
if (results.value==16753245){
servoA.write(state1); delay(200);
servoA.write(state);
}
if (results.value==16720605){
servoB.write(state2); delay(200);
servoB.write(state);
}
if (results.value==16736925){
servoA.write(state2); delay(200);
servoA.write(state);
}
if (results.value==16712445){
servoB.write(state1); delay(200);
servoB.write(state);
}
if (results.value==16769565){
servoC.write(state1); delay(200);
servoC.write(state);
}
if (results.value==16761405){
servoD.write(state2); delay(200);
servoD.write(state);
}
if (results.value==16750695){
servoA.write(state1); delay(200);
servoA.write(state2); delay(200);
servoA.write(state);
servoC.write(state1); delay(200);
servoC.write(state);
}
irrecv.resume();
}
}
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com