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

Arduino控制智能红绿灯的Github项目是一个开源的项目,意味着任何人都可以自由地使用、复制、修改和分发该项目的代码。该项目的目的是利用Arduino控制器,实现对红绿灯智能控制红绿灯是交通系统中的重要组成部分,它的控制能够对交通流量起到关键作用。传统的红绿灯采用固定时序来控制交通,但在实际情况下,交通流量的变化是动态的,因此需要一种智能控制方式来优化交通流量。 该Github项目中的代码包含了Arduino的程序,可以通过硬件接口连接到红绿灯控制电路上。通过使用传感器来获取交通流量的信息,Arduino能够根据实时情况智能控制红绿灯的状态和时长。 该项目的代码中可能会包含以下功能: 1. 交通流量传感器:用于检测车辆和行人的数量,以实时获取交通流量信息。 2. 控制算法:根据交通流量的变化,Arduino可以自动调整红绿灯的时长和相位,以使交通流畅。 3. 车辆检测:通过车辆检测传感器,Arduino可以判断是否有车辆在交通信号灯的停车线前等待,从而及时调整信号灯状态。 通过该项目,用户可以根据自己所在的交通环境进行适当的修改和优化,以满足实际交通需求。此外,Github项目还提供了许多用户贡献的改进,可以充分利用这些改进来提高系统的稳定性和性能。 总之,Arduino控制智能红绿灯的Github项目通过利用开源的硬件和软件平台,为交通系统提供了一种智能、灵活和可定制的红绿灯控制方案。用户可以根据自己的需求进行修改和优化,并且可以共享和参与改进,进一步提高交通系统的效率和安全性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张小花-Soleil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值