功能效果

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实现远程开关和定时开关相关推荐

  1. 手机控制NodeMCU实现远程电脑开关机

    NodeMCU实现远程电脑开关机 1.确认PC主板支持WOL(Wake on Lan) 2.阿里云物联网平台设置 3.NodeMCU(开机棒)部分程序编写 4.编译手机App(仅支持Android) ...

  2. 利用手机app语音控制arduino

    最近做了一款语音识别的App,想着利用手机控制arduino实现RGB的调节,开发思路:基于讯飞语音识别做一款能识别我们语音的App,识别出语音之后,对应的文字转UTF-8编码,通过蓝牙串口通讯发送到 ...

  3. all3dp.com网站中全部Arduino项目(2022.7.1)

    arduino项目] 原文地址:https://all3dp.com/topic/arduino/ 最受欢迎20220707 项目组-1. [2022 年 10 个最有用的 Arduino 项目:]( ...

  4. android与arduino手机控制项目开源

    以前在百度空间写的文章,现在百度空间关闭了,搬到这里吧,做个笔记吧. 代码地址: http://pan.baidu.com/s/1jGLpQf0 arduino小车(arduino板子.wifi模块. ...

  5. 使用重力感应传感器和Arduino的手机控制机器人车

    原文地址:https://circuitdigest.com/microcontroller-projects/g-sensor-controlled-robot-car-arduino 使用G传感器 ...

  6. 利用 Andorid 手机连接 Arduino 并控制 LED灯开关

    利用 Andorid 手机连接 Arduino 并控制 LED灯开关 ***首先,将 Arduino 断电***,然后按着蓝牙模块上的黑色按钮,再让 Arduino 通电,如果蓝牙模块指示灯按2秒的频 ...

  7. Arduino + ESP32-C3 + TFT(1.8‘ ST7735S)基础平台(实验六)手机控制 DDS AD9851 (70MHz 正弦波 方波 )

    ---------------------------------------------------------------------------------------------------- ...

  8. 基于Arduino项目案例

    从初见到痴迷,十大方案带你感受Arduino的灵活多变 Arduino是一款便捷灵活.方便上手的开源电子原型平台,受到了国内外工程师们的追捧.Arduino能通过各种各样的传感器来感知环境,通过控制灯 ...

  9. 用iArduino app+以太网插板实现“iPhone,iPadiPod无线控制Arduino”!

    此教程将会告诉你用iArduino App控制你Arduino板子的全部步骤.为了更好的理解,我们用LED并在iArduino应用的帮助下操作开.关.以此你可以知道如何安装iArduino来无线的控制 ...

最新文章

  1. NLP入门必知必会(一):Word Vectors
  2. java8学习:用流收集数据
  3. VC中TXT文件的存取
  4. 双系统grub启动linux,双系统ubuntu与Centos的grub启动(解决VFS报错)
  5. 痛惜,今年已有多名杰青英年早逝!
  6. 为什么不懂技术的人可以做产品经理(下)?
  7. WPF MVVM模式 发送DataGird表格的数据到另一个页面显示
  8. cassandra vs mongo (1)存储引擎
  9. 传奇电子cq9跳高高、跳起来规则与操作技巧
  10. js实现跟浏览器 ctrl+f 一样的效果
  11. WORKBENCHSCDM导入CAD文件报错?
  12. 将tensorflow与微信小程序结合,微信开发者工具使用tensorflowJS插件出错:Error: Plugin tfjsPlugin has not registered.
  13. 阿里立秋:淘宝如何做智能化UI测试?
  14. 让味蕾动起来的蛋糕甜点
  15. 网络拓扑中,什么是核心层?什么是汇聚层?
  16. 当面试问到自己有哪些缺点应该怎么回答
  17. tesseract-ocr .NET 识别图片中文字
  18. hive-create table
  19. position:absolute与position:relative的区别
  20. 在项目中使用短信接口

热门文章

  1. linux中目录前 表示什么意思,linux的命令行前面的root@linux~ #中的每个部分代表什么意思?...
  2. 使用WLW 写博客的测试
  3. python批量读取文件内容_Python从数据库读取大量数据批量写入文件的方法
  4. 如何寻找适合的投稿SCI期刊
  5. Hexo yilia 主题添加来必力评论系统
  6. iOS 並行編程初步
  7. evc小项目:Gps功分器测试
  8. eclipse工程报faceted project problem
  9. MSCOMM32控件注册的两种办法
  10. js-url转换blob以及blob与base64的相互转换