伪智能开关

网友投稿 2019-07-24 13:27

前言

天气越来越热,顶楼更是热得不行,白天是不舍得开空调的,毕竟电费贵两毛钱。埋头折腾,也就不觉得热了。

本文介绍了最近折腾的一个无聊的装置——伪智能开关,没有什么实际用处,就跟之前制作的黑白棋子分类一样,纯粹是觉得好玩,不喜可喷。

https://cdn.china-scratch.com/timg/190726/132K43362-0.jpg

简介

舵机控制模块

装置使用了四个舵机,为了方便接线,先做了一个舵机控制模块,整合了5V1A电源、Arduino Nano板及拓展板、HC05蓝牙模块和38KHz红外接收模块。

https://cdn.china-scratch.com/timg/190726/132K51041-1.jpg

本次未使用HC05蓝牙模块,考虑下一个项目通过MIT App Inventor做一个配套的App,配合蓝牙模块演示。

控制方式使用的红外遥控,控制套件在之前的文章里介绍过,这里就偷懒直接复制粘贴了。

红外遥控套件介绍

红外遥控套件包括红外遥控器和38KHz红外接收模块。

红外遥控器具有17个功能键,发射距离最远可达8米,适合在室内操控各种设备。实际控制距离只有5-8米,受周围环境因素以及中间阻挡物影响。

38KHz红外接收模块采用HX1838,可接收标准38KHz调制的遥控器信号,通过对进行编程,即可实现对遥控器信号的解码操作,从而可制作各种遥控机器人以及互动作品。

https://cdn.china-scratch.com/timg/190726/132K51033-2.jpg

使用以下代码可以在串口监视器中读取红外遥控器17个功能键的输出信号。

#include
int 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

开关盒外框架

开关盒外框架构思了三种方案,一脉相承,从极蠢到还能接受。方案一浪费了六个多小时打印,直接放弃了,方案二和方案三是可行的,演示在文末。代码和接线是方案三的。

  • 方案二

    https://cdn.china-scratch.com/timg/190726/132K5N52-3.jpg

  • 方案三

    https://cdn.china-scratch.com/timg/190726/132K43362-0.jpg

接线

https://cdn.china-scratch.com/timg/190726/132K63Y2-5.jpg

代码

#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