今天介绍一个稍微复杂点的实验,复杂在设计和代码
——OK,受了抖音西湖大学教授刺激,任何人都可以做研究
——实验:红外遥控三级风速小电扇
——每按一下CH-,风速从1-2-3-1-2-3-1循环
——按下CH+,风扇停止
——没有背景音乐目的是听风扇声音大小判断风速
OK实验介绍完了
我的研究方向为:嵌入式软件设计;硬件电路设计
所以我昨天晚上设计了这个小装置,弄着玩的,有这么难吗?so 简单,就像1+1
01 硬件电路设计
总体硬件电路设计图
所用硬件组件:
1:Arduino
2:红外遥控传感器
3:电机驱动及电机
风扇
风扇驱动模块
红外遥控组件请查看之前实验指导书
接口:
电机驱动器与Arduino Uno电路板之间的接线:
电机驱动器 | Arduino Uno |
IN3 | D9 |
IN4 | D10 |
VCC | 5V |
GND | GND |
轻触按钮模块与Arduino Uno电路板之间的接线:
轻触按钮模块 | Arduino Uno |
VCC | 5V |
GND | GND |
SIG | D2 |
其中灯本实验没有用到,其他管脚不变
02 软件
代码不解释
因为前面的实验解释太多,都是函数调用,唯一要说明的是每一个传感器就是一个模块,组合就可以了
#include<IRremote.h>
const int irReceivePin=7;
IRrecv irrecv(irReceivePin);
decode_results results;
const int buttonPin=2;
const int ledPin=13;
const int motorIn1=9;
const int motorIn2=10;
int ok=0;
int stat=0;
#define rank1 150
#define rank2 200
#define rank3 250
int buttonState;
int lastButtonState=LOW;
long lastDebounceTime=0;
long debounceDelay=50;
void setup() {
// put your setup code here, to run once:
irrecv.enableIRIn();
pinMode(ledPin,OUTPUT);
pinMode(motorIn1,OUTPUT);
pinMode(motorIn2,OUTPUT);
//digitalWrite(buttonPin,HIGH);
Serial.begin(9600);
}
void loop() {
if(irrecv.decode(&results))
{
Serial.println("irCode:");
Serial.println(results.value,HEX);
Serial.println(",bits:");
Serial.println(results.bits);
irrecv.resume();
}
if(results.value==0xFFA25D)
{
delay(1000);
if(results.value==0xFFA25D){
ok+=1;
if(ok>=4)
ok=1;
}
results.value=0;
}
if(results.value==0xFFE21D)
{
delay(1000);
if(results.value==0xFFE21D)
ok=4;
results.value=0;
}
Serial.println(ok);
Serial.println(results.value);
switch(ok)
{
case 1:
clockwise(rank1);
break;
case 2:
clockwise(rank2);
break;
case 3:
break;
clockwise(rank3);
break;
default:
clockwise(0);
}
}
void clockwise(int Speed)
{
analogWrite(motorIn1,0);
analogWrite(motorIn2,Speed);
}
03 实验结果
视频:
红外遥控三级风速风扇
OK串口显示没有放,自己打开串口观察就可以了
串口主要从来调试程序用
就是Arduino总是下载失败,很抓狂,不知道是不是Type-C转USB接口原因,用一个电脑工作习惯了
因为东西太多,两个电脑用起来太麻烦
之前查过Arduino可不可以用Type-C口的,没找到
以后买电脑是不是要买USB接口的呀
如果USB接口被Type-C取代或许会好一些
嵌入式开发用本一定要滞后于当前本的更新
了然