Arduino项目——定时控制,手机控制Arduino实现远程开关和定时开关
功能效果
1. 通过手机app的按键实时控制舵机转动。 (用机械结构连接舵机和室内灯的开关即可实现开关灯)
2. 通过手机app设置时间,时间到即执行开/关灯,并响铃,按下按钮停止响铃。
这个项目原本是想作为定时闹钟,早上叫自己起床的,因为寒假里老是睡过头。由于初学Arduino经验不足,踩了好多坑,终于在寒假结束这会做出来了,演示视频放在文章最后。
材料准备
- Arduino UNO开发板
- HC-05蓝牙模块
- 9g小型舵机
- DS3231时钟模块
- 光敏电阻
- 10k电阻
- 蜂鸣器
- 按钮一个
- 面包板
- 杜邦线若干
- 手机app开发网站:MIT App Inventor
电路连接
蓝牙模块 |
TXD接D8,RXD接D9 |
DS3132时钟 | SDA接A4,SCL接A5 |
舵机 | 信号脚接D6 |
蜂鸣器 | 信号脚接D5 |
光敏电阻 |
5V——光敏电阻——电阻——GND | A0 (横竖线代表电线) |
按键 |
D7——| 按键开关 |——GND |
其他的Vcc都接5V,由于UNO板的5V和GND口数量不够,需要借助面包板来分流。
实物图
代码及解释
#include<Servo.h> //舵机库
Servo myservo; //定义舵机名称
#include <DS3231_Simple.h> //随便选的时钟库
DS3231_Simple Clock; //时钟名称
#include <SoftwareSerial.h> //系统自带的串口库
SoftwareSerial BT(8,9); //D8,D9连蓝牙int pinBuzzer = 5; //管脚D5连接到蜂鸣器模块的信号脚int set_h=25,set_m=70; //设初始响铃时间为25时,即不响铃boolean f=0; char inChar; String inString="";
void setup() {Serial.begin(9600);Clock.begin();BT.begin(9600);myservo.attach(6); //D6接舵机myservo.write(90); pinMode(pinBuzzer, OUTPUT); //设置pinBuzzer脚为输出状态pinMode(7, INPUT_PULLUP); //D7脚连接开关}void servo(){ //驱动舵机int state_1=analogRead(A0); //光敏电阻接A0int pos;for(pos=90;pos>30;pos--) //舵机转一个方向去按开关myservo.write(pos);delay(500);myservo.write(90);delay(500);int state_2=analogRead(A0);if(state_2-state_1<10&&state_2-state_1>-10) //若亮度没变,反转{ for(pos=90;pos<150;pos++)myservo.write(pos);delay(500);myservo.write(90); //回到初始位置}
}void voice(){ //响铃函数while(digitalRead(7)) //当开关未按下
{long frequency = 300; tone(pinBuzzer, frequency ); //用tone()函数发出频率为frequency的波形delay(1000); noTone(pinBuzzer); //停止发声delay(1000); }
}void Time(int h,int m){ //定时DateTime t;t = Clock.read();if(t.Hour==h&&t.Minute==m) //当时间到
{servo();voice();}delay(60000); //过一分钟
}void loop() {Time(set_h,set_m); //判断时间到否while(BT.available()) //接收到蓝牙数据{inChar=char(BT.read()); //一个个读入数据inString+=inChar; //串接成字符串inChar=' ';delay(10); //延时一会以防数据丢失f=1; //表示有数据接收到,做下面的if} // if(inString!="")Serial.println(inString);//接收到'a'是开关灯,'b'是取消时间,接收到四位数字代表更改时间if(f==1){f=0;if(inString[0]=='a') //执行开关灯{servo(); }else if(inString[0]=='b') //取消时间{set_h=26; }else if(inString[0]>='0'&&inString[0]<='9') //更改时间{set_h=(inString[0]-'0')*10+(inString[1]-'0'); //取时数据set_m=(inString[2]-'0')*10+(inString[3]-'0'); //取分数据// Serial.println(set_h);//Serial.println(set_m);}}
inString=""; //清空储存的字符}
舵机部分
由于屋里能控制灯的开关不止一个,开关的状态和灯的亮灭其实没有关系,因此我借助了光敏电阻,让舵机先转一个指定角度,如果改变了开关状态(光敏电阻前后检测值相差较大),则表示开/关灯成功,结束过程;如果光敏电阻前后检测值相差较小,表示没有成功,反转一次就能改变开关状态。看不懂也没关系,文章结尾的演示视频会有体现。
蜂鸣器部分
找了一段比较难听的声音,在没睡醒的早晨播放会有奇效,一直循环播放直到人下床长按按钮才能停止。
蓝牙数据接收
先一个个接收字符,串接成字符串,再转为有用的数据,注意不能忘了延时,不然会丢失数据。配合手机app使用,蓝牙一次性接收多个字符基本要用这个方法。
时钟模块
本来想用Arduino定时中断功能实现定时开关的,后来发现定时中断驱动不了舵机,所以用了时钟模块,这样一来算时间的步骤也省了。找了一个读写比较简单的时钟库,这库的时间读取函数比较简洁。用其他库也可以,效果一样的。
注意:第一次用蓝牙模块一定要先激活,时钟模块要先设定时间,网上有教程。
手机app
也是第一次做app,感觉挺好玩的,有点编程基础就能写,值得试一试。
效果演示
手机控制舵机
Arduino项目——定时控制,手机控制Arduino实现远程开关和定时开关相关推荐
- 手机控制NodeMCU实现远程电脑开关机
NodeMCU实现远程电脑开关机 1.确认PC主板支持WOL(Wake on Lan) 2.阿里云物联网平台设置 3.NodeMCU(开机棒)部分程序编写 4.编译手机App(仅支持Android) ...
- 利用手机app语音控制arduino
最近做了一款语音识别的App,想着利用手机控制arduino实现RGB的调节,开发思路:基于讯飞语音识别做一款能识别我们语音的App,识别出语音之后,对应的文字转UTF-8编码,通过蓝牙串口通讯发送到 ...
- all3dp.com网站中全部Arduino项目(2022.7.1)
arduino项目] 原文地址:https://all3dp.com/topic/arduino/ 最受欢迎20220707 项目组-1. [2022 年 10 个最有用的 Arduino 项目:]( ...
- android与arduino手机控制项目开源
以前在百度空间写的文章,现在百度空间关闭了,搬到这里吧,做个笔记吧. 代码地址: http://pan.baidu.com/s/1jGLpQf0 arduino小车(arduino板子.wifi模块. ...
- 使用重力感应传感器和Arduino的手机控制机器人车
原文地址:https://circuitdigest.com/microcontroller-projects/g-sensor-controlled-robot-car-arduino 使用G传感器 ...
- 利用 Andorid 手机连接 Arduino 并控制 LED灯开关
利用 Andorid 手机连接 Arduino 并控制 LED灯开关 ***首先,将 Arduino 断电***,然后按着蓝牙模块上的黑色按钮,再让 Arduino 通电,如果蓝牙模块指示灯按2秒的频 ...
- Arduino + ESP32-C3 + TFT(1.8‘ ST7735S)基础平台(实验六)手机控制 DDS AD9851 (70MHz 正弦波 方波 )
---------------------------------------------------------------------------------------------------- ...
- 基于Arduino项目案例
从初见到痴迷,十大方案带你感受Arduino的灵活多变 Arduino是一款便捷灵活.方便上手的开源电子原型平台,受到了国内外工程师们的追捧.Arduino能通过各种各样的传感器来感知环境,通过控制灯 ...
- 用iArduino app+以太网插板实现“iPhone,iPadiPod无线控制Arduino”!
此教程将会告诉你用iArduino App控制你Arduino板子的全部步骤.为了更好的理解,我们用LED并在iArduino应用的帮助下操作开.关.以此你可以知道如何安装iArduino来无线的控制 ...
最新文章
- NLP入门必知必会(一):Word Vectors
- java8学习:用流收集数据
- VC中TXT文件的存取
- 双系统grub启动linux,双系统ubuntu与Centos的grub启动(解决VFS报错)
- 痛惜,今年已有多名杰青英年早逝!
- 为什么不懂技术的人可以做产品经理(下)?
- WPF MVVM模式 发送DataGird表格的数据到另一个页面显示
- cassandra vs mongo (1)存储引擎
- 传奇电子cq9跳高高、跳起来规则与操作技巧
- js实现跟浏览器 ctrl+f 一样的效果
- WORKBENCHSCDM导入CAD文件报错?
- 将tensorflow与微信小程序结合,微信开发者工具使用tensorflowJS插件出错:Error: Plugin tfjsPlugin has not registered.
- 阿里立秋:淘宝如何做智能化UI测试?
- 让味蕾动起来的蛋糕甜点
- 网络拓扑中,什么是核心层?什么是汇聚层?
- 当面试问到自己有哪些缺点应该怎么回答
- tesseract-ocr .NET 识别图片中文字
- hive-create table
- position:absolute与position:relative的区别
- 在项目中使用短信接口
热门文章
- linux中目录前 表示什么意思,linux的命令行前面的root@linux~ #中的每个部分代表什么意思?...
- 使用WLW 写博客的测试
- python批量读取文件内容_Python从数据库读取大量数据批量写入文件的方法
- 如何寻找适合的投稿SCI期刊
- Hexo yilia 主题添加来必力评论系统
- iOS 並行編程初步
- evc小项目:Gps功分器测试
- eclipse工程报faceted project problem
- MSCOMM32控件注册的两种办法
- js-url转换blob以及blob与base64的相互转换