【Arduino实验03 智能红绿灯】
目录一、实验目的二、实验设备与环境三、实验重点四、实验难点五、实验内容5.1实验任务5.2实验原理5.3实验内容5.4实验结果5.5思考题一、实验目的(1)熟悉掌握Arduino编程基本语法;
(2)熟悉按键、蜂鸣器的功能,掌握接口电路连接;
(3)熟悉选择语句、循环语句的功能,
(4)蜂鸣器发声的驱动程序编写,智能红绿灯控制程序编写
二、实验设备与环境ArduinoUNO套件、ArduinoIDE、计算机、LED灯5个、220Ω电阻5个、1K电阻1个、杜邦线若干
三、实验重点(1)按键、蜂鸣器功能; (2)分支语句;(3)蜂鸣器驱动程序、智能红绿灯控制程序
四、实验难点(1)驱动程序、智能红绿灯控制程序
五、实验内容5.1实验任务任务描述:现代道路交通体系统,通过红绿灯控制系统实现路口人、车有序通行,通常有人行斑马线红绿灯、三叉路口红绿灯、十字路口红绿灯、智能红绿灯等。本实验通过编程实现斑马线手动红绿灯控制模拟场景,即在车行道绿灯、人行道显示红灯时,当行人需要过马路时,先按下通行按钮,车行道变黄灯延时一段时间后显示红灯,同时人行道绿灯亮起,当设定人行通过马路时间剩余很短时间时,人行绿灯闪烁,同时蜂鸣器声催促提醒,直至人行斑马线红灯亮起,车行道变回绿灯。
在实验中,通过按键启动人行交通灯系统,编程实现人行交通红绿灯变换。
5.2实验原理1.按键
按键,也称为按钮,是一种轻触式开关,按键内部触点为常开,当按下时接通,松开时断开。
2.蜂鸣器
蜂鸣器是一种一体化结构的电子讯响器,广泛应用于计算机、打印机、定时器、电话、汽车、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
按其驱动方式的不同,分为无源蜂鸣器(外部驱动)和有源蜂鸣器(内部含驱动电路)。
(1)蜂鸣器发声原理
蜂鸣器是电流通过电磁线圈,产生的磁场来驱动振动膜发声。
无源他激型蜂鸣器发声原理:方波信号输入谐振装置转换为声音信号输出,无源他激型蜂鸣器的工作发声原理图如图:
Arduino是利用I/O输出设定频率的翻转电平驱动波形对蜂鸣器进行驱动发声。
有源自激型蜂鸣器发声原理:直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号,有源自激型蜂鸣器的工作发声原理图如图:
(2)蜂鸣器发声驱动
//设定音调的蜂鸣器发声驱动intbuzzer=9;voidsetup(){pinMode(buzzer,OUTPUT); //定义引脚为输出模式}voidloop(){//发出一个250Hz的声音digitalWrite(buzzer,HIGH);delay(2); //延时2msdigitalWrite(buzzer,LOW);delay(2);}3.条件分支语句条件
分支语句是选择控制语句,通过当前条件判断选择执行后面的语句。
条件分支语句有三种基本结构:
(1)简单分支结构
if(表达式)
{语句;}
(2)双分支结构
if(表达式)
{语句块1;}
else
{语句块2;}
(3)多分支结构
if(表达式1)
{语句块1;}
elseif(表达式2)
{语句块2;}
elseif(表达式3)
{语句块3;}
elseif(表达式4)
{语句块4;}
......switch...case语句
switch(表达式){
case表达式1:语句块1
break;
case表达式2:语句块2
break;
case表达式3:语句块3
break;
......default:语句n
break;
}
4.电路图人行横道红绿灯控制电路图
5.程序流程图
人行横道智能红绿灯控制程序流程图:
5.3实验内容1.按键控制程序
步骤1:搭建按键控制电路
步骤2:按下按键点亮绿色LED(红色LED灭)程序流程图
程序流程图:
步骤3:编写源程序
ArduinoIDE程序:
constintgreen_ledPin=6;constintred_ledPin=8;constintbuttonPin=12;voidsetup(){pinMode(green_ledPin,OUTPUT);pinMode(red_ledPin,OUTPUT);pinMode(buttonPin,INPUT);Serial.begin(9600);}voidloop(){intbuttonValue=0;buttonValue=digitalRead(buttonPin);Serial.print(″buttonValue=″);Serial.println(buttonValue);//将读取的按键值输出到串口监视器if(buttonValue==0){digitalWrite(red_ledPin,HIGH);digitalWrite(green_ledPin,LOW);}else{digitalWrite(red_ledPin,LOW);digitalWrite(green_ledPin,HIGH);}}Mixly程序:
步骤4:程序测试与验证
2.编程驱动蜂鸣器发声
步骤1:搭建驱动蜂鸣器发声电路
步骤2:编写源程序
ArduinoIDE程序:
constintbuzzerPin=8;constintbuttonPin=12;voidsetup(){pinMode(buzzerPin,OUTPUT);pinMode(buttonPin,INPUT);digitalWrite(buzzerPin,LOW);while(!digitalRead(buttonPin)){}//等待按键按下}voidloop(){//产生频率为500Hz的方波(声音)digitalWrite(buzzerPin,HIGH);delay(1);digitalWrite(buzzerPin,LOW);delay(1);digitalWrite(buzzerPin,HIGH);delay(2);digitalWrite(buzzerPin,LOW);delay(2);}Mixly程序:
步骤3:修改或编写源程序,实现驱动蜂鸣器发出几个不同音调的声音
源程序:
intredled=6;intyellowled=5;intgreenled=4;intredped=9;intgreenped=8;intbuttonled=11;intbuzzerPin=13;voidsetup(){pinMode(redled,OUTPUT);pinMode(yellowled,OUTPUT);pinMode(greenled,OUTPUT);pinMode(redped,OUTPUT);pinMode(greenled,OUTPUT);pinMode(buttonled,OUTPUT);pinMode(buzzerPin,OUTPUT);Serial.begin(9600);}voidloop(){intbuttonValue=0;buttonValue=digitalRead(buttonled);Serial.print("buttonValue=");Serial.println(buttonValue);if(buttonValue=0){digitalWrite(greenled,LOW);digitalWrite(yellowled,HIGH);delay(3000);digitalWrite(yellowled,LOW);digitalWrite(redled,HIGH);digitalWrite(redped,LOW);digitalWrite(greenped,HIGH);delay(30000);digitalWrite(greenled,HIGH);delay(1000);digitalWrite(greenled,LOW);digitalWrite(greenled,HIGH);delay(1000);digitalWrite(greenled,LOW);digitalWrite(greenled,HIGH);delay(1000);digitalWrite(greenled,LOW);digitalWrite(buzzerPin,HIGH);}else{digitalWrite(greenled,HIGH);digitalWrite(redped,HIGH);}}步骤4:拓展实验连接电路,编写程实现以下功能:按键触发蜂鸣器发声,每次按下按键时,触发发出不同音调的声音。
源代码:
floattone_list[7]={261.6,293.7,329.6,349.2,392.0,440.0,493.9};longmusic_list[]={1,1,5,5,6,6,5,4,4,3,3,2,2,1,5,5,4,4,3,3,2,5,5,4,4,3,3,2,1,1,5,5,6,6,5,4,4,3,3,2,2,1};longhigh_list[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};floatrhythm_list[]={1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2};floatdur=500;voidplaymusic(){for(inti=(1);i