0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Arduino交通灯控制器项目教程

454398 来源:网络整理 作者:网络整理 2019-12-03 16:26 次阅读

Arduino红绿灯是一个有趣的小项目,您可以在一个小时内完成构建。这是使用Arduino构建自己的方法,以及如何更改电路以实现高级变体。

如果您希望将其作为视频教程观看,我们将向您介绍:

构建Arduino交通灯控制器所需的条件

除了基本的Arduino,还需要:

1个10k欧姆电阻器

1个按钮开关

6个220欧姆电阻

一块面包板

连接导线

红色,黄色和绿色LEDs

只要有足够的引脚,几乎任何Arduino都可以用于该项目。如果不确定所需的型号,请确保阅读我们的Arduino购买指南。您可能已经在Arduino入门套件中包含了这些零件。

Arduino交通灯:基础知识

让我们从小处入手。一个基本的单一交通信号灯是一个不错的起点。这是电路:

Arduino交通灯控制器项目教程

将每个LED的阳极(长脚)连接到数字引脚8、9和10(通过220欧姆电阻器) )。将阴极(短腿)连接到Arduino的地面。

Arduino交通灯的代码

首先定义变量,以便您可以通过名称而不是数字来寻址灯。开始一个新的Arduino项目,并从以下几行开始:

int red = 10;

int yellow = 9;

int green = 8;

接下来,让我们添加设置功能,在其中将红色,黄色和绿色LED配置为输出。由于您已经创建了表示引脚号的变量,因此现在可以按名称引用引脚了:

void setup(){

pinMode(red, OUTPUT);

pinMode(yellow, OUTPUT);

pinMode(green, OUTPUT);

}

pinMode 函数可配置Arduino使用给定的引脚作为输出。您必须这样做才能使LED完全正常工作。现在了解交通信号灯的实际逻辑。这是您需要的代码。在您的变量定义和设置函数下面添加此代码:

void loop(){

changeLights();

delay(15000);

}

void changeLights(){

// green off, yellow on for 3 seconds

digitalWrite(green, LOW);

digitalWrite(yellow, HIGH);

delay(3000);

// turn off yellow, then turn red on for 5 seconds

digitalWrite(yellow, LOW);

digitalWrite(red, HIGH);

delay(5000);

// red and yellow on for 2 seconds (red is already on though)

digitalWrite(yellow, HIGH);

delay(2000);

// turn off red and yellow, then turn on green

digitalWrite(yellow, LOW);

digitalWrite(red, LOW);

digitalWrite(green, HIGH);

delay(3000);

}

将此代码上传到Arduino,然后运行(确保从选择正确的板卡和端口工具》 面板和工具》 端口菜单)。您应该有一个每15秒更改一次的工作红绿灯,如下所示(加快):

让我们分解一下此代码。 changeLights 功能执行所有艰苦的工作。这样会将交通信号灯旋转通过黄色和红色,然后又变回绿色。当在 loop 函数内部调用该代码时,Arduino将永久运行该代码,每次暂停15秒。

changeLights 函数由四个不同的步骤组成:

绿色点亮,黄色熄灭

黄色熄灭,红色点亮

黄色点亮,红色点亮

绿色点亮,红色熄灭,黄色熄灭

这四个步骤复制了实际交通信号灯中使用的过程。对于每个步骤,代码都非常相似。使用 digitalWrite 可以打开或关闭相应的LED。这是一个Arduino函数,用于将输出引脚设置为HIGH(高)(打开)或LOW(低)(关闭)。

启用或禁用所需的LED后,延迟使Arduino等待给定的时间。在这种情况下,需要三秒钟。

更深入:Arduino人行横道

现在您已经了解了基础知识,请对其进行改进。添加一个按钮,方便行人在需要时改变灯光:

注意交通信号灯与上一个示例完全相同。将按钮连接到数字引脚12。您会注意到该开关上连接了一个高阻10k欧姆电阻,您可能想知道为什么。这是一个下拉电阻。

一个开关允许电流流过或不让电流流过。这似乎很简单,但是在逻辑电路中,电流应始终以高或低状态(请记住,1或0,HIGH或LOW)流动。您可能会假设没有被真正按下的按钮开关处于LOW状态,但实际上,它被称为“浮动”状态,因为根本没有消耗电流。

在这种浮动状态状态下,由于电干扰而波动时,可能会出现错误的读数。换句话说,浮动开关既不能提供可靠的HIGH读数,也不能提供LOW读数。下拉电阻器在开关闭合时保持少量电流流动,从而确保了准确的低态读数。

在其他逻辑电路中,您可能会找到一个上拉电阻器,而这

现在,在代码的循环部分中,而不是每隔15秒更改一次灯,您将按照相同的原理工作,但要相反,请确保特定的逻辑门默认为高。而是改为读取按钮开关的状态,并且仅在激活时更改灯光。

Arduino人行横道代码

首先添加一个新变量来存储按钮销:

int button = 12; // switch is on pin 12

现在,在设置功能中,添加新行以将开关声明为输入。添加一行以将交通灯设置为绿色舞台。如果没有此初始设置,它们将关闭,直到第一次 changeLights 运行。

pinMode(button, INPUT);

digitalWrite(green, HIGH);

将整个循环功能改为以下内容:

void loop() {

if (digitalRead(button) == HIGH){

delay(15); // software debounce

if (digitalRead(button) == HIGH) {

// if the switch is HIGH, ie. pushed down - change the lights!

changeLights();

delay(15000); // wait for 15 seconds

}

}

}

应该这样做。您可能想知道为什么按钮检查会发生两次( digitalRead(button)),并间隔一小段时间。这在反跳。就像按钮的下拉电阻一样,这种简单的检查可以停止代码以检测按下按钮时是否受到干扰。

在 if 语句中等待15秒钟,红绿灯至少在这段时间内不能改变。 15秒后,循环将重新启动。每次循环重新启动时,它都会再次读取按钮的状态,但是如果不按下按钮, if 语句将永远不会激活,指示灯也不会改变,并且程序会再次重新启动。

这是它的外观(加速):

带结的Arduino交通灯

让我们尝试更高级的模型。代替人行横道,将电路更改为具有两个交通信号灯:

将第二个交通信号灯连接到数字引脚11、12和13。

带有连接点的Arduino交通灯的代码

首先,将新的交通灯引脚分配给变量,并将其配置为输出,如第一个示例所示:

// light one

int red1 = 10;

int yellow1 = 9;

int green1 = 8;

// light two

int red2 = 13;

int yellow2 = 12;

int green2 = 11;

void setup(){

// light one

pinMode(red1, OUTPUT);

pinMode(yellow1, OUTPUT);

pinMode(green1, OUTPUT);

// light two

pinMode(red2, OUTPUT);

pinMode(yellow2, OUTPUT);

pinMode(green2, OUTPUT);

}

现在,更新循环以使用第一个示例中的代码(而不是人行横道):

void loop(){

changeLights();

delay(15000);

}

再次,所有工作都在 changeLights 功能中进行。该代码不会代替红色》 红色和黄色》 绿色,而是替换交通信号灯。当一个为绿色时,另一个为红色。这是代码:

void changeLights(){

// turn both yellows on

digitalWrite(green1, LOW);

digitalWrite(yellow1, HIGH);

digitalWrite(yellow2, HIGH);

delay(5000);

// turn both yellows off, and opposite green and red

digitalWrite(yellow1, LOW);

digitalWrite(red1, HIGH);

digitalWrite(yellow2, LOW);

digitalWrite(red2, LOW);

digitalWrite(green2, HIGH);

delay(5000);

// both yellows on again

digitalWrite(yellow1, HIGH);

digitalWrite(yellow2, HIGH);

digitalWrite(green2, LOW);

delay(3000);

// turn both yellows off, and opposite green and red

digitalWrite(green1, HIGH);

digitalWrite(yellow1, LOW);

digitalWrite(red1, LOW);

digitalWrite(yellow2, LOW);

digitalWrite(red2, HIGH);

delay(5000);

}

这是(加速)外观:

Arduino红绿灯的后续步骤

今天就这些。您对Arduino LED和按钮的新了解适用于各种不同的项目。如果您想扩展这些交通信号灯,为什么不建一个四通(或更多)路口,并配备许多行人过路处和行人交通信号灯呢?

还是为什么不通过更大的扩展您的新技能DIY MIDI控制器或带有Xod的Arduino机器人之类的项目?您也可以看看使用VS Code和PlatformIO的Arduino编码。

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 交通灯
    +关注

    关注

    13

    文章

    318

    浏览量

    39435
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184826
收藏 人收藏

    评论

    相关推荐

    干货!89C51单片机模拟交通灯控制,原理图,仿真程序等完整资料

    设计要求 (1)利用51单片机设计一个交通灯控制系统,来实现行人与车流的分流的目的。该系统主要应用在十字路口,纵向为主干道,横向为支干道; (2)主、支干道交替通行,两个干道上的交通灯工作方式同时
    发表于 03-14 18:23

    单片机交通灯程序设计中断系统

    交通灯智能控制的关键。 单片机交通灯的基本原理 交通灯控制系统的基本原理是利用红、绿、黄三种颜色的灯光的闪烁组合通过向车辆和行人传递不同的指
    的头像 发表于 01-24 16:16 318次阅读

    基于51单片机的交通灯设计

    电子发烧友网站提供《基于51单片机的交通灯设计.rar》资料免费下载
    发表于 01-12 10:40 0次下载

    基于51单片机的交通灯设计

    电子发烧友网站提供《基于51单片机的交通灯设计.rar》资料免费下载
    发表于 01-12 10:30 0次下载

    基于51单片机的交通灯设计

    电子发烧友网站提供《基于51单片机的交通灯设计.rar》资料免费下载
    发表于 01-07 09:41 9次下载

    基于51单片机的交通灯设计报告

    电子发烧友网站提供《基于51单片机的交通灯设计报告.rar》资料免费下载
    发表于 01-05 10:50 2次下载

    51单片机的交通灯延时问题怎么解决?

    关于51单片机的交通灯延时问题怎么解决?
    发表于 10-17 06:33

    基于ARM9交通灯控制系统的设计

    电子发烧友网站提供《基于ARM9交通灯控制系统的设计.pdf》资料免费下载
    发表于 10-12 09:51 0次下载
    基于ARM9<b class='flag-5'>交通灯</b><b class='flag-5'>控制</b>系统的设计

    嵌入式交通灯设计

    电子发烧友网站提供《嵌入式交通灯设计.doc》资料免费下载
    发表于 10-12 09:35 1次下载
    嵌入式<b class='flag-5'>交通灯</b>设计

    基于单片机的十字路口交通灯控制器设计

    单片机的十字路口交通灯控制器的设计
    发表于 09-20 08:25

    使用树莓派Pico实现交通灯控制程序

    控制器(MCU)几乎存在于你日常使用的所有电子产品中,例如交通灯交通灯控制器的作用下,控制器确保整个
    的头像 发表于 08-17 10:11 1192次阅读
    使用树莓派Pico实现<b class='flag-5'>交通灯</b><b class='flag-5'>控制</b>程序

    具有7段显示的基于Atmega16的交通灯项目

    电子发烧友网站提供《具有7段显示的基于Atmega16的交通灯项目.zip》资料免费下载
    发表于 07-06 10:47 1次下载
    具有7段显示的基于Atmega16的<b class='flag-5'>交通灯</b><b class='flag-5'>项目</b>

    用微语音控制交通灯

    电子发烧友网站提供《用微语音控制交通灯.zip》资料免费下载
    发表于 06-27 09:14 0次下载
    用微语音<b class='flag-5'>控制</b><b class='flag-5'>交通灯</b>

    使用7段显示器的交通灯

    电子发烧友网站提供《使用7段显示器的交通灯.zip》资料免费下载
    发表于 06-25 14:40 0次下载
    使用7段显示器的<b class='flag-5'>交通灯</b>

    智能交通灯开源分享

    电子发烧友网站提供《智能交通灯开源分享.zip》资料免费下载
    发表于 06-20 11:13 0次下载
    智能<b class='flag-5'>交通灯</b>开源分享