博舍

基于Arduino的红绿灯控制原理 – 八色木 基于arduino的智能路灯

基于Arduino的红绿灯控制原理 – 八色木

基于Arduino的红绿灯是一个很简单的项目,通过它有助于我们更加深入的了解Arduino的硬件连接,同时掌握如何使用Arduino制作一些简单的项目。

红绿灯项目需要的元件Arduino开发板;红色、黄色和绿色的LED;面包板;6个220欧姆电阻;按键开关;1个10K电阻;连接线若干。

这个项目支持几乎所有的Arduino开发板,关键在于需要使用多少接口。常见的Arduino开发板可查阅:Arduino主流开发板

红绿灯项目

让我们从最简单的红绿灯做起。单一的红绿灯电路如下:

连接方法很简单,将每个LED的正极(长脚)通过220欧姆电阻连接到Arduino的数字引脚8、9和10脚。将负极(短脚)连接到Arduino的地。

Arduino代码解析

我们从定义变量开始,用具体名称来配置每个灯的针脚。启动ArduinoIDE创建一个新的Arduino项目:

intred=10;intyellow=9;intgreen=8;

接下来,添加setup函数,在函数中配置红色、黄色和绿色led作为输出。由于前面已经创建了表示引脚编号的变量,现在可以通过灯的具体名称来直接引用引脚。

voidsetup(){pinMode(red,OUTPUT);pinMode(yellow,OUTPUT);pinMode(green,OUTPUT);}

现在是代码中相对困难的一部分,红绿灯的控制逻辑。需要创建一个独立的函数来控制灯光。下面是余下的代码:

voidloop(){changeLights();delay(15000);}voidchangeLights(){//greenoff,yellowonfor3secondsdigitalWrite(green,LOW);digitalWrite(yellow,HIGH);delay(3000);//turnoffyellow,thenturnredonfor5secondsdigitalWrite(yellow,LOW);digitalWrite(red,HIGH);delay(5000);//redandyellowonfor2seconds(redisalreadyonthough)digitalWrite(yellow,HIGH);delay(2000);//turnoffredandyellow,thenturnongreendigitalWrite(yellow,LOW);digitalWrite(red,LOW);digitalWrite(green,HIGH);delay(3000);}

现在,上传代码至控制板,(确保选择正确的Arduin0控制板型号和正确的端口号)。选择红绿灯应该可以正常工作了,它每15秒改变一次亮灯颜色。

人行道场景下的红绿灯

如果你已经成功实现了上面的基础版的红绿灯,现在我们可以进入相对复杂的红绿灯,即模拟现实场景。电路中增加一个按钮开关,让行人随时可以启动红绿灯。

红绿灯电路与前面的例子几乎完全相同。只是新增了按钮开关,并将它连接到Arduino的数字引脚12。你可能已经注意到按钮开关接有一个10k电阻,你知道为什么吗?这叫做下拉电阻。

下拉电阻的概念:在电路中,开关要么让电流通过,要么截断电流。我们知道在逻辑电路中,开关如何区分高电平或低电平状态(1或0)呢?也许大家可能误认为按钮开关如果没有被按下,它处于低电平状态,但实际上,如果没有按下按钮开关,它根本不存在电流,是悬空的。在这种悬空状态下,当它受电流干扰时,可能会出现错误的读数。不是很好理解,那么我们这样解释,当开关悬空时,它既不能提供可靠的高电平状态读数,也不能提供低电平状态读数。所以,引入下拉电阻,当开关关闭时,下拉电阻有少量电流流过,从而确保电路可以准确的获得低电平状态的读数。在其他项目的逻辑电路中,你可能会发现还有一个上拉电阻的概念,两者的原理是基本相同的,上来电阻的加入,也只是为了确保特定的逻辑电平为高电平状态。

下面,我们要修改代码的循环部分,将代码修改为读取按钮开关的状态,而不是每15秒改变灯的颜色。

首先在程序的开头添加一个新变量:

intbutton=12;//switchisonpin12

现在,在setup函数中,添加一个行,将开关设置为输入,同时设置绿灯为高电平。如果没有这个初始设置,直到函数运行到changeLights()前,灯都是关闭的。

pinMode(button,INPUT);digitalWrite(green,HIGH);

将整个循环函数改为:

voidloop(){if(digitalRead(button)==HIGH){delay(15);//softwaredebounceif(digitalRead(button)==HIGH){//iftheswitchisHIGH,ie.pusheddown-changethelights!changeLights();delay(15000);//waitfor15seconds}}}

基于Arduino UNO板的人体红外报警实验

一、设备

ArduinoUNO开发板,HC-SR501传感器,蜂鸣报警器

二、蜂鸣器工作原理

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

实物图片(正反面)

实物图片(自带接线端子)

VCC-----------3.3V-5V

I/O-----------开发板pin

GND-----------开发板GND

蜂鸣器工作原理图

 三、相关代码

#defineHWPin2//宏定义一个2号口引脚“Pin”#defineBuzzer3//定义蜂鸣器3号引脚voidAlarm()//蜂鸣器发出警报{for(inti=0;i

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇