资讯详情

使用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/蜂鸣器或扬声器    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[] = {  四、四、八、四、四、八、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、  四、四、八、四、四、八、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、  2、8、2、4、4、1  四、四、八、四、四、八、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、四、    };  Servo myservo;  int LED=3; //置 LED 灯为数字引脚3  int val=0; //val 存储环境光传感器的值  int pos=0; ///舵机角度的初始值为0  int light=0;    void setup(){   pinMode(LED,OUTPUT); // LE 为输出模式

   Serial.begin(9600); //串口波特率设置为9600

   myservo.attach(9);//舵机接到数字口9

   myservo.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后,就保持90

         pos =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

标签: 3b6传感器32002105a5b00600传感器a设备开停传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台