目录

一、实验目的

二、实验设备与环境

三、实验重点

四、实验难点

五、实验内容

5.1实验任务

5.2实验原理

5.3实验内容

5.4实验结果

5.5思考题


一、实验目的

(1)熟悉掌握Arduino编程基本语法;

(2)熟悉按键、蜂鸣器的功能,掌握接口电路连接;

(3)熟悉选择语句、循环语句的功能,

(4)蜂鸣器发声的驱动程序编写,智能红绿灯控制程序编写

二、实验设备与环境

Arduino UNO套件、Arduino IDE、计算机、LED灯5个、220Ω电阻5个、1K电阻1个、杜邦线若干

三、实验重点

(1)按键、蜂鸣器功能; (2)分支语句;(3)蜂鸣器驱动程序、智能红绿灯控制程序

四、实验难点

(1)驱动程序、智能红绿灯控制程序

五、实验内容

5.1实验任务

任务描述:现代道路交通体系统,通过红绿灯控制系统实现路口人、车有序通行,通常有人行斑马线红绿灯、三叉路口红绿灯、十字路口红绿灯、智能红绿灯等。本实验通过编程实现斑马线手动红绿灯控制模拟场景,即在车行道绿灯、人行道显示红灯时,当行人需要过马路时,先按下通行按钮,车行道变黄灯延时一段时间后显示红灯,同时人行道绿灯亮起,当设定人行通过马路时间剩余很短时间时,人行绿灯闪烁,同时蜂鸣器声催促提醒,直至人行斑马线红灯亮起,车行道变回绿灯。

在实验中,通过按键启动人行交通灯系统,编程实现人行交通红绿灯变换。

5.2实验原理

1.按键

按键,也称为按钮,是一种轻触式开关,按键内部触点为常开,当按下时接通,松开时断开。

2.蜂鸣器

蜂鸣器是一种一体化结构的电子讯响器,广泛应用于计算机、打印机、定时器、电话、汽车、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

按其驱动方式的不同,分为无源蜂鸣器(外部驱动)和有源蜂鸣器(内部含驱动电路)。

(1)蜂鸣器发声原理

蜂鸣器是电流通过电磁线圈,产生的磁场来驱动振动膜发声。

无源他激型蜂鸣器发声原理:方波信号输入谐振装置转换为声音信号输出,无源他激型蜂鸣器的工作发声原理图如图:

Arduino是利用I/O 输出设定频率的翻转电平驱动波形对蜂鸣器进行驱动发声。

有源自激型蜂鸣器发声原理:直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号,有源自激型蜂鸣器的工作发声原理图如图:

(2)蜂鸣器发声驱动

//设定音调的蜂鸣器发声驱动int buzzer = 9;void setup(){pinMode(buzzer,OUTPUT);    // 定义引脚为输出模式}void loop(){// 发出一个 250Hz 的声音digitalWrite(buzzer,HIGH);delay(2);  // 延时 2ms digitalWrite(buzzer,LOW);delay(2);}

3.条件分支语句条件

分支语句是选择控制语句,通过当前条件判断选择执行后面的语句。

条件分支语句有三种基本结构:

(1)简单分支结构

if (表达式)

{语句;}

(2)双分支结构

if (表达式)

{语句块1;}

else

{语句块2;}

(3)多分支结构

if (表达式1)

{语句块1;}

else if (表达式2)

{语句块2;}

else if (表达式3)

{语句块3;}

else if (表达式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:编写源程序

Arduino IDE程序 :

const int green_ledPin = 6;
const int red_ledPin = 8;
const int buttonPin = 12;
void setup(){ pinMode(green_ledPin,OUTPUT); pinMode(red_ledPin,OUTPUT); pinMode(buttonPin,INPUT); Serial.begin(9600);
}
void loop(){int buttonValue = 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:编写源程序

Arduino IDE程序:

const int buzzerPin = 8;
const int buttonPin = 12;
void setup(){ pinMode(buzzerPin,OUTPUT); pinMode(buttonPin,INPUT); digitalWrite(buzzerPin,LOW); while (!digitalRead(buttonPin)){}      //等待按键按下
}
void loop() {    // 产生频率为500Hz的方波(声音)digitalWrite(buzzerPin,HIGH); delay(1); digitalWrite(buzzerPin,LOW);delay(1); digitalWrite(buzzerPin,HIGH); delay(2);digitalWrite(buzzerPin,LOW); delay(2);
}

Mixly程序:

步骤3:修改或编写源程序,实现驱动蜂鸣器发出几个不同音调的声音

源程序:

int redled=6;
int yellowled=5;
int greenled=4;
int redped=9;
int greenped=8;
int buttonled=11;
int buzzerPin=13;
void setup() {pinMode(redled,OUTPUT);pinMode(yellowled,OUTPUT);pinMode(greenled,OUTPUT);pinMode(redped,OUTPUT);pinMode(greenled,OUTPUT);pinMode(buttonled,OUTPUT);pinMode(buzzerPin,OUTPUT);Serial.begin(9600);
}
void loop() {int buttonValue=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:拓展实验连接电路,编写程实现以下功能:按键触发蜂鸣器发声,每次按下按键时,触发发出不同音调的声音。

源代码:

float tone_list[7]={261.6 , 293.7 , 329.6 , 349.2 , 392.0 , 440.0 , 493.9};long music_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};long high_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};float rhythm_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};float dur=500;void playmusic() {for (int i = (1); i <= (sizeof(music_list)/sizeof(music_list[0])); i = i + (1)) {tone(8,tone_list[(int)(music_list[(int)(i - 1)] - 1)] * pow(2, high_list[(int)(i - 1)]));delay((dur * rhythm_list[(int)(i - 1)]));noTone(8);delay(10);}
}
void setup(){pinMode(8, OUTPUT);
}
void loop(){playmusic();
}

3.人行横道红绿灯控制

步骤1:电路连接

步骤2:画程序流程图

人行横道智能红绿灯控制程序流程图:

步骤3:写程序源代码

const int Person_Red=9;
const int Person_Green=8;
const int Car_Red=6;
const int Car_Yellow=5;
const int Car_Green=4;
const int buttonPin=11;
const int buzzerPin=13;void setup() {pinMode(Person_Red,OUTPUT);pinMode(Person_Green,OUTPUT);pinMode(Car_Red,OUTPUT);pinMode(Car_Yellow,OUTPUT);pinMode(Car_Green,OUTPUT);pinMode(buttonPin,INPUT);pinMode(buzzerPin,OUTPUT);digitalWrite(Person_Red,HIGH);digitalWrite(Car_Green,HIGH);digitalWrite(buzzerPin,LOW);Serial.begin(9600);}void loop() {while(digitalRead(buttonPin)){   delay(500);digitalWrite(Car_Green,LOW);delay(1000);for(int i=0;i<3;i++){digitalWrite(Car_Yellow,HIGH);delay(1000);digitalWrite(Car_Yellow,LOW);delay(1000);}digitalWrite(Car_Red,HIGH);delay(1000);digitalWrite(Person_Green,HIGH);digitalWrite(Car_Green,LOW);digitalWrite(Person_Red,LOW);delay(5000);   for(int j=1000;j>0;j-=100){digitalWrite(Person_Green,LOW);delay(j);tone(buzzerPin,10);delay(40);noTone(buzzerPin);digitalWrite(Person_Green,HIGH);delay(j);}digitalWrite(Person_Green,LOW);delay(500);digitalWrite(Person_Red,HIGH);digitalWrite(Car_Red,LOW);for(int i=0;i<3;i++){digitalWrite(Car_Yellow,HIGH);delay(500);digitalWrite(Car_Yellow,LOW);delay(500);}digitalWrite(Car_Green,HIGH);digitalWrite(Car_Green,HIGH);}}

步骤4:程序检测与功能调试

5.4实验结果

结论:实验1的结果是不按按钮时是红色,按了按钮后是绿色;实验2的结果是蜂鸣器响,按了按钮后蜂鸣器不响;实验3的结果是改变代码使其出现不同的声音;实验4的结果是不按按键时亮行车道绿灯和人行道红灯,按下按键后行车道绿灯灭黄灯亮3秒后红灯亮,然后人行道红灯灭,人行道绿灯亮,一段时间后后绿灯闪烁然后蜂鸣器响。

反思:首先,通过本此实验我更加灵活地使用Arduino IDE软件,以及通过Arduino IDE软件来编译代码控制Arduino微控制板,编译所需要的源代码控制微控制板,也学习到更多源代码的基本函数。其次,我由这次实验熟悉地掌握了按键、蜂鸣器的功能,掌握接口电路连接,选择语句、循环语句的功能,蜂鸣器发声的驱动程序编写,智能红绿灯控制程序编写。最后,希望下次继续努力学习,再接再厉。

作品:

5.5思考题

1.上拉电阻和下拉电阻的作用是什么?

2.当引脚为数字输入时,如何避免引脚处于悬空状态?

3.编写程序时,选择结构语句有几种表示形式?

4.利用for循环,生成一个9*9乘法表

5.循环结构有哪几种表示形式?

6.思考编程实现三叉路口、十字路口的红绿灯的自动控制。

【Arduino实验03 智能红绿灯】相关推荐

  1. arduino智能浇花系统_基于Arduino单片机的智能浇花器

    Internal Combustion Engine & Parts • 119 • 基于Arduino单片机的智能淺花器 卞 云 松 ;张 国 祥 ;任 佳 豪 :陆晨雨 (江海职业技术学院 ...

  2. 《Arduino实验》实验二:DHT11温湿度传感器检测当前环境温湿度

    更完整.更全面的Arduino实验存放在我的github上,有需要的可以到github上查看和下载. 当然如果你觉得有帮助,给一个小小的star和fork就谢谢您了. gtihub网址:https:/ ...

  3. 利用DHT11和水位传感器监测温湿度和水位的arduino实验

    在这个arduino实验中,使用DHT11的温湿度传感器和水位传感器监测当前环境中的温度.湿度以及水位的变化情况,并将数值显示在串口监视器上. 首先,准备实验需要的器材: Arduino Uno DH ...

  4. 【Arduino实验】霍尔开关传感器例程

    [Arduino实验]霍尔开关传感器 本示例采用的是3144霍尔开关传感器模块 引脚说明 VCC:接电源正极3.3-5V GND:接电源负极 DO:模块数字信号输出,有磁感应是输出低电平 AO:霍尔实 ...

  5. 【Arduino实验02 LED流水灯】

    目录 一.实验目的 二.实验设备与环境 三.实验重点 四.实验难点 五.实验内容 5.1实验任务 5.2实验原理 5.3实验内容 5.4实验结果 5.5思考题 一.实验目的 1熟练掌握Arduino实 ...

  6. 智慧城市:智能红绿灯的现在与未来发展

    塞车对现代社会影响甚大,如降低工作和物流效率.减少收入.浪费时间与燃料.增加排放有害物质以及人们对政府的不满.以美国为例,根据CEBR的研究,每年塞车导致的燃料浪费和商贸活动营运成本增加的损失高达12 ...

  7. 多功能智慧杆如何实现智能红绿灯应用?

    多功能智慧杆的优势之一在于模块化的功能组合,能够根据场景需求自由搭载硬件外设,开发专项功能.比如在十字路口的多功能智慧杆,可以选择搭载AI摄像头.智能红绿灯.显示屏.环境传感器等设备,实现基于现场车况 ...

  8. 微机原理课程实验(十字路口红绿灯设计)

    微机原理课程实验(十字路口红绿灯设计) 软件:protuse 8.4 具体要求 设计实现交通信号灯系统.设A车道与B车道交叉组成十字路口,A是主道,B是支道,直接对车辆进行交通管理,基本要求如下: ( ...

  9. 基于arduino的光控窗帘_基于Arduino系统的智能窗帘设计与实现.doc

    摘要:跟随社会发展的潮流,现代科学技术正处于快速发展阶段,人们对智能家居的关注度也越来越高,人们开始寻求更加智能和舒适的生活及办公环境.智能遥控属于电子与信息工程的一个重要分支,在现代智能家居中有着良 ...

  10. 吉林大学超星慕课平台——高级语言程序设计 实验03 模块化程序设计(2022级)

    实验03 模块化程序设计(2022级) 一. 单选题(共1题,16.6分) 1. (单选题)有函数定义:int f(int x,int y):则下列函数调用正确的为(    ) A.int n; n= ...

最新文章

  1. 威纶通宏开机后使用初始化宏指令_【操作系统】我们按下电脑开机键的背后发生了什么?...
  2. 屏显有啥硬科技可卷?让现在电视厂商这么拼
  3. PhpStorm 超强语言模板的支持
  4. CentOS 6.0 xdmcp 配置
  5. 两个整数集合的交集 ———— 腾讯2014软件开发笔试题目
  6. 程序员Mac常用软件之效率工具
  7. 解除工作压力的四大疗法
  8. 机虚拟磁盘附加到计算机上,Hyper-V 怎样拷贝文件至虚拟硬盘并附加到虚拟机上...
  9. android 蓝牙连接苹果手机号码,苹果与android蓝牙连接怎么实现
  10. Vue路由导航报错:NavigationDuplicated: Avoided redundant navigation to current location解决方法
  11. Jmeter 压力测试 - Http2.0工具支持-【教学篇】
  12. 【ACM】算法竞赛及OJ题面常用英文单词整理(更新ing)
  13. 【PC自动化测试-11】窗口控件的类型分类
  14. 文献分析工具Connected Papers
  15. 《视觉SLAM进阶:从零开始手写VIO》第三讲 基于优化的IMU预积分与视觉信息融合 作业
  16. python爬取股票图_python 股票数据爬取(两种方法)
  17. 一招教你如何搜索国内各大网盘资源
  18. 推荐 :手把手教你用Python进行Web抓取(附代码)
  19. 中国气象局陆面数据同化系统CLDAS-V2.0数据
  20. dell服务器的性能计数器驱动,Dell PowerEdge:更新服务器固件以获得最佳性能

热门文章

  1. 禁忌搜索算法(现代优化计算方法)
  2. OLAP工具在企业决策支持系统中的应用
  3. 学生信息管理系统总体设计规划书
  4. oracle误删除数据之后的恢复方法
  5. java和weboffice集成_金格插件WebOffice2015使用体会
  6. oracle多表查询员工和上级,oracle多表查询之经典面试题
  7. Servlet/JSP学习笔记(3)-Lomboz介绍+安装方法
  8. Untiy3D - 3 打飞碟小游戏
  9. 大学新颖的软件测试毕业论文题目50例
  10. 测井曲线绘图显示算法总结——双缓冲技术