前言
每次从实验室回宿舍,都快11点多了,洗完澡,宿舍就熄灯了。所以灯经常忘关。所以早晨六点总是被明亮的灯光刺醒,但宿舍又是最简陋的上下铺,居住在上铺的我苦此已久。终于受不了了,做了一个蓝牙开关灯。
一、耗材清单
1.电源(3.3-6V)都行,找你能找得到的电池盒/小电源。
2.Arduino板(最好选mini的小板,方便),我用的是YWRduino Lite
注意:如果跟我用同样型号的mini arduino的话,下载器需要选用带DTR的USB转TTL。
3.Arduino IDE(https://www.arduino.cc/en/donate/)官网下载即可,如果跟我用同样型号的mini arduino的话,记得板子型号选uno板即可。
4.蓝牙模块,我用的是HC-06。
TX: 接Arduino"RX"引脚
RX: 接Arduino"TX"引脚
GND: 接Arduino"GND"引脚
VCC: 接Arduino"5V"或"3.3V"引脚
5.伺服舵机,丰俭由人。最普通的SG90即可,塑料舵机轻,好黏在墙上。
信号线:接Arduino"P9"引脚
GND: 接Arduino"GND"引脚
VCC: 接Arduino"5V"或"3.3V"引脚
二、步骤
1.代码
就用Arduino自带的例程改一下就行
#include <Servo.h>
Servo myservo;
int pos = 0;
char cmd ='s';//初始化
void setup() {
myservo.attach(9); //定义舵机接口为pin9
Serial.begin(9600); //初始化蓝牙,波特率为9600
}
void loop() {
if(Serial.available()){
cmd = Serial.read();//读取蓝牙模块发送到串口的数据
if(cmd=='a'){ //手机蓝牙串口发送数据a,表示关灯
for (pos = 20; pos <= 40; pos += 1) {
myservo.write(pos);
delay(30);}}
else if(cmd=='b'){ //手机蓝牙串口发送数据b,表示开灯
for (pos = 40; pos >= 0; pos-= 1) {
myservo.write(pos);
delay(30);}}
else if(cmd=='r'){ //手机蓝牙串口发送数据r,表示恢复初始状态
myservo.write(20);}
}
}
这里要注意的是,如果你用的sg90这类的180度舵机,他只能从0度摆动到180度,所以,可以先用函数myservo.write(0); 寻找一下舵机的0度在哪里。
2.手机的蓝牙控制
很倒霉我用的手机是iPhone,找了很久,终于找到一个比较合适的蓝牙串口助手名字叫:FeasyBlue。
以下是操作的例子
其他
因为宿舍是两盏灯,所以3D打印了一个两开的小构件。需要文件的可以留言邮箱,博主私发给你。