锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Arduino 小项目 (欢迎机器)

时间:2023-07-22 22:07:00 红外传感器e3f3f6光敏传感器

Arduino 小项目 (欢迎机器)

写在前面
这个项目怎么说?arduino小作业,功能有点鸡肋,但是混作业的时候还是可以用的

说正经的
在商店门口设计一个欢迎客人的小东西,可以显示环境光值和客流,并配备相关的音乐和灯光显示。

主要功能
超声波测距模块用于检测客流。当顾客距离门小于100时cm
蜂鸣器会发出声音提醒客人,LCD显示屏上的number数值加1,主机将数据1发送数据1,使所有与从机相连LED灯闪烁(即LED灯样1);其中,当number当数值变成10倍时,将客户提取为幸运儿,LCDY在显示屏上的值加1。
如果你知道商店里的顾客当天的生日,你可以通过按钮1播放生日快乐歌曲,主机将数据2发送给从机器,使所有与从机器相连LED灯按样式2 执行代码。
一般情况下,店员也可以通过按键2和按键3控制两只老虎和小星星的播放,以及相应的LED灯样式。

代码
因为我们需要用蜂鸣器播放音乐,所以我们现在需要在主机函数中添加一个pitches.h文件。
添加方法是打开arduino点击右上角的倒三角形(▼)图标,点击新标签,或直接Ctrl Shift N,以下界面将出现
在这里插入图片描述
在框内输入pitches.h,点击返回车辆,然后将以下代码复制到其中

#define NOTE_B0 31 //B0 ····7  #define NOTE_C1 33 //C1 ···1  #define NOTE_CS1 35 //C1#  #define NOTE_D1 37 //D1 ···2  #define NOTE_DS1 39 //D1#  #define NOTE_E1 41 //E1 ···3  #define NOTE_F1 44 //F1 ···4  #define NOTE_FS1 46 //F1#  #define NOTE_G1 49 //G1 ···5  #define NOTE_GS1 52 //G1#  #define NOTE_A1 55 //A1 ···6  #define NOTE_AS1 58 //A1#  #define NOTE_B1 62 //B1 ···7

#define NOTE_C2 65 //C2 ··1

#define NOTE_CS2 69 //C2#

#define NOTE_D2 73 //D2 ··2

#define NOTE_DS2 78 //D2#

#define NOTE_E2 82 //E2 ··3

#define NOTE_F2 87 //F2 ··4

#define NOTE_FS2 93 //F2#

#define NOTE_G2 98 //G2 ··5

#define NOTE_GS2 104 //G2#

#define NOTE_A2 110 //A2 ··6

#define NOTE_AS2 117 //A2#

#define NOTE_B2 123 //B2 ··7

#define NOTE_C3 131 //C3 ·1

#define NOTE_CS3 139 //C3#

#define NOTE_D3 147 //D3 ·2

#define NOTE_DS3 156 //D3#

#define NOTE_E3 165 //E3 ·3

#define NOTE_F3 175 //F3 ·4

#define NOTE_FS3 185 //F3#

#define NOTE_G3 196 //G3 ·5

#define NOTE_GS3 208 //G3#

#define NOTE_A3 220 //A3 ·6

#define NOTE_AS3 233 //A3#

#define NOTE_B3 247 //B3 ·7

#define NOTE_C4 262 //C4 1(中央C大调)

#define NOTE_CS4 277 //C4#

#define NOTE_D4 294 //D4 2

#define NOTE_DS4 311 //D4#

#define NOTE_E4 330 //E4 3

#define NOTE_F4 349 //F4 4

#define NOTE_FS4 370 //F4#

#define NOTE_G4 392 //G4 5

#define NOTE_GS4 415 //G4#

#define NOTE_A4 440 //A4 6

#define NOTE_AS4 466 //A4#

#define NOTE_B4 494 //B4 7

#define NOTE_C5 523 //C5 1·

#define NOTE_CS5 554 //C5#

#define NOTE_D5 587 //D5 2·

#define NOTE_DS5 622 //D5#

#define NOTE_E5 659 //E5 3·

#define NOTE_F5 698 //F5 4·

#define NOTE_FS5 740 //F5#

#define NOTE_G5 784 //G5 5·

#define NOTE_GS5 831 //G5#

#define NOTE_A5 880 //A5 6·

#define NOTE_AS5 932 //A5#

#define NOTE_B5 988 //B5 7·

#define NOTE_C6 1047 //C6 1··

#define NOTE_CS6 1109 //C6#

#define NOTE_D6 1175 //D6 2··

#define NOTE_DS6 1245 //D6#

#define NOTE_E6 1319 //E6 3··

#define NOTE_F6 1397 //F6 4··

#define NOTE_FS6 1480 //F6#

#define NOTE_G6 1568 //G6 5··

#define NOTE_GS6 1661 //G6#

#define NOTE_A6 1760 //A6 6··

#define NOTE_AS6 1865 //A6#

#define NOTE_B6 1976 //B6 7··

#define NOTE_C7 2093 //C7 1···

#define NOTE_CS7 2217 //C7#

#define NOTE_D7 2349 //D7 2···

#define NOTE_DS7 2489 //D7#

#define NOTE_E7 2637 //E7 3···

#define NOTE_F7 2794 //F7 4···

#define NOTE_FS7 2960 //F7#

#define NOTE_G7 3136 //G7 5···

#define NOTE_GS7 3322 //G7#

#define NOTE_A7 3520 //A7 6···

#define NOTE_AS7 3729 //A7#

#define NOTE_B7 3951 //B7 7···

#define NOTE_C8 4186 //C8 1····

#define NOTE_CS8 4435 //C8#

#define NOTE_D8 4699 //D8 2····

#define NOTE_DS8 4978 //D8#

用到的库函数有LiquidCrystal和Wire,软件没有自带的可自行进行下载,下载方式在arduino专栏—三位一体数码管那篇文章里有提到,下面是主机程序的代码,注释很全

#include "pitches.h"
#include 
#include 

#define Trig 4 //超声波引脚 向Trig输入一个10uS以上的高电平,可触发模块测距
#define Echo 3 //当测距结束时,Echo会输出一个高电平,电平宽度为超声波往返时间之和。

#define Buzzer 8 //蜂鸣器引脚
#define KeyPin1 5 //按键1、2、3的引脚
#define KeyPin2 6
#define KeyPin3 7

int KEY_NUM1 = 0; //按键变量赋初值
int KEY_NUM2 = 0;
int KEY_NUM3 = 0;

IRrecv irrecv(PIN_RECV);
decode_results results;

const int rs = 9, en = 10, d4 = 13, d5 = 12, d6 = 11, d7 = 2; //LCD1602的引脚设计
int vol =0;     //光敏传感器OUT引脚接A0
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);  //初始化LCD1602

int num = 0;    //用来记录客流量的变量num
int y = 0;      //用来记录幸运人数的变量y

int a = 1;
int b = 2;
int c = 3;
int d = 4;
int *s[] = { 
        &a, &b, &c, &d};    //主机向从机传送数据时所用到的指针数组

//生日快乐歌对应的旋律和持续时间
int melody1[] = { 
        NOTE_G4,  NOTE_G4, NOTE_A4, NOTE_G4, NOTE_C5, NOTE_B4, 0,NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_D5, NOTE_C5, 0, NOTE_G4,NOTE_G4, NOTE_G5, NOTE_E5, NOTE_C5, NOTE_B4,  NOTE_A4, 0,NOTE_F5, NOTE_F5, NOTE_E5, NOTE_C5, NOTE_D5, NOTE_C5, 0,};
int noteDurations1[] = { 
        8,8,4,4,4,4, 4, 8,8,4,4,4,4, 4, 8,8,4,4,4,4,2, 8, 8,8,4,4,4,2, 4,};

//两只老虎对应的旋律和持续时间
int melody2[]={ 
        NOTE_C4, NOTE_D4, NOTE_E4,  NOTE_C4,  NOTE_C4,  NOTE_D4, NOTE_E4, NOTE_C4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_C4, NOTE_G4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_C4, NOTE_D4, NOTE_G3, NOTE_C4, 0, NOTE_D4, NOTE_G3, NOTE_C4, 0,};
int noteDurations2[]={ 
        8,8,8,8, 8,8,8,8, 8,8,4, 8,8,4, 8,8,8,8,4,4, 8,8,8,8,4,4, 4,4,4,4, 4,4,4,4,};

//小星星对应的旋律和持续时间
int melody3[] = { 
        NOTE_C4,NOTE_C4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4,NOTE_G4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_D4,NOTE_C4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4,NOTE_G4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_D4,NOTE_C4};
int noteDurations3[] = { 
        4, 4, 4, 4, 4, 4, 2, 4,4,4,4,4,4,2,4, 4, 4, 4, 4, 4, 2, 4,4,4,4,4,4,2,4, 4, 4, 4, 4, 4, 2, 4,4,4,4,4,4,2};

  void BUZZER(){ 
              //有顾客到来时的响声代码模块
    for(int i=0;i<80;i++){ 
        
        digitalWrite(Buzzer, HIGH);
        delay(1);
        digitalWrite(Buzzer, LOW);
        delay(1);}}

  void BUZZER1(){ 
        //歌曲1:生日快乐
    for(int thisNote = 0; thisNote < 29; thisNote++) { 
        
        int noteDuration = 1000/noteDurations1[thisNote];
        tone(8, melody1[thisNote],noteDuration);
        int pauseBetweenNotes = noteDuration * 1.30;
        delay(pauseBetweenNotes);
        noTone(8);}}

  void BUZZER2(){ 
        //歌曲2:两只老虎
    for(int thisNote = 0; thisNote < 29; thisNote++){ 
        
        int noteDuration = 1000/noteDurations2[thisNote];//计算旋律持续时间//1秒(1000ms)除以音符类型//比如:四分音符:1000/noteDurations[thisNote],//八分音符:1000/noteDurations[thisNote].
        tone(8,melody2[thisNote], noteDuration);//播放音乐
        int pauseBetweenNotes = noteDuration * 1.30;//为了区别不同旋律,设置一个最小的间隔时间,一般设置为旋律持续时间的130%比较合适
        delay(pauseBetweenNotes);
        noTone(8);}}//停止当前旋律播放

  void BUZZER3(){ 
        //歌曲3:小星星
    for(int thisNote = 0; thisNote < 29; thisNote++) { 
        
        int noteDuration = 1000/noteDurations3[thisNote];
        tone(8, melody3[thisNote],noteDuration);
        int pauseBetweenNotes = noteDuration * 1.30;
        delay(pauseBetweenNotes);
        noTone(8);}}

  void ScanKey1(){ 
            //按键1
    KEY_NUM1 = 0;     //清空变量 
    if(digitalRead(KeyPin1) == LOW)  //判断按键1是否按下 
        { 
        delay(20);        //防抖动 
        if(digitalRead(KeyPin1) == LOW){ 
         
        KEY_NUM1 = 1;      //改变KEY_NUM1的值 
        while(digitalRead(KeyPin1) == LOW);}}   //等待按键松开 
        if(KEY_NUM1 == 1){ 
         BUZZER1(); DataTransfer2();}} //播放歌曲1,并且向从机发送整型数据2

  void ScanKey2(){ 
            //按键2
    KEY_NUM2 = 0;     //清空变量 
    if(digitalRead(KeyPin2) == LOW)   //判断按键2是否按下
        { 
        delay(20);      //防抖动 
        if(digitalRead(KeyPin2) == LOW){ 
         
        KEY_NUM2 = 1;    //改变KEY_NUM2的值 
        while(digitalRead(KeyPin2) == LOW);}}    //等待按键松开 
        if(KEY_NUM2 == 1){ 
        元器件数据手册、IC替代型号,打造电子元器件IC百科大全!
          

相关文章