动手学arduino(7)请保持安全距离!

在交通事故中,两车追尾占很大比例。
引起事故的原因很多,其中有一个共同点:两车距离太近了。
是否能做一款报警器,用于检测两车之间的距离呢?
 

本文用超声波测距模块做一款报警器:当前方100CM处有物体时,绿灯亮;当物体在50~100CM之间时,黄灯亮;小于50CM时,红灯亮。
 

先介绍超声波模块:
超声波发射器向某一方向发射超声波,在发射的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离s,即:s=340m/s× t / 2 。这就是所谓的时间差测距法。

动手学arduino(7)请保持安全距离!

使用Arduino的数字引脚给HC-SR04模块的Trig引脚至少10us的高电平信号,触发SR04模块的测距功能。
 

触发测距功能后,模块会自动发送八个40khz的超声波脉冲,并自动检测是否有信号返回。
 

若有信号返回,则Echo引脚会输出高电平,高电平持续的时间就是超声波从发射到返回的时间。
 

此时可以使用pluseIn()函数获取测距结果,并计算出据被测物体的实际距离。
用arduino IDE来写代码,有十余行:
const
int ting=2;

             //设定SR04连接到Arduino引脚
const
int echo=3;

          //设定SR04连接到Arduino引脚
float distance;

              //定义一个浮点型的变量

void setup()
{

Serial.begin(9600);

            //设置波特率

pinMode(ting,OUTPUT);

     //连接SR04的引脚

pinMode(echo,INPUT);

       //设置输入状态

}
 

void loop()
{


digitalWrite(ting,LOW);

                //产生一个10US的高脉冲去触发Trigpin

delayMicroseconds(2);

delayMicroseconds(10);


digitalWrite(ting,LOW);

distance=pluseIn(echo,HIGH)/58.00;

     //检测脉冲宽度,并计算出距离

}
在仿真电路中,只要一个命令就能完成测距:

动手学arduino(7)请保持安全距离!

该命令中要选择trigger和echo与arduino连接的端口号(本文是11和8)
把测得距离保存在一个变量中:

动手学arduino(7)请保持安全距离!

再用分支结构,根据物体的距离做出反应。
 

元件连接图:

动手学arduino(7)请保持安全距离!

代码:

动手学arduino(7)请保持安全距离!

仿真效果:

智能小车就可以用超声波来躲避障碍物。

Arduino基础入门篇12—火焰报警器

|

    阅读本文大概需要3分钟。

|

本篇介绍火焰传感器,通过火焰传感器感知周围环境是否存在明火,控制蜂鸣器对环境火焰进行报警提示。

1. 实验材料

  • Uno R3开发板

  • 配套USB数据线

  • 面包板及配套连接线

  • 1个有源蜂鸣器

  • 1个10KΩ电阻

  • 1个火焰传感器

火焰传感器(即红外接收三极管)是一种对火焰特别敏感的传感器。其利用红外线对火焰的敏感特性,用特制的红外线接收管来检测火焰,然后将火焰的亮度转化成电平信号供控制器处理。

Arduino基础入门篇12—火焰报警器
火焰传感器

2. 实验步骤

  1. 根据原理图搭建电路。

    火焰传感器的负极(短脚)接到5V引脚,正极(长脚)连接10KΩ的电阻,电阻的另一端连接GND。传感器与电阻连接在一起并接入到开发板模拟输入A0引脚。蜂鸣器正极接开发板数字引脚8,负极接GND。

    实验原理图如下图所示:

    Arduino基础入门篇12—火焰报警器
    实验原理图

    实物连接图如下图所示:

    Arduino基础入门篇12—火焰报警器
    实物连接图
  2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

     1/*
    2  *  Flame
    3  *  火焰传感器检测到火焰后,控制蜂鸣器报警
    4  */

    5
    6int  beep  =  8; //定义蜂鸣器接口为数字8  接口
    7int  flameVal  =  0;   //存储火焰传感器数据
    8
    9void  setup()  {
    10    pinMode(beep,  OUTPUT);   //定义beep  为输出接口
    11 }
    12
    13void  loop()  {
    14    flameVal  =  analogRead(A0);   //读取火焰传感器的模拟值
    15    if  (flameVal  >=  200//当模拟值大于200时蜂鸣器鸣响,阈值根据实际测试进行修改
    16    { 
    17        digitalWrite(beep,  HIGH); //
    18    }
    19    else
    20    { 
    21        digitalWrite(beep,  LOW);
    22    }
    23 }
  3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

    Arduino基础入门篇12—火焰报警器
    程序下载


3. 实验现象

当有火焰靠近时,蜂鸣器鸣响,当无火焰时,蜂鸣器停止鸣响。

5. 实验分析

通过读取火焰传感器的模拟值,根据设定的阈值进行比较,进而控制蜂鸣器鸣响。这个实验跟上一篇光控灯实验非常相似,都是通过特定传感器将光信号转换成高低变化的电平信号供控制器进行处理。

很多时候,对于输出模拟量的传感器都需要一个阈值,通过阈值比较进行实际的控制逻辑,阈值的选择需要根据实际情况进行反复调整,直到满足实际功能需求。

Arduino基础入门篇12—火焰报警器
扫码加入微信公众号:TonyCode


原文始发于微信公众号(

TonyCode

):Arduino基础入门篇12—火焰报警器

|

Arduino基础入门篇08—播放音乐

Arduino基础入门篇08—播放音乐


|

  阅读本文大概需要6分钟。

|


本篇介绍电子产品中的发声器件—蜂鸣器,通过控制蜂鸣器播放「葫芦娃」,带你回归美好童年。

1. 了解蜂鸣器

蜂鸣器是一种电子发声元器件,可以发出”beep”的声音。采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种。

  • 有源蜂鸣器: 内部带有震荡源,只要一通电就会发出固定频率的声音。

Arduino基础入门篇08—播放音乐
有源蜂鸣器
  • 无源蜂鸣器:内部不带震荡源,需要使用2KHz到5KHz的脉冲信号驱动发声,声音频率可变。

Arduino基础入门篇08—播放音乐
无源蜂鸣器

从外观上来看两种蜂鸣器形状相似,有源蜂鸣器底部有密封,无源蜂鸣器底部可看到电路板。两种蜂鸣器都标注有正负极。

2. 实验材料

  • Uno R3开发板

  • 配套USB数据线

  • 面包板及配套连接线

  • 有源蜂鸣器

  • 无源蜂鸣器

3. 实验步骤

  1. 根据原理图搭建电路。

    蜂鸣器正极接开发板数字引脚8,负极接开发板GND,连接非常简单。

    电路原理图如下图所示:

    Arduino基础入门篇08—播放音乐
    电路原理图

    实物连接图如下图所示:

    Arduino基础入门篇08—播放音乐
    实物连接图
  2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

     1/*
    2  *  BUZZER1
    3  *  有源蜂鸣器控制
    4  */

    5
    6int  buzzer  =  8; //设置控制蜂鸣器的数字IO脚
    7void  setup()
    8
    {
    9    pinMode(buzzer,  OUTPUT);   //设置数字IO脚模式,OUTPUT为输出
    10 }
    11void  loop()
    12
    {
    13    digitalWrite(buzzer,  HIGH);   //发声音
    14    delay(300); //延时300ms
    15    digitalWrite(buzzer,  LOW);   //不发声音
    16    delay(300); //延时300ms
    17 }
  3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

    Arduino基础入门篇08—播放音乐
    程序下载
  4. 下载后有源蜂鸣器发出声音频率固定的声音。

  5. 将有源蜂鸣器替换成无源蜂鸣器,拷贝如下代码进行保存并下载。

      
    
    1/*
      2      BUZZER2
      3      使用无源蜂鸣器播放《葫芦娃》
      4*/

      5
      6//对应音符和频率值
      7#define  NOTE_D0  -1
      8#define  NOTE_D1  294
      9#define  NOTE_D2  330
    10#define  NOTE_D3  350
    11#define  NOTE_D4  393
    12#define  NOTE_D5  441
    13#define  NOTE_D6  495
    14#define  NOTE_D7  556
    15
    16#define  NOTE_DL1  147
    17#define  NOTE_DL2  165
    18#define  NOTE_DL3  175
    19#define  NOTE_DL4  196
    20#define  NOTE_DL5  221
    21#define  NOTE_DL6  248
    22#define  NOTE_DL7  278
    23
    24#define  NOTE_DH1  589
    25#define  NOTE_DH2  661
    26#define  NOTE_DH3  700
    27#define  NOTE_DH4  786
    28#define  NOTE_DH5  882
    29#define  NOTE_DH6  990
    30#define  NOTE_DH7  112
    31
    32#define  WHOLE  1
    33#define  HALF  0.5
    34#define  QUARTER  0.25
    35#define  EIGHTH  0.25
    36#define  SIXTEENTH  0.625
    37
    38//整首曲子的音符部分
    39int  tune[]  =
    40{
    41    NOTE_DH1,  NOTE_D6,  NOTE_D5,  NOTE_D6,  NOTE_D0,
    42    NOTE_DH1,  NOTE_D6,  NOTE_D5,  NOTE_DH1,  NOTE_D6,  NOTE_D0,  NOTE_D6,
    43    NOTE_D6,  NOTE_D6,  NOTE_D5,  NOTE_D6,  NOTE_D0,  NOTE_D6,
    44    NOTE_DH1,  NOTE_D6,  NOTE_D5,  NOTE_DH1,  NOTE_D6,  NOTE_D0,
    45
    46    NOTE_D1,  NOTE_D1,  NOTE_D3,
    47    NOTE_D1,  NOTE_D1,  NOTE_D3,  NOTE_D0,
    48    NOTE_D6,  NOTE_D6,  NOTE_D6,  NOTE_D5,  NOTE_D6,
    49    NOTE_D5,  NOTE_D1,  NOTE_D3,  NOTE_D0,
    50    NOTE_DH1,  NOTE_D6,  NOTE_D6,  NOTE_D5,  NOTE_D6,
    51    NOTE_D5,  NOTE_D1,  NOTE_D2,  NOTE_D0,
    52    NOTE_D7,  NOTE_D7,  NOTE_D5,  NOTE_D3,
    53    NOTE_D5,
    54    NOTE_DH1,  NOTE_D0,  NOTE_D6,  NOTE_D6,  NOTE_D5,  NOTE_D5,  NOTE_D6,  NOTE_D6,
    55    NOTE_D0,  NOTE_D5,  NOTE_D1,  NOTE_D3,  NOTE_D0,
    56    NOTE_DH1,  NOTE_D0,  NOTE_D6,  NOTE_D6,  NOTE_D5,  NOTE_D5,  NOTE_D6,  NOTE_D6,
    57    NOTE_D0,  NOTE_D5,  NOTE_D1,  NOTE_D2,  NOTE_D0,
    58    NOTE_D3,  NOTE_D3,  NOTE_D1,  NOTE_DL6,
    59    NOTE_D1,
    60    NOTE_D3,  NOTE_D5,  NOTE_D6,  NOTE_D6,
    61    NOTE_D3,  NOTE_D5,  NOTE_D6,  NOTE_D6,
    62    NOTE_DH1,  NOTE_D0,  NOTE_D7,  NOTE_D5,
    63    NOTE_D6,
    64 };
    65
    66//曲子的节拍,即音符持续时间
    67float  duration[]  =
    68{
    69    110.50.51,
    70    0.50.50.50.510.50.5,
    71    0.510.510.50.5,
    72    0.50.50.50.511,
    73
    74    111  +  1,
    75    0.511  +  0.51,
    76    110.50.51,
    77    0.511  +  0.51,
    78    0.50.50.50.51  +  1,
    79    0.511  +  0.51,
    80    1  +  10.50.51,
    81    1  +  1  +  1  +  1,
    82    0.50.50.5  +  0.250.250.5  +  0.250.250.5  +  0.250.25,
    83    0.510.511,
    84    0.50.50.5  +  0.250.250.5  +  0.250.250.5  +  0.250.25,
    85    0.510.511,
    86    1  +  10.50.51,
    87    1  +  1  +  1  +  1,
    88    0.510.51  +  1,
    89    0.510.51  +  1,
    90    1  +  10.50.51,
    91    1  +  1  +  1  +  1
    92 };
    93
    94int  length; //定义一个变量用来表示共有多少个音符
    95int  tonePin  =  8;   //蜂鸣器的pin
    96
    97void  setup()
    98
    {
    99    pinMode(tonePin,  OUTPUT);   //设置蜂鸣器的pin为输出模式
    100    length  =  sizeof(tune)  /  sizeof(tune[0]);   //这里用了一个sizeof函数,查出数组里有多少个音符
    101 }
    102
    103void  loop()
    104
    {
    105    for  (int  x  =  0;   x  <  length;   x++)  //循环音符的次数
    106    {
    107        tone(tonePin,  tune[x]);   //依次播放tune数组元素,即每个音符
    108        delay(400  *  duration[x]);   //每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快
    109        noTone(tonePin); //停止当前音符,进入下一音符
    110    }
    111    delay(5000); //等待5秒后,循环重新开始
    112 }
  6. 下载完毕后,无源蜂鸣器就会播放「葫芦娃」神曲了。

4. 函数介绍

tone()

  • 描述:在指定引脚产生指定频率的方波,可用于蜂鸣器或扬声器播放音调。

  • 函数原型:

    • tone(pin, frequency)

    • tone(pin, frequency, duration)

  • 参数:

    • pin:产生音调的引脚。

    • 音调频率,单位赫兹。

    • 音调持续时间(毫秒单位),此参数可选。

  • 返回值:没有

noTone()

  • 描述:停止产生方波。

  • 函数原型: noTone(pin)

  • 参数:需要停止产生音调的引脚。

  • 返回值:没有。

noTone(pin)用来停止由tone(pin, frequency)产生的音调。

5. 程序分析

有源蜂鸣器程序比较简单,通过控制数字I/O引脚输出高低电平来让有源蜂鸣器发声。

无源蜂鸣器播放「葫芦娃」程序中,定义了跟乐理相关的知识,音符需要对应频率,拍子就是每个音符播放时间。还可以根据不同简谱来演奏出不同的曲子。

Arduino基础入门篇08—播放音乐
扫码加入微信公众号:TonyCode





原文始发于微信公众号(

TonyCode

):Arduino基础入门篇08—播放音乐

|