这个项目是 LaneTech HS 物理计算实验课程的一部分。作者 Roberto Jacobo 写道:我创建了这个项目属于家庭自动化/物联网项目的一部分,这次带来的是物联智能窗帘,该项目免除了起床和手动调整百叶窗的麻烦过程。通过使用Particle Photon、电机和智能手机,可以使您在任何地方完全的控制百叶窗。
一、Particle Photon 是什么?
Particle Photon是物联网产品中用来连接万物的小型Wi-Fi开发板。它在指甲盖大小的P0模块上组合了强大的ARMCortexM3微控制器和BroadcomWi-Fi芯片,使用方便,功能强大,可连接至云端。
为实现快速开展项目,Particle 增加一个3.3VDC开关电源供电,RF及用户接口器件位于单层PCB板Photon上。所有设计均开源,方便将其集成到自己设计的产品中。
二、项目所需使用的物品
1、硬件方面:
ParticlePhoton×1
光电传感器×1
RobotGeek连续旋转电机×1
面包板(通用)×1
面包板跳线(通用)×1
2、软件应用程序和在线服务:
Blynk
三、DIY 过程
1、组装控制部分的线路
这个项目的创做过程很简单,因为它只需要组件的组装以及将组件安装到百叶窗上。
2、给百叶窗加装电机
安装过程中许多步骤都需要将电机安插到百叶窗中来控制百叶窗。包括卸掉百叶窗内的旋转控制器以及切割狭缝以便将电机固定到位并穿过电线。
为了能够控制百叶窗,必须将发动机连接到转动杆以便于它转动。考虑到电机在项目中可能无法正常工作,我找到一种解决方法,使用一个内径约为3/16的短管。虽然一开始管子并不适合,但后续需要把它扩展,使其适合伺服电机的大小。完成后,剩下的就是将管道连接到百叶窗内的控制杆上,让伺服器能够带动它旋转起来。
3、安装百叶窗到墙壁
到这里,剩下的就是挂上百叶窗,然后将其余部件安装到墙上了。
四、集成 Blynk
将 Blynk 用到项目中,必须先创建并设置一个新项目。可以在这里找到如何操作。至于按钮说明,如图:
- V0完全关闭
- V1完全打开
- V2关闭一点
- V3打开一点
- V4启用光电传感器
五、效果展示
光电模式
在“光电模式”下的百叶窗将根据外部光线自动打开/关闭。
Blynk 模式
百叶窗通过 Blynk 的程序来控制。
关闭百叶窗
六、源代码与原理图
源码如下,原理图可以在这里下载:
http://make.quwj.com/project/40
#define BLYNK_PRINT Serial #include <blynk.h> char auth[] = "YourAuthKey"; Servo motor; int potPin = A0; int potReading = 0; int motorPin = 0; int photoVal = 0; int LEDPin = D3; bool hasRun = false; bool photoMode = false; //Control solely with photocell void setup() { motor.attach(D0); Serial.begin(9600); delay(5000); Blynk.begin(auth); } BLYNK_WRITE(V0) { if (param.asInt() == 1) { // CLOSE FULLY motor.write(0); delay(1200); motor.write(92); } } BLYNK_WRITE(V1) { if (param.asInt() == 1) { // OPEN FULLY motor.write(180); delay(1200); motor.write(92); } } BLYNK_WRITE(V2){ // CLOSE A LITTLE if(param.asInt() == 1){ motor.write(0); delay(300); motor.write(92); } } BLYNK_WRITE(V3){ // OPEN A LITTLE if(param.asInt() ==1){ motor.write(180); delay(300); motor.write(92); } } BLYNK_WRITE(V4){ // TOGGLE PHOTOCELL MODE if(param.asInt() ==1){ photoMode = true; } else photoMode = false; } void loop() { Blynk.run(); potReading = analogRead(potPin) - 1023; if(photoMode){ if(potReading<0){ if(hasRun==false){ Particle.publish("**OPENING**"); motor.write(180); delay(1200); motor.write(90); hasRun = true; } else{ if(checkChange(potPin)){ hasRun == false; Particle.publish("**CHANGED; CLOSING**"); } } Particle.publish("**STAYING OPEN**"); } else{ if(hasRun==false){ Particle.publish("**CLOSING**"); motor.write(0); delay(1200); motor.write(90); hasRun = true; } else{ if(checkChange(potPin)){ hasRun == false; Particle.publish("**CHANGED; OPENING**"); } } Particle.publish("**STAYING CLOSED**"); } } Particle.publish("Photoresistor value",String(potReading)); } boolean checkChange(int pin){ // Test to see if there's a notable difference int init = analogRead(potPin); delay(1000); int final = analogRead(potPin); int difference = abs(init-final); if(difference > 300){ return true; } else{ return false; } }
七、可能的改进
这个项目一些可以改进的是:
- 可将百叶窗精确调整到用户所需的位置
- 具有更高转矩的小型电机,可以在百叶窗内进行更精确的安装,同时还可以更轻松地转动窗帘杆
- 使用定制 PCB 来替代对面包板的需求,并最终为使项目更易安装和节省时间
发表评论