更新于:
利用Arduino Mega 2560操作继电器从而控制灯、插线板。 人体红外感应模块用来控制玄关灯在某时间段回家就自动开灯,当然也可以使用光敏电阻更智能一些。
懒惰促进发展,智能家居应该会是未来发展的趋势,各大厂家产品有很多,而且小巧、颜值高。但个人认为认知度越高的产品,黑产关注度越多,带来的隐患就越高。比如央视曝光的智能摄像机。2015年JD活动¥129买过一款某小众智能摄像机,用于出差时看看家里情况,用的不亦乐乎。某一天余光扫到在我没操控它的情况下,居然动了一下。断电,封箱。默默的拿出USB摄像头插在GEN8上,反正GEN8也是24小时开机的。所以和各种云产品相比,在不被人主动攻击的情况下,自己搭建的还是安全一些的。
Arduino MEGA 2560:某宝不带电源¥50以内,我用的开关电源。 5V继电器模块:高/低电平触发,¥2.75不包邮。 人体红外感应模块:可设置重复触发和延时时间等,¥3.15不包邮。 杜邦线:公转母40p,¥3不包邮。
Arduino IDE:1.0版本用起来习惯一些。[点击下载Arduino IDE Ver1.0](http://downloads.arduino.cc/arduino-1.0-windows.zip) Arduino驱动:非官方版本Arduino也许需要驱动才能与计算机通讯,卖家会提供驱动的。
USB线将Arduino Mega 2560和计算机连接(也许需要手动安装驱动),[设备管理器]查看端口号,我这里是COM3(如有多个串行设备,不能确定哪个端口号,通过插拔Arduino来判断)。 跳线帽设置继电器为高电平触发,下面是接线图。Arduino的8针脚进行测试,不要用Arduino 13针脚,貌似是贴片led针脚。每次触发会通断一次。
Arduino | 继电器 | 红外 |
+5v | DC+ | VCC |
GND | DC- | GND |
8 | IN | |
2 | OUT |
运行Arduino IDE [Tools] -> [Board] -> [Arduino Mega 2560 or Mega ADK] [Tools] -> [Serial Port] -> [COM3](我这里是COM3)
String val = "";
int var;
void setup()
{
Serial.begin(115200);
/*
attachInterrupt(0, blink2, CHANGE);
attachInterrupt(1, blink3, CHANGE);
attachInterrupt(2, blink21, CHANGE);//RISING
attachInterrupt(3, blink20, CHANGE);
attachInterrupt(4, blink19, CHANGE);//CHANGE
attachInterrupt(5, blink18, CHANGE);
*/
}
/*
LOW(低电平,继电器断开)返回值为pin_LOW
INPUT
HIGH(高电平,继电器闭合)返回值为pin_HIGH
input格式:003_HIGH/003_LOW/003_CHECK/003_INPUT
pin 2/3/18/19/20/21:中断
pin 4:入户门
pin 5:客厅灯
pin 6:卫生间灯
pin 7:次卧灯
pin 8:次卧电脑桌
analog in 区域英文输入未调试成功,可以用数字代替
A0 = 054(本次只用54 55,作为input触发)
A1 = 055
A15 = 069
*/
//attachInterrupt 电平变化运行函数
/*
void blink2()
{
Serial.print("002_HIGH\n");
}
void blink3()
{
Serial.print("003_HIGH\n");
}
void blink21()
{
Serial.print("021_HIGH\n");
}
void blink20()
{
Serial.print("020_HIGH\n");
}
void blink19()
{
Serial.print("019_HIGH\n");
}
void blink18()
{
Serial.print("018_HIGH\n");
}
*/
void to_LOW(int pin)
{
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
if (digitalRead(pin) == LOW)
{
Serial.print(String(pin) + "_LOW\n");
}
}
void to_HIGH(int pin)
{
pinMode(pin, OUTPUT);
digitalWrite(pin, HIGH);
if (digitalRead(pin) == HIGH)
{
Serial.print(String(pin) + "_HIGH\n");
}
}
void to_INPUT(int pin)
{
pinMode(pin, INPUT);
Serial.print(digitalRead(pin));
if (digitalRead(pin) == 1)
{
Serial.print(String(pin) + "_INPUT\n");
}
}
void Check_pin(int pin)
{
if (digitalRead(pin) == LOW)
{
Serial.print(String(pin) + "_LOW\n");
}
else if (digitalRead(pin) == HIGH)
{
Serial.print(String(pin) + "_HIGH\n");
}
}
void Check_input(int pin)
{
for (var = pin; var <= 55; var++) {
if (digitalRead(var) == HIGH)
{
Serial.print(String(var) + "_HIGH\n");
delay(100);
}
}
/*
if(digitalRead(pin) == HIGH)
{
Serial.print(String(pin) + "_HIGH\n");
delay(500);
}
for(var = pin;var <= 69;var++){
pinMode(var,INPUT_PULLUP);
if(digitalRead(var) == LOW)
{
Serial.print(String(var) + "_LOW\n");
}
}
*/
}
/*
void Test_input(int pin)
{
int sensorValue = digitalRead(pin);
Serial.println(sensorValue, DEC);
}
*/
void loop()
{
while (Serial.available() > 0)
{
val += char(Serial.read());
delay(5);
}
if (val[3] == '_')
{
if (val[4] == 'H' && val[5] == 'I' && val[6] == 'G' && val[7] == 'H')
{
to_HIGH((String(val[0]) + String(val[1]) + String(val[2])).toInt());
}
else if (val[4] == 'L' && val[5] == 'O' && val[6] == 'W')
{
to_LOW((String(val[0]) + String(val[1]) + String(val[2])).toInt());
}
else if (val[4] == 'C' && val[5] == 'H' && val[6] == 'E' && val[7] == 'C' && val[8] == 'K')
{
Check_pin((String(val[0]) + String(val[1]) + String(val[2])).toInt());
}
else if (val[4] == 'I' && val[5] == 'N' && val[6] == 'P' && val[7] == 'U' && val[8] == 'T')
{
to_INPUT((String(val[0]) + String(val[1]) + String(val[2])).toInt());
}
else
{
Serial.print("Error:Not define.");
}
}
val = "";
Check_input(54);
}
粘贴到代码区之后点击[Verify]进行校验,无误后点击[Upload]进行烧写。
[Tools] -> [Serial Monitor]设置波特率为:[115200 baud] - 键入008_HIGH,然后[Send],继电器动作的同时,Arduino IDE输出:8_HIGH - 键入008_LOW,然后[Send],继电器动作的同时,Arduino IDE输出:8_LOW - 键入008_CHCEK,然后[Send],Arduino IDE输出针脚当时状态。
红外联动继电器的坑随后再填,接下来是LEDE和Arduino利用python进行控制的后端和手机网页控制Arduino的前端。凌晨1点了,今天还要上班。
转载请注明:【SmartHome系列之Aduino配置与调试】https://jihuo.ma/smarthome-arduino.html