使用ardunio制作神秘礼物(环境光传感器、舵机、LED、蜂鸣器)
一、课题介绍
本课题要从魔仙堡讲起,黑魔仙冰城本是暗黑世界的主使,一次与白界小魔仙蜜雪的打斗之后,惨败,回去反省之后,发现自己有生之年作恶多端,发生在自己身上倒霉事越来越多,心想这一定是遭受了魔界的诅咒和惩罚。于是黑魔仙送给小魔仙一个神秘礼盒,以此和解。当盒子遇到白色的正义之光后,缓缓打开,一道红光渐渐显示在眼前,净化心灵的音乐(蜜雪冰城主题曲)响起,从此,黑界与白界和好,再也没有了厮杀和掠夺,人性的险恶从此封印于这个神秘盒子中……
其次,本项目属于娱乐玩具项目,对于少儿的身心健康良好发展有较大的价值。首先,该玩具能给小朋友带来快乐,对小孩的各种感知觉、动作、技巧等有促进作用,能提高孩子的想象力、观察力和注意力,开阔视野,促进多巴胺的产生,使孩子处于欢乐状态。与此同时,有积极意义的故事背景间接培养孩子的良好品德,对孩子未来的成长有重要意义。
二、设计思路
该项目以Dfduino UNO控制板和Xbee传感器扩展板作为主处理器,环境光传感器作为输入模块,蜂鸣器、食人鱼红色LED作为输出模块,舵机角度由环境光传感器的变化而变化。当环境光传感器数值大于val1=40(可自主设定)的时候(光线变亮),舵机的角度开始变大,LED灯逐渐变亮,当大于val2=110时(该数值可自主设定,但必须大于val1),之后蜂鸣器发出音乐。当音乐响完一个周期的时候,如果环境光传感器的输入值仍然大于val2,蜂鸣器还会再次响起。当环境光传感器数值变小,即光线变暗时,舵机的角度会减小,LED随着舵机的减小而减小,音乐也会停下,直至盒子的盖子关闭。
三、硬件设计
该项目使用的硬件及接入的扩展板引脚如下:
Dfduino UNO控制板、Xbee传感器扩展板、若干根杜邦线
环境光传感器——A0
蜂鸣器模块——D8
TowerPro SG90舵机——D9
食人鱼红色LED发光模块——D3
四、软件设计
设计代码如下:
#include <Servo.h>//定义各种数组字符对应音的频率#define NOTE_B0 31#define NOTE_C1 33#define NOTE_CS1 35#define NOTE_D1 37#define NOTE_DS1 39#define NOTE_E1 41#define NOTE_F1 44#define NOTE_FS1 46#define NOTE_G1 49#define NOTE_GS1 52#define NOTE_A1 55#define NOTE_AS1 58#define NOTE_B1 62#define NOTE_C2 65#define NOTE_CS2 69#define NOTE_D2 73#define NOTE_DS2 78#define NOTE_E2 82#define NOTE_F2 87#define NOTE_FS2 93#define NOTE_G2 98#define NOTE_GS2 104#define NOTE_A2 110#define NOTE_AS2 117#define NOTE_B2 123#define NOTE_C3 131#define NOTE_CS3 139#define NOTE_D3 147#define NOTE_DS3 156#define NOTE_E3 165#define NOTE_F3 175#define NOTE_FS3 185#define NOTE_G3 196#define NOTE_GS3 208#define NOTE_A3 220#define NOTE_AS3 233#define NOTE_B3 247#define NOTE_C4 262 //do 中音#define NOTE_CS4 277#define NOTE_D4 294#define NOTE_DS4 311#define NOTE_E4 330 //mi#define NOTE_F4 349#define NOTE_FS4 370#define NOTE_G4 392 //so#define NOTE_GS4 415#define NOTE_A4 440#define NOTE_AS4 466#define NOTE_B4 494#define NOTE_C5 523#define NOTE_CS5 554#define NOTE_D5 587#define NOTE_DS5 622#define NOTE_E5 659#define NOTE_F5 698#define NOTE_FS5 740#define NOTE_G5 784#define NOTE_GS5 831#define NOTE_A5 880#define NOTE_AS5 932#define NOTE_B5 988#define NOTE_C6 1047#define NOTE_CS6 1109#define NOTE_D6 1175#define NOTE_DS6 1245#define NOTE_E6 1319#define NOTE_F6 1397#define NOTE_FS6 1480#define NOTE_G6 1568#define NOTE_GS6 1661#define NOTE_A6 1760#define NOTE_AS6 1865#define NOTE_B6 1976#define NOTE_C7 2093#define NOTE_CS7 2217#define NOTE_D7 2349#define NOTE_DS7 2489#define NOTE_E7 2637#define NOTE_F7 2794#define NOTE_FS7 2960#define NOTE_G7 3136#define NOTE_GS7 3322#define NOTE_A7 3520#define NOTE_AS7 3729#define NOTE_B7 3951#define NOTE_C8 4186#define NOTE_CS8 4435#define NOTE_D8 4699#define NOTE_DS8 4978#define musicPin 8//蜂鸣器或扬声器到8引脚int melody[] = {//定义各种音出现的旋律顺序NOTE_E4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_E4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_D4,NOTE_E4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_E4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_C4,NOTE_F4, NOTE_F4, NOTE_F4, NOTE_A4, NOTE_G4, NOTE_G4, NOTE_E4, NOTE_D4,NOTE_E4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_E4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_C4,};int noteDurations[] = {4,4,4,8,4,4,4,8,8,4,4,4,4,1,4,4,4,8,4,4,4,8,8,4,4,4,4,1,2,2,8,2,2,4,4,1,4,4,4,8,4,4,4,8,8,4,4,4,4,1,};Servo myservo;int LED=3; //置 LED 灯为数字引脚3int val=0; //val 存储环境光传感器的值int pos=0; //舵机的角度初始值为0int light=0;void setup(){pinMode(LED,OUTPUT); // LED 为输出模式Serial.begin(9600); //串口波特率设置为9600myservo.attach(9);//舵机接到数字口9myservo.write(0);//初始角度为0}void loop(){val=analogRead(0);//读取传感器的值(光线越强,值越大)Serial.println(val);//串口查看电压值的变化if( val>40){//一旦大于设定的值,增加角度pos = pos +2;for (int thisNote = 0; thisNote < 50; thisNote++) {if (val>110) {//如果值大于串口中的电压值大于一个值,播放音乐int noteDuration = 800/noteDurations[thisNote];tone(musicPin, melody[thisNote],noteDuration);int pauseBetweenNotes = noteDuration * 1.30;delay(pauseBetweenNotes);noTone(musicPin);}}if ( pos>=90){ //转到了90后,就保持90pos =90;}myservo.write(pos);//写入舵机的角度delay(100);light=map(pos,0,90,0,255); //随角度增大, LED 亮度增大analogWrite(LED,light );//写入亮度值}else{pos=pos-2;//减2°if(pos<=0){pos=0;//减到°为止}myservo.write(pos);//写入舵机的角度delay(100);light=map( pos,0,90,0,255);//随角度减小,LED 亮度减小analogWrite(LED,light);//写入亮度值}}
五、外观设计
外观设计如下图所示:
六、总结与展望
该项目制作过程中,参考本学期的教学课程实践项目与互联网上的蜂鸣器声音频率相关资料,顺利完成。在此过程中遇到了一些问题,声音的不同频率对应的ardunio乐曲编写需要一定的乐理基础,各种音调的持续时间需要细心计算。其次,当测试不同程序的时候要记得刷新硬件,以此擦除上次实验烧录的程序。
本项目因器材有限,暂未做出精美的外观设计与丰富的功能设计,希望在将来若有充足的硬件设备下,能开发出更好的产品,由此给更多的小朋友带来快乐。
七、参考资料
_______________________
编曲:
https://www.renrendoc.com/paper/159927607.html
使用ardunio制作神秘礼物(环境光传感器、舵机、LED、蜂鸣器)相关推荐
- Arduino UNO R3开发板+MQ-2烟雾浓度传感器+火焰传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所构成的室内安全报警模块
该系统模块主要由Arduino UNO R3开发板+MQ-2烟雾浓度传感器+火焰传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所组成,MQ-2烟雾浓度传感器 ...
- 使用STM32内部ADC资源读取环境光传感器
目录 前言 一.TEMT6000环境光传感器 二.ADC 1.什么是ADC 2.环境光传感器TEMT6000与ADC的关系 三.单片机选型 四.代码 1.sensor_AD.c 2.sensor_AD ...
- 全球及中国消费电子环境光传感器 (ALS)行业运行现状与十四五应用建设报告2022版
全球及中国消费电子环境光传感器 (ALS)行业运行现状与十四五应用建设报告2022版 --------------------------------------- [修订日期]:2021年12月 [ ...
- 如何基于Arduino开发板使用BH1750环境光传感器
当您将手机放在阳光下或强光照条件下时,它会根据光线条件自动调节亮度.现在大多数显示设备,无论是电视还是手机,都内置环境光传感器来自动调节亮度.今天在本篇文章中,我们将使用一个这样的传感器BH1750光 ...
- Arduino “学生寝室”门禁管理(红外遥控+舵机+无源蜂鸣器+DHT11温湿度传感器+LCD1602+LED灯)
一.项目要求描述 通过红外接收模块接收指令,将红外接收的引脚模式设置为输入,通过红外遥控器的按键"1~5"向其输入指令.编写代码,使得Arduino UNO控制板及相关传感器实现& ...
- PKHex 修改神秘礼物接收日期
这里说的接收日期是指,打开3ds游戏界面,进入神秘礼物,点击卡片手册,看到的卡片右下方的[接收日: 20xx.xx.xx]字段. 运行PKHex首先会获得当前系统时间,设为全局变量. 打开数据-> ...
- BUUCTF Misc 被劫持的神秘礼物 刷新过的图片 [BJDCTF2020]认真你就输了 [BJDCTF2020]藏藏藏
目录 被劫持的神秘礼物 刷新过的图片 [BJDCTF2020]认真你就输了 [BJDCTF2020]藏藏藏 被劫持的神秘礼物 下载文件 提示让我们找账号密码 wireshark打开上述文件 可以发现一 ...
- 剑盾神秘礼物正在维修服务器,宝可梦剑盾2020神秘礼物序列号大全 2020最新剑盾神秘礼物序列号[多图]...
<宝可梦剑/盾>游戏里的"神秘礼物"功能就类似其他游戏的礼包码/兑换码.这些神秘礼物多会送出各种精灵球.BP.王冠等好东西.轻松输入序列号就能拿到礼物,各位精灵训练师不 ...
- 树莓派python手势识别控制_Raspberry Pi和手势传感器控制LED
背景知识视频教程 Raspberry Pi Essentials:在更少的时间内了解更多viadean.com完整的2019 Raspberry Pi训练营viadean.comRaspberry ...
最新文章
- Unity从零开始构建能力体系 Unity Ability System
- 利用jdom生成XML文件
- 【Android 安装包优化】开启资源压缩 ( 资源压缩配置 | 启用严格模式的资源引用检查 | 自定义保留/移除资源配置 | 资源压缩效果 )
- leetcode 高薪_LeetCode刷题实战69:x 的平方根
- 没有与这些操作数【】匹配的运算符_[02]java数据类型和运算符等知识
- AttributeError: module 're' has no attribute 'sub'
- qt linux 添加库文件路径,Linux下Qt调用共享库文件.so
- Win11系统没有声卡驱动怎么解决 Win11系统没有声卡驱动解决方法
- 年终总结做得好,升职加薪少不了,仅需1个技巧,10分钟完成
- 2018.12.25|区块链技术头条
- 特殊回文数 C++解法
- 网络电话是如何实现打到普通话机上的?
- 梦三国服务器每天维护几次,梦三国:都在抱怨策划,可扪心自问玩家数量逐渐减少的原因是这些...
- 2018年 五月笔记
- 阿里暑期实习生面试经验-数据分析岗位
- try后面加小括号的写法
- 强化学习paper绘图技巧——改进smooth
- GICv3/v4-软件概述
- js html5 音乐播放器代码大全,js实现简单音乐播放器
- 教你阅读 Cpython 的源码(一)
热门文章
- linux mod jk.so,linux - mod_jk无法连接Apache和tomcat - SO中文参考 - www.soinside.com
- 量化金融kaggle竞赛汇总
- 激光切割过程中遇到毛边怎么办?
- 光子虚拟机_光速虚拟机app下载-光速虚拟机安卓版 v1.1.1 - 安下载
- 数据处理的基本方法--简要介绍
- 解决 ajax 跨域
- 线程的故事(了解线程生命周期)
- 新版标准日本语高级_第18课
- Spring-Cloud-Gateway之代码注入漏洞及解决
- 天嵌科技为E9卡片电脑Qt快速入门攻略