基于Arduino智能控制(时钟模块,光敏,红外遥控)
Posted 王六乘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Arduino智能控制(时钟模块,光敏,红外遥控)相关的知识,希望对你有一定的参考价值。
(注:本篇以LED灯的状态来表明实现多种控制的功能。)
一、接线说明
(时钟模块示例图)
(红外模块)
二、代码部分
功能简介
此次模块最终实现的功能是通过红外遥控器上对应的按钮,进入各个按钮所对应的不同模式。
1.单个按钮控制
(1)按下 “ ↑” 按键,单控制红灯亮,
(2)按下“ ↓”按键,单控制绿灯亮,
2.一个按钮对应用什么传感器来控制
(1)按下“←”按键,进入光敏感应控制的模式,通过感应是白天或者有光,最终以红灯快速的三亮三灭状态显示;通过光敏电阻感应晚上或者没有光,最终以绿灯快速的三亮三灭的状态显示,
(2)按下“→”键,进入时间控制,实现在早上八点到晚上六点之间,LED以红绿灯常亮两秒的状态显示
(注:红外遥控器的出厂商不同发送的红外编码不同,但都是采用的NFC格式)
#include <IRremote.h>
#define pin_8
#define pin_9
#define AD5 A5
int RECV_PIN = 11;
int I_val = 0;
IRrecv irrecv(RECV_PIN);
decode_results results;
#include <Wire.h>
#include "RTClib.h"
RTC_Millis rtc;
void setup()
{
Serial.begin(57600);
rtc.begin(DateTime(__DATE__, __TIME__));
irrecv.enableIRIn(); // Start the receiver
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
digitalWrite(8,HIGH);
digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(9,LOW);
}
void loop() {
I_val = analogRead(AD5);
Serial.println(Intensity);
delay(1500);
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print(" seconds since 1970: ");
Serial.println(now.unixtime());
// calculate a date which is 7 days and 30 seconds into the future
DateTime future (now.unixtime() + 7 * 86400L + 30);
Serial.print(" now + 7d + 30s: ");
Serial.print(future.year(), DEC);
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();
Serial.println();
delay(1000);
if (irrecv.decode(&results)) {
Serial.println(results.value,HEX);
irrecv.resume(); // Receive the next value
switch(results.value)
{
case 0xFF6897:
digitalWrite(8,HIGH);
delay(1000);
digitalWrite(8,LOW);
delay(1000);
Serial.println(" 绿 ");
break;
case 0xFFB04F:
digitalWrite(9,HIGH);
delay(1000);
digitalWrite(9,LOW);
delay(1000);
Serial.println(" 红");
break;
case 0xFF38C7:
if(analogRead(I_val)<320)
{
digitalWrite(8,HIGH);
delay(100);
digitalWrite(8,LOW);
delay(100);
digitalWrite(8,HIGH);
delay(100);
digitalWrite(8,LOW);
delay(100);
digitalWrite(8,HIGH);
delay(100);
digitalWrite(8,LOW);
delay(100);
}
else
{
digitalWrite(9,HIGH);
delay(100);
digitalWrite(9,LOW);
delay(100);
digitalWrite(9,HIGH);
delay(100);
digitalWrite(9,LOW);
delay(100);
digitalWrite(9,HIGH);
delay(100);
digitalWrite(9,LOW);
delay(100);
}
break;
case 0xFF9867:
if(now.hour()>8 && now.hour()<18)
{
digitalWrite(9,HIGH);
digitalWrite(8,HIGH);
delay(2000);
digitalWrite(9,LOW);
digitalWrite(8,LOW);
}
else
{
}
break;
}
}
}
三、逻辑分析
1.总体设计逻辑
实现一种多种控制方式综合为一体的控制方式,首先要考虑的是不能让各个控制之间起冲突。那么说明了要有一种总的控制方式来协调各个部分之间的相互关系。由此,由一个红外遥控作为总的控制方式来协调作为部分的其他传感器控制方式,最终实现多种控制相结合的功能。
2.拓展应用
此次设计有两个点可以拓展应用。
1.首先是这种一种总控制协调多种控制的方式,针对此次设计来说,一个按键对应的,可以是最后想实现的功能,也可以是一种另一种的控制的方式。如果总控制可以切换成其他的传感器控制的模式,比如说,用时间来作为总的控制方式,也就是将时间替代按键作为总的变量方式,到了某个特定的时间段,自动进行特定的功能,也可以是自动切换成某种特定的方式。
2.有了控制。那么我们要控制什么呢?LED仅仅是证明了最终的功能实现了,表明了控制功能的实现,说明可以延伸至其他物品,好比窗帘的升降,门的打开和关闭,机械的运作等等。
总结
希望各位不要单纯的仅仅把时间作为搬运和移植上,逻辑很重要,许多时候最好实现功能的办法不单单在自己的经验积累中筛选最优,大胆的创作也许就是另一种独辟蹊径。
以上是关于基于Arduino智能控制(时钟模块,光敏,红外遥控)的主要内容,如果未能解决你的问题,请参考以下文章