查看: 27521|回复: 25

Arduino教程 Lesson 7 -- 报警器

[复制链接]
本帖最后由 Jane 于 2014-5-29 17:43 编辑

该教程实验平台:Arduino入门套件
上一篇教程:Arduino教程 Lesson 6 -- 炫彩RGB LED

这里我们要接触一个新的电子元件——蜂鸣器,从字面意思就可以知道,这是一个会发声的元件。这次做一个报警器,通过连接蜂鸣器到Arduino数字输出引脚,并配合相应的程序就可以产生报警器的声音。其原理是利用正弦波产生不同频率的声音。如果结合一个LED,配合同样的正弦波产生灯光的话,就是一个完整的报警器了。


下一篇教程:Arduino教程 Lesson 8 -- 温度报警器
报警器.jpg

snakeqx  学徒

发表于 2014-6-26 19:27:09

步骤6第一个我已经完成,代码如下:

  1. float sinVal;
  2. int toneVal;
  3. int ledVal;

  4. void setup(){
  5.     pinMode(8,OUTPUT);
  6.     pinMode(9, OUTPUT);
  7. }

  8. void loop(){
  9.     for (int x=0;x<180;x++){
  10.         sinVal=(sin(x*(3.14/180)));
  11.         toneVal=2000+(int(sinVal*1000));
  12.         tone(8, toneVal);
  13.         ledVal=int(sinVal*200);
  14.         analogWrite(9, ledVal);
  15.         delay(20);
  16.     }
  17. }
复制代码

但是联线的时候发现一个问题, LED的ground必须接在arduino uno上方的GND,如果使用prototyping shield也必须接在那里。如果接在prototyping 右边红色部分的GND,灯是不会亮的。
请问一下这是怎么回事啊?
谢谢 !
回复

使用道具 举报

snakeqx  学徒

发表于 2014-6-26 19:31:13

snakeqx 发表于 2014-6-26 19:27
步骤6第一个我已经完成,代码如下:

晕,我看错了,prototyping shield右边红色部分是5V输出,黑色部分才是GND.。。。
抱歉。
回复

使用道具 举报

Jane  管理员
 楼主|

发表于 2014-6-27 15:24:45

snakeqx 发表于 2014-6-26 19:31
晕,我看错了,prototyping shield右边红色部分是5V输出,黑色部分才是GND.。。。
抱歉。 ...

解决问题就好~
回复

使用道具 举报

半水  见习技师

发表于 2015-1-30 20:38:31

买的配件里的是无源蜂鸣器。。。
回复

使用道具 举报

Tommy  见习技师

发表于 2015-6-30 14:52:21

顶一个,好好学习
回复

使用道具 举报

Jane  管理员
 楼主|

发表于 2015-7-1 14:15:01

半水 发表于 2015-1-30 20:38
买的配件里的是无源蜂鸣器。。。

是的 蜂鸣器有变动,不过不影响使用的
回复

使用道具 举报

1522631876  见习技师

发表于 2015-8-2 10:50:39

snakeqx 发表于 2014-6-26 19:27
步骤6第一个我已经完成,代码如下:

我想问一下  ledVal=int(sinVal*200) 怎么保证ledVal的值在0到255之间  
回复

使用道具 举报

powermaster  见习技师

发表于 2016-1-5 11:10:43

snakeqx 发表于 2014-6-26 19:27
步骤6第一个我已经完成,代码如下:

看了您的代码才明白基于过程的实现方法。我一直在想LED和蜂鸣器同时工作需要多线程来处理呢。
回复

使用道具 举报

xuexideyang  见习技师

发表于 2016-1-30 12:10:25

pinmode 9也输出了,是不是要在硬件电路接一个灯?还是?
回复

使用道具 举报

Jane  管理员
 楼主|

发表于 2016-2-2 15:34:13

xuexideyang 发表于 2016-1-30 12:10
pinmode 9也输出了,是不是要在硬件电路接一个灯?还是?

样例代码没有用到9,只用了Pin 8
回复

使用道具 举报

木龙小驴  见习技师

发表于 2016-2-23 21:25:10

警报真的好难听,弄个小曲儿

本帖最后由 木龙小驴 于 2016-2-23 21:31 编辑

警报真的好难听,弄个小曲儿
  1. float sinVal;
  2. int toneVal;
  3. static int times = 0;
  4. int diaodiao[9] = {262,294,330,349,392,440,494,523,478};  //网上能搜到音律的赫兹数,用数组保存
  5. char SUNANA[128]="123556531233212.123556531233221.44466655312.123556531233221";   //随便搜个曲子,用字符数组保存
  6. void setup() {
  7.   // put your setup code here, to run once:
  8.   pinMode(10, OUTPUT);
  9. }

  10. void loop() {
  11.   // put your main code here, to run repeatedly:
  12.   goSing(SUNANA);
  13. }
  14. void goSing(char *music){
  15.   for(int i=0;i<128;i++){
  16.     int index = music[i]-48;     //ascii码里字符 '1'= 49,所以需要减去48
  17.     if(index >0 && index <10){
  18.       tone(10, diaodiao[index],200);    //发出声音,200毫秒持续时间
  19.     }else{
  20.       delay(500);
  21.     }
  22.    
  23.     if(music[i] == 0){       //由于C语言数组默认是0,所以遇到0就break(跳出循环)
  24.       break;
  25.     }
  26.     delay(200);
  27.   }
  28.      
  29. }
  30. //整体还有些问题,就是tone这个函数,只有赫兹数变化才会发声,比如do ri,如果是dodo,就会发一个,希望哪位大神能指导小弟。
复制代码
回复

使用道具 举报

xxlll66  见习技师

发表于 2017-2-22 18:15:15

怎么看不到图啊
回复

使用道具 举报

undercoldwater  见习技师

发表于 2017-3-14 16:00:27

本帖最后由 undercoldwater 于 2017-3-14 16:13 编辑

第二个小作业:
结合项目4我做出来了按一下按键后报警同时亮灯,但是我有两个小问题想请教一下
1. 报警完之后我想要buzzer静音,所以设置了tone(8,0),可是蜂鸣器还是会响。
2.代码要怎么改才能实现灯还有buzzer触发n轮? 具体点就是从报警器从最小声到最大到最小声响三遍。
附我改写的代码:

[C] 纯文本查看 复制代码
float sinVal;
int toneVal;
int ledVal;
int button=10;//pin for button
int presstime=5000;
unsigned long changeTime;//time after press the button

void setup(){
    pinMode(8,OUTPUT);//buzzer引脚
    pinMode(9, OUTPUT);//Led引脚
    pinMode(button,INPUT);//按键引脚
}

void loop(){
    int state = digitalRead(button);
     //检测按钮是否被按下,并且是否距上次按下后有3秒的等待时间
     if(state == HIGH && (millis() - changeTime)> 3000){
                //调用变灯函数
               changeLights();
       }
}
void changeLights(){
    for (int x=0;x<180;x++){
        sinVal=(sin(x*(3.14/180)));
        toneVal=2000+(int(sinVal*1000));
        tone(8, toneVal);
        ledVal=int(sinVal*200);
        analogWrite(9, ledVal);
        delay(20);
    }
    changeTime = millis();
    tone(8,1);
    analogWrite(9,0);
}


回复

使用道具 举报

undercoldwater  见习技师

发表于 2017-3-14 16:15:03

还有一个问题想要请教下我该怎么操作才能插入代码框==我弄了好一会儿还是弄不出来,发出来的代码看起来丑丑的
回复

使用道具 举报

颖丸子  学徒

发表于 2017-3-21 14:43:11

看不见图怎么办?
回复

使用道具 举报

Jane  管理员
 楼主|

发表于 2017-3-24 23:31:22

回复

使用道具 举报

Cherry_island  学徒

发表于 2017-4-14 16:30:15

[C] 纯文本查看 复制代码
/*1、结合红色LED灯做一个完整的报警器。
提示:可以让LED也随着sin函数变化,使声音与灯光节奏保持一致。
*/
int ledPin=10;
int buzze=8;
void setup() {
  // put your setup code here, to run once:
  pinMode(ledPin,OUTPUT);
  pinMode(buzze,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:

float sinVal;
int toneVal;
int ledVal;
 
     for(int x=0; x<180; x++){
            //将sin函数角度转化为弧度
            sinVal = (sin(x*(3.1412/180)));
            //用sin函数值产生声音的频率
            toneVal = 2000+(int(sinVal*1000));
            //led输出值
            ledVal = 55+(int(sinVal*200));
            //给引脚8一个
            tone(buzze, toneVal);
            analogWrite(ledPin,ledVal);
            delay(2); 
     }   
}
回复

使用道具 举报

Cherry_island  学徒

发表于 2017-4-14 16:35:17

undercoldwater 发表于 2017-3-14 16:00
第二个小作业:
结合项目4我做出来了按一下按键后报警同时亮灯,但是我有两个小问题想请教一下
1. 报警完之 ...

关闭蜂鸣器声音,noTone(pin)
回复

使用道具 举报

zhuceyoujue  见习技师

发表于 2017-4-24 09:50:03

请问硬件搭建的电路图怎么没有显示?
回复

使用道具 举报

白先森  见习技师

发表于 2017-6-17 15:06:02

xxlll66 发表于 2017-2-22 18:15
怎么看不到图啊

恢复得创造力?
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail