【Arduino实验03 智能红绿灯】

目录

一、实验目的

二、实验设备与环境

三、实验重点

四、实验难点

五、实验内容

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.思考编程实现三叉路口、十字路口的红绿灯的自动控制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/252087.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

turtle绘制红绿灯,实现灯闪烁效果

画出边框 首先导入库&#xff0c;并且画出边框&#xff0c;画完之后可以选择隐藏海龟&#xff0c;如果不隐藏你的红绿灯中间会出现画笔&#xff0c;像这样 import turtle import timeturtle.width(20)#线的粗细 for i in range(2):#画出边框turtle.left(90)turtle.fd(300)tu…

如何添加打印机到电脑

首先你要知道打印机的ip 可以先打印测试页 找到控制面板——点击设备与打印机 左上角选择添加打印机 选择 我所需的打印机未列出 点击add aprinter usinga … 然后下一页 输入你的打印机的ip地址 和端口号 点击下一步

共享打印机连接方法

点击开始-运行&#xff08;快捷键&#xff1a;开始键R&#xff09;&#xff0c;键入连接共享的打印机的电脑网络IP地址&#xff0c;如\\192.168.1.250, 点击确定&#xff0c;就可以查看到共享的打印机及文件夹啦。选择要添加的共享打印机&#xff0c;双击&#xff0c;就会自动添…

计算机无法打印图片,电脑中打印机可以打印文档却无法打印图片如何解决

我们在使用电脑过程中&#xff0c;很容易会碰到一些问题&#xff0c;遇到问题时也只能耐心寻找原因进行解决。比如&#xff0c;现在&#xff0c;有位用户反馈自己的电脑中打印机可以打印文档却无法打印图片&#xff0c;这该怎么办呢&#xff1f;接下来&#xff0c;就随系统城小…

计算机图桌面打印出来,桌面图片打印设置方法

以电脑Windows7系统为例&#xff0c;打印桌面图片的具体步骤是&#xff1a; 1、在电脑桌面上打开需要打印的图片。 2、点击图片上方的打印图标。 3、设置好打印参数后&#xff0c;点击【打印】按钮即可。 打印通常指把电脑或其他电子设备中的文字或图片等可见数据&#xff0c;通…

如何批量打印jpg图片

图片打印在标签制作中的应用也很广泛&#xff0c;因为现在很多用户在制作标签时会添加相对应的图片&#xff0c;这里所需的图片数量会很多&#xff0c;如果将图片逐个导入标签内进行打印&#xff0c;费力还容易出错。这时只需将图片放在一个文件夹里&#xff0c;通过条码软件生…

win11自带的照片查看器无法打印问题解决

参考文章&#xff1a;https://blog.csdn.net/weixin_39589644/article/details/112708068 文章目录 问题解决方法 问题 win11自带的照片查看器无法打印。其它查看图片的应用&#xff0c;都可以正常用打印机打印。唯独win11自带的查看照片的应用&#xff0c;按了打印键以后打印…

epson喷墨一体机打印照片偏色的调整

本文经验针对普通用户。 打印机 有一台EPSON L365系列墨仓式打印一体机&#xff0c;使用状况良好。该款打印机定位于家用&#xff0c;墨仓式设计降低了打印成本。功能齐全&#xff0c;支持Wi-Fi无线打印&#xff0c;支持复印&#xff0c;扫描。支持从手机/IPAD移动设备APP打印照…

Ipad使用技巧之——打印机

一 概述 有iPad使用需求的人可能会使用iPad进行打印照片或文档&#xff0c;对于首次进行打印的人可能会有几个疑问&#xff1a; iPad自身是否提供打印功能打印机提供商是否提供对应的软件支持(appstore商店是否有对应应用) 二 硬件支持 iPad pro2021款佳能G3800 三 iPad打印…

比手机还小的打印机?极印·立可印N1潮玩口袋照片打印机评测体验

在移动互联网高度普及的今天&#xff0c;智能手机早已成为了许多人每天不可或缺的随身伴侣。究其原因&#xff0c;无非是智能手机既轻巧便携又功能强大&#xff0c;我们日常工作和生活中的许多事情&#xff0c;都可以通过手机上的各种APP应用轻松搞定。 那么亲爱的读者朋友们是…

vue-router使用

router中 hash模式和 history 的区别&#xff1a; 不同的路由&#xff0c;&#xff0c;哈希值会被修改&#xff0c;但是不会向服务器发送新的请求&#xff0c;&#xff0c;VueRouter会监听 url中哈希值变化去匹配组件 hash模式优点&#xff1a; 兼容性好简单配置&#xff0c;…

简单了解固态硬盘(SSD)

简单了解SSD SSD VS HDD机械硬盘HDD固态硬盘SSD SSD的“解剖图”——系统框架图SSD的“基石”——存储介质闪存器件闪存芯片架构三维闪存闪存存在的问题 SSD的“大脑”——FTL映射管理垃圾回收修剪Trim坏块管理掉电恢复磨损平衡 SSD的“荣誉”——参数指标 SSD VS HDD 机械硬盘…

编程示例:求排列的逆,反序表,以及从反序表计算排列

编程示例&#xff1a;求排列的逆&#xff0c;反序表&#xff0c;以及从反序表计算排列 计算机程序设计艺术的第三卷 第五章排序中&#xff0c;第5.1.1节中 提到了排列的反序&#xff0c;反序表&#xff0c;逆的概念。 首先&#xff0c;简单地介绍一下这两个概念。例如一个排列…

JS实现计时器/秒表功能

系统学习JS时的一个小练习 直接上代码吧&#xff0c;注释写得还算详细&#xff0c;就不赘述了&#xff0c;很简单的一个练习。 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv"X-UA-C…

JavaScript 计时器

1.在JavaScript中&#xff0c;我们可以在设定的时间间隔之后来执行代码&#xff0c;而不是在函数被调用后立即执行。 2&#xff0e;计时器类型&#xff1a; &#xff08;1&#xff09;一次性计时器&#xff1a;仅在指定的延迟时间之后触发一次。 &#xff08;2&#xff09;间…

window遇到 stopcode: 0xc000021a 无法启动的问题解决

今天朋友电脑window10遇到以上问题&#xff1a;stopcode: 0xc000021a 无法自动修复和启动的问题。 解决办法如下&#xff1a; 第一步、进入dos命令行 点击其他选项&#xff08;Advanced options&#xff09; 点击工具 第二步、确定系统盘 进入dos之后 输入一下命令 回车…

vivo Y55s 评测

vivo Y55s正面配备了一块6.58英寸水滴屏&#xff0c;2408*1080分辨率&#xff0c;支持DCI-P3广色域以及防蓝光护眼模式等&#xff0c;同时vivo Y55s是Y系列首款支持夜读模式的产品&#xff0c;亮度最低可至1nit&#xff0c;暗光和夜晚使用对眼睛更舒服&#xff0c;屏幕阅读更柔…

步步高S5救砖

笔者是个学(chun)生(fei)党(wu)&#xff0c;由于被家长的限制&#xff0c;至今未有过手机&#xff0c;前几个月&#xff0c;我盯上了我的步步高S5&#xff0c;从此它承受了它这个机型不该承受的事。 自从给它刷了三方recovery&#xff0c;我总是保(zhe)养(teng)它&#xff0c;…

vivoy67android系统升级,vivo Y67刷机教程_vivo Y67升级更新官方系统包

上一节已经给大家说了咱们的vivo Y67手机的官方rom包如何下载了&#xff0c;下载下来之后要干什么呢&#xff0c;那就是进行刷机了&#xff0c;为了方便大家操作&#xff0c;所以在这里整理了一个详细的刷机教程供大家参考了&#xff0c;这个刷机教程也可以叫做升级教程&#x…