基于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