查看: 5635|回复: 0

[初识Arduino] 第九课4路信号抢答器模型实验

[复制链接]
4路信号抢答器模型实验
作者:陈杰
教学目标
知识与技能:
1.    使用按钮、蜂鸣器、LED灯制作抢答器模型。
2.    正确连接物理电路,掌握下拉电阻的使用。
过程与方法:
1.  创意制作,正确连接物理电路,制作模型。
2.  测试程序,查看实验结果。
情感态度价值观:
    使用电器元件进行创意设计,构建实际模型。
教学重点
了解并掌握1602B液晶屏的结构及电气特性,正确使用该器件,设计制作流动广告牌。
教学难点
正确连接电路(识别1602B接口引脚)
实验器材:
DFRobotArduino控制板、面包板、导线、220欧、1K欧电阻若干、按钮(4个)、蜂鸣器(1个)、Arduino Ide 1.04
教学过程
1.情景引入
教师展示制作的抢答器效果图或视频。
DSC00174.JPG

师:在知识竞赛、文体娱乐活动(抢答赛活动)中,为了能准确、公正、直观地判断出抢答者的座位号,主办方通常会使用抢答器。而今抢答器可以通过数据来说明裁决结果的准确性、公平性。使比赛大大增加了娱乐性的同时,也更加公平、公正。我们今天就通过之前已经学习使用过的LED、蜂鸣器器和按钮来组建一个4路信号抢答器。设计意图:案例引入,器材准备。
2.新知讲授今天实验中使用的器材:LED、蜂鸣器、按钮都是我们已经学习并掌握的,这里就不在多做介绍。先来看看抢答器的工作原理吧。
(1.)抢答器工作原理   在前面按钮实验中,我们已经知道按键在保持按下和保持弹起这两种状态的情况下,按键的第2引脚和第4引脚的电压值是有变化的。所以我们可以依次读取主控板模拟口0、1、2、3、4的电压值,根据读取的电压值来判断按键是否被按下。实际用万用表测量可知,当没有按键按下时,模拟口电压值为0.0V左右。当有按键按下时,模拟口的电压值为5.0V左右。所以我们可以认为当模拟口的电压值小于1V(数字二进制表示为204)时,没有按键按下,当模拟口的电压值大于4V(数字二进制表示为818)时,有按键按下。按键1、 2、3、4是抢答按键,按键5是清除按键。如果按键1先被按下,蜂鸣器发出提示音,红灯亮,绿灯灭,黄灯灭、蓝灯灭;如果按键2先被按下,蜂鸣器发出提示音,绿灯亮,红灯灭,黄灯灭蓝灯灭;如果按键3先被按下,蜂鸣器发出提示音,黄灯亮,红灯灭,绿灯灭、蓝灯灭;如果按键4被按下,蜂鸣器发出提示音,将蓝灯亮,红灯、绿灯和黄灯都熄灭;如果按键5被按下,蜂鸣器发出提示音,将蓝、红灯、绿和黄灯都熄灭。 (2.)连接线路 DSC00175.JPG

LED连线:黄、绿、红、蓝色LED正极分别连一个 220欧姆电阻后,连接在主控板上数字口的6、7、8、9上,负极一端接GND口。按钮连线:四个按钮分别跨接在面包板的上下两部分区域,在每个按键的第1引脚所在列插入入一根跳线,将跳线癿另一端插到5V插孔中;在每个按键的第2引脚所在列插入一根跳线,将跳线的另一端插入模拟口,按键1插到模拟0口、按键2插到模拟1口、按键3插到模拟2口中,按键4插到模拟3口中,按键5插到模拟4口中,这样按键部分就连接好了。蜂鸣器连线:蜂鸣器连线较为简单,正极一端接数字口5,负极一端接GND。这样本课中所有器件的物理电路已经完成,后面就要进入程序阶段。设计意图:介绍Arduino物理电路连接,为后面正确实验效果奠定基础。本课内容连线较多,比较繁琐,提示学生按照顺序,逐步完成连线,这样条理清晰,线路分明。
(3.)烧录程序程序代码如下:
int YellowLed=6; //定义第八引脚连接黄灯
int GreenLed=7;//定义第七引脚连接绿灯
int RedLed=8;//定义第八引脚连接红灯
int BlueLed=9; //定义第八引脚连接蓝灯 int i;//定义变量i
int j=0;//定义变量j
void buzzer()//蜂鸣器发出“嘀”声音子程序
{       for(i=0;i<80;i++)   
        {
       digitalWrite(5,HIGH);//发声音
        delay(1);//延时1ms
       digitalWrite(5,LOW);//不发声音
        delay(1);//延时ms
        }
}
void key_scan()//按键扫描子程序
{
      intkey_1,key_2,key_3,key_4,key_5;
      key_1=analogRead(0);//读取模拟第0引脚的电压值
     key_2=analogRead(1);//读取模拟第1引脚的电压值
     key_3=analogRead(2);//读取模拟第2引脚的电压值
      key_4=analogRead(3);//读取模拟第3引脚的电压值
      key_5=analogRead(4);//读取模拟第4引脚的电压值if(key_1<204&&key_2<204&&key_3<204&&key_4<204&&key_5<204)//如果各按键电压值都小于204(即模拟值的1V),可以判断没有按键按下
      {
         return;//跳出本子函数
      }
if(key_1>818)//如果按键1的电压值都大于818(即模拟值的4V),则可以判断按键1被按下
      {
        delay(10);//由于有抖动,所以延时100ms再一次判断
if(key_1>818)//如果按键1的电压值都大于818(即模拟值的4V),则可以判断按键1确实被按下
         {
            buzzer();//蜂鸣器发出声音
            digitalWrite(RedLed,HIGH);//红灯亮
            digitalWrite(GreenLed,LOW);//绿灯灭
             digitalWrite(YellowLed,LOW);//绿灯灭
              digitalWrite(BlueLed,LOW);//绿灯灭
         }
         else //否则认为是抖动干扰,不做任何动作
         {
           return;//跳出本子函数
         }
      }
if(key_2>818)//如果按键2的电压值都大于818(即模拟值的4V),则可以判断按键2被按下
      {
        delay(10);//由于有抖动,所以延时100ms再一次判断
if(key_2>818)//如果按键2的电压值都大于818(即模拟值的4V),则可以判断按键2确实被按下
         {
            buzzer();//蜂鸣器发出声音
            digitalWrite(RedLed,LOW);//红灯灭
            digitalWrite(GreenLed,HIGH);//绿灯亮
            digitalWrite(YellowLed,LOW);
            digitalWrite(BlueLed,LOW);
         }
         else //否则认为是抖动干扰,不做任何动作
         {
           return;//跳出本子函数
         }
      }
if(key_3>818)//如果按键3的电压值都大于818(即模拟值的4V),则可以判断按键3被按下
      {
        delay(10);//由于有抖动,所以延时100ms再一次判断
if(key_3>818)//如果按键3的电压值都大于818(即模拟值的4V),则可以判断按键3确实被按下
         {
            buzzer();//蜂鸣器发出声音
            digitalWrite(RedLed,LOW);//红灯灭
            digitalWrite(GreenLed,LOW);//绿灯灭
              digitalWrite(YellowLed,HIGH);
              digitalWrite(BlueLed,LOW);
         }
         else  //否则认为是抖动干扰,不做任何动作
         {
           return;//跳出本子函数
         }
      }
if(key_4>818)//如果按键3的电压值都大于818(即模拟值的4V),则可以判断按键3被按下
      {
        delay(10);//由于有抖动,所以延时100ms再一次判断
if(key_4>818)//如果按键3的电压值都大于818(即模拟值的4V),则可以判断按键3确实被按下
         {
             buzzer();//蜂鸣器发出声音
            digitalWrite(RedLed,LOW);//红灯灭
            digitalWrite(GreenLed,LOW);//绿灯灭
              digitalWrite(YellowLed,LOW);
              digitalWrite(BlueLed,HIGH);
         }
         else  //否则认为是抖动干扰,不做任何动作
         {
           return;//跳出本子函数
         }
      }
if(key_5>818)//如果按键2的电压值都大于818(即模拟值的4V),则可以判断按键2被按下
      {
        delay(10);//由于有抖动,所以延时100ms再一次判断
        if(key_5>818)//如果按键2的电压值都大于818(即模拟值的4V),则可以判断按键2确实被按下
         {
            buzzer();//蜂鸣器发出声音
            digitalWrite(RedLed,LOW);//红灯灭
            digitalWrite(GreenLed,LOW);//绿灯亮
              digitalWrite(YellowLed,LOW);      
              digitalWrite(BlueLed,LOW);
             }
         else //否则认为是抖动干扰,不做任何动作
         {
            return;//跳出本子函数
         }
      }
}
void setup()
{
  for(i=5;i<=9;i++)
  {
      pinMode(i,OUTPUT);//将5~8引脚设置为输出模式
  }  
}
void loop()
{
     while(1)
     {
       key_scan();//循环扫描按键
     }
}
将上述代码复制到IDE窗口中,先编译,如果无误后,再上传烧录至控制板中。完成后可以测试实验结果。 三.课堂练习师:相信各位同学已经基本测试完程序的效果了,不知道各位同学所做的模型是否达到理想的效果。生:我还没有按按键,有的灯就亮了,好像是感应灯了。生:我按了一个按钮的按键,别的灯怎么也亮了?……师:请同学们查查你们是否出现了这样的现象?这是由于什么原因造成的?如何解决?细心的同学已经发现图2连接图中每个按键的2号引脚分别接了个电阻到负极。其实,这个东西我们在前面按钮控制LED中已经讲过,叫做下拉电阻。
QQ图片20140505074031.jpg

四.学习总结1.复习以往学习过的电子器件,通过创意制作新奇有趣的电子玩具。2.在复杂电路连接时,应掌握合理的连线方式方法,确保线路清晰明了。 五、课后反馈1.按钮的安装,反映按键接触不良,造成无法使用,这个主要是因为按键没有完全插进面包板,所以才会有此问题。上两个按键正确插入面包板的图,大家可以参考一下,按入面包板的时候要左右用力均匀,完全压入面包板就可以了。如果往出拿呢,也很简单,可以使用面包板跳线盒中的圆头镊子,慢慢从中间槽中撬出来就可以了。
QQ图片20140505074149.jpg
2.下拉电阻的使用。很多同学接好了电路都遇到了“没有碰按键灯就亮”、“按了按键亮几盏灯”的情况,那是由于人体电压的干扰产生的抖动,虽然在程序中做了对于抖动的处理,但是看来效果并不理想。所以,还是建议使用1K欧的电阻做下拉电阻。3.本节课中线路连接较多,很容易造成由于连线错误,而导致实验失败。建议采用逐步连接的方法进行,例如先连接LED灯的连线,再连接蜂鸣器的连线,最后连接按钮的连线。另外面包板上的连线尽量规范,相同元件的连线,尽量放在一致的位置,以便纠错。

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

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

硬件清单

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

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

mail