查看“智能插座”的源代码
←
智能插座
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{| style="width: 800px;" |- | ==概述== *项目名称:Microduino智能插座 *目的:手机控制插座通断 *难度:低 *耗时:2小时 *制作者: *简介: 智能插座主要由控制模块和电路部分组成,用户可以使用手机连接蓝牙模块([[Microduino-BT/zh]])并发送命令、接收电路状态,核心控制模块([[Microduino-Core/zh]])对数据进行分析之后控制继电器对电路进行控制。 [[File:123.png||300px|center|thumb]] ==材料清单== *Microduino设备 {|class="wikitable" |- |模块||数量||功能 |- |[[Microduino-Core/zh]]||1||核心板 |- |[[Microduino-USBTTL/zh]] ||1||下载程序 |- |[[Microduino-BT/zh]] ||1||蓝牙通信 |} *其他设备 {|class="wikitable" |- |模块||数量||功能 |- |底壳+电路板||1||核心板 |- |外壳||1||下载程序 |- |长螺丝 ||1||固定外壳与底壳 |- |短螺丝 ||1||固定底壳与电路板 |- |M3螺丝刀 ||1||拧螺丝 |} ==实验原理== [[File:Chazuotheory.jpg||500px|center|thumb]] *电路控制原理 智能插座的电源控制分为两部分,分别是电压转换和继电器控制两部分。 首先介绍一下电压转换部分,由于家庭中的电源多为220伏特的交流电,而Microduino-Core工作在5伏特的直流电压环境下,这部分的功能就如同一个变压器,像手机的充电插头一样转换了电压。 另一部分是继电器控制,继电器是当输入电压的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。由于Microduino-Core核心控制引脚输出的电压很小,不能直接给电器供电,因此需要通过控制继电器从而间接控制家庭电源。 *无线通信原理 本套件使用了蓝牙无线通信模块Microduino-BT,由于Microduino的蓝牙模块很好的屏蔽了底层的协议,所以关于蓝牙协议这里不再赘述,使用它只需确认蓝牙串口的接法,默认是D2,D3。,给出一张蓝牙通讯所使用的串口图,所有的串口连接方法都涵盖在该图中: [[File:Microduino-BT-2Big1.jpg||600px|center|thumb]] *主要器件 [[Microduino-BT/zh]] ==文档== ==调试过程== *程序下载 将Microduino Core、Microduino USBTTL堆叠在一起.用数据线将写好的程序通过Microduino USBTTL上传到Microduino Core上。 注意:最好不要将所有模块堆叠在一起之后再上传程序 [[File:download1.jpg||300px|center|thumb]] 打开Aroduino IDE,若电脑中没有安装,则参照附录中的安装方法,先安装Aicroduino IDE。点击左上【文件】选项→点击【打开】。 [[File:Bleopen.jpg||300px|center|thumb]] 在弹出的对话框中找到MicroduinoBluControlOutlet.ino并双击打开 [[File:bluecontrol.jpg||300px|center|thumb]] 之后点击左上角的"√"进行编译,点击上边栏的工具,确认板卡(Microduino-Core)处理器(Atmega328P@16M,5V)和端口号(COMX)。三项都如图确认无误之后点击"→"按钮下载程序到开发板上 [[File:Chooseboard.jpg||300px|center|thumb]] *搭建 先使用三个4mm螺丝将电路板固定在底壳上 [[File:Chazuo1.jpg||300px|center|thumb]] 将Microduino-BT与Microduino-Core插接好并插接在智能插座的底板上 [[File:Chazuo2.jpg||300px|center|thumb]] 将智能插座外壳扣入底壳并使用8mm长螺丝旋入,固定上下外壳,至此智能插座部分搭建完成 [[File:Chazuo3.jpg||300px|center|thumb]] 将智能插座插入家中的插座。手机充电器插在智能插座上,并按下开关钮,可以看到指示灯亮起,手机开始充电。调试智能插座。图中: ①为开关按钮 ②是上电指示灯 ③是智能插座通断指示灯 [[File:Chazuo4.jpg||300px|center|thumb]] *手机端APP 首先使用手机扫描二维码,下载蓝牙App,下载完成后打开 [[File:zhinengchazuo.rar]] [[File:Chazuo2d.jpg||300px|center|thumb]] 点击SCAN,搜索周围蓝牙设备,发现并点击Microduino [[File:Chazuoandroid1.jpg||300px|center|thumb]] 等待1-2秒,待屏幕上出现ready字样可以开始操作智能插座 [[File:Chazuoandroid2.jpg||300px|center|thumb]] 点击屏幕中间的按钮开关就可以控制智能插座的通断了,同时插座上的按键也可以控制插座的通断,手机APP上可以实时同步开关的状态 [[File:Chazuoandroid3.jpg||300px|center|thumb]] ==注意问题== *与电接触很危险,注意用电安全!一切安装操作都不能接电!安装好接电后就算智能插座是关闭状态,也一定不要触摸电源插口! *如果蓝牙采用了蓝牙原理图中的Serial10跳线法,在用Microduino-Core和Microduino-USBTTL组合烧录程序时,不要将蓝牙模块也叠上去,会引起串口冲突,正确的做法是将程序烧录完毕后,拔下Microduino-USBTTL,再将蓝牙与Microduino-Core模块叠放在插座底板上。 ==程序说明== *主程序 <source lang="cpp"> #include "key.h" #include <SoftwareSerial.h> #define outletPin 6 //显示当前的开关状态 #define led_Pin 5 //自定义引脚 #define Button_Pin 4 //这个引脚用于控制智能插座的开关 SoftwareSerial mySerial(2, 3); //RX,TX #define my_Serial mySerial //#define my_Serial Serial1 当所用核心模块是Core+时启用这句并注释掉上一句程序 String tmp = ""; boolean swith, change; void setup() { Serial.begin(9600); //定义串口频率 Serial.println("LEDOnOff Starting..."); my_Serial.begin(9600); //定义引脚的输入输出状态 pinMode(outletPin, OUTPUT); pinMode(led_Pin, OUTPUT); pinMode(Button_Pin, INPUT_PULLUP); //初始化状态提示灯亮,插座开关提示灯灭 digitalWrite(outletPin, LOW); digitalWrite(led_Pin, HIGH); key_init(); //初始化电平控制数组 } void loop() { // 如果串口有数据就读取串口中的数据,串口每次传输一个字符,因此要进行转换 while (my_Serial.available() > 0) { tmp += char(my_Serial.read()); delay(2); } //如果从串口中读取的内容不为空,进行状态判断 if (tmp.length() > 0) { if(tmp == "on") //如果收到的内容为on { Serial.println("power on"); //串口显示:上电 digitalWrite(outletPin, HIGH); //将开关指示灯点亮 swith = true; } else if(tmp == "off") //如果收到的内容为off { digitalWrite(outletPin, LOW); //关闭开关指示灯 Serial.println("power off");//串口显示:关闭 swith = false; } tmp = ""; } if(key_get(Button_Pin, 0)) //用于物理按钮,当每次按键按下并松开后 { delay(300); swith = !swith; //翻转开关状态 } if(change != swith) //如果开关状态有变化 { change = swith; //用change记录本次操作的开关状态 if(swith) //如果是开状态 { digitalWrite(outletPin, HIGH); //点亮指示灯 my_Serial.println("ON"); //告知蓝牙模块开启智能插座 } else { digitalWrite(outletPin, LOW); //关闭指示灯 my_Serial.println("OFF"); //告知蓝牙模块关闭智能插座 } } } </source> *key.h <source lang="cpp"> #include "arduino.h" boolean key[NUM_DIGITAL_PINS]; //当前按键状态 boolean key_cache[NUM_DIGITAL_PINS]; //上一次的按键状态缓存 void key_init() //将所有数字引脚当前状态设为低电平,缓存电平设为高电平,便于之后的电平翻转设计 { for(int a = 0; a < NUM_DIGITAL_PINS; a++) { key[a] = LOW; key_cache[a] = HIGH; } } boolean key_get(int _key_pin, boolean _key_type) //这个函数是为了插座上的物理按钮设计的 //第一个参数为引脚号,第二个参数为模式选择,因为只判断按键松开所以只用到了0模式 { key_cache[_key_pin] = key[_key_pin]; //缓存作判断用 key[_key_pin] = !digitalRead(_key_pin); //按钮按下为低电平,松开为高电平 //这里是翻转一下为了逻辑true表述通电 switch(_key_type) { case 0: //没有按钮输入时key和key_cache都是LOW状态,当按下按钮后的第一个loop //keycache还是LOW但是key变为HIGH,之后的循环两者都变为HIGH,直到松开按钮 //的第一个loop,key_cache得到key的HIGH状态,key变为LOW,case0这个判断就是 //找这个松开按键的状态 if(!key[_key_pin] && key_cache[_key_pin]) return true; else return false; break; case 1: if(key[_key_pin] && !key_cache[_key_pin]) //按下松开后 return true; else return false; break; } } </source> ==视频==
返回至
智能插座
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息