Arduino实现智能交通信号灯(软串口、压力传感器hx711、光敏、人体红外、led等)

该博客介绍了如何使用Arduino通过软串口通信,结合hx711压力传感器、光敏传感器和人体红外传感器实现智能交通信号灯的控制系统。详细探讨了传感器的配置文件、代码实现以及硬件接线方案。
摘要由CSDN通过智能技术生成

Senor文件:

/*
 * @Author: hzf
 * @Date: 2019-12-22 18:57:43
 */
#include<HX711.h>
#include<Servo.h>
#include <SoftwareSerial.h>
/*思路设计
 * 三色红绿灯模拟红绿灯,每隔一段时间改变红绿灯状态
 * 检测单位时间人的数量与车的数量,车流量大于人流量时,人对应的红绿灯时长加长,反之亦然,时间显示在数码管上
 * 光线暗的时候开灯,反之开灯
 * 舵机旋转打开人行道
 * 设定老年人按钮,延长人性绿灯时间
 * 蜂鸣器警告红灯状态,禁止通行
 * 
 */
SoftwareSerial mySerial(0, 1);   //RX, TX
 int num_per=0;//定义统计十秒内人流计数器
 int num_per_all=0;//定义人流总数量
 int num_car=0;//定义十秒内车流计数器
 int num_car_all=0;//定义车流总数量
 int tim_start=0;//定义初始时间
 int weight=0;
 int Carspeed=0;//定义车速
 bool isCar=0;//车的标志位
 bool isPer=0;//人的标志位
 int time_start=0;
 int time_end=0;
 int flag=0;//判断是否位车
 int RGB_P_start=0;//人行道红绿灯闪烁开始
// int RGB_P_end=0;//人行道红绿灯闪烁结束
 int RGB_C_start=0;//车行道红绿灯闪烁开始
 //int RGB_C_end=0;//车行道红绿灯闪烁结束
 int Per_Flow_start=0;//人流量统计开始
 int Car_Flow_start=0;//车流量统计开始
 int num_per_flow=0;//人流量
 int num_car_flow=0;//车流量
 int max_time=0;//红绿灯最大闪烁时间,车人分离时五秒/车人同时十秒

 void RGB_ON(int pin)//点亮RGB
{
  digitalWrite(pin, HIGH);
}
void RGB_OFF(int pin)//熄灭RGB
{
  digitalWrite(pin, LOW);
}

//统计十秒钟内的人流量
void GetFlow_Per()
{
  Serial.println("统计十秒内的车流量");
  isPer = digitalRead(A0);//检测到有人
  if(isPer)
  {
    num_per ++;
    num_per_all++;//总人流量
    Serial.print("当前十秒内经过的人数有");
    Serial.println(num_per);
    Serial.print("经过的总人数有");
    Serial.println(num_per_all);
  }
  
  if(num_per == 1)//首次检测到有人时
  {
     Per_Flow_start = millis();//开始计时
  }
  if(millis()-Per_Flow_start >= 10000)//十秒钟统计一次人流量
  {
    num_per_flow = num
好的,基于ArduinoHX711压力传感器的压力实现可以通过以下步骤实现: 1. 首先,将HX711传感器连接到Arduino板上。HX711传感器有四个引脚,分别是DT、SCK、VCC和GND。将DT引脚连接到Arduino板上的数字引脚,SCK引脚连接到数字引脚,VCC引脚连接到5V电源,GND引脚连接到GND。 2. 接下来,将压力传感器连接到HX711传感器上。压力传感器通常有三个引脚,分别是VCC、GND和SIGNAL。将VCC引脚连接到HX711传感器的E+引脚,GND引脚连接到E-引脚,SIGNAL引脚连接到HX711传感器的A-引脚。 3. 然后,在Arduino IDE中编写代码。首先,需要使用HX711库来读取传感器的值。然后,需要将读取到的值转换为实际的压力值。这可以通过校准传感器来实现。在校准过程中,需要将已知的重量放在传感器上,并记录读取到的值。然后,可以使用这些值来计算出实际的压力值。 以下是一个简单的代码示例: ```c++ #include "HX711.h" HX711 scale(DT, SCK); void setup() { Serial.begin(9600); scale.set_scale(2280.0); // 设置校准值,需要根据具体传感器进行调整 scale.tare(); // 设置当前重量为0 } void loop() { float weight = scale.get_units(); // 读取当前重量 float pressure = weight / 10.0; // 将重量转换为压力 Serial.print("Pressure: "); Serial.print(pressure); Serial.println(" kPa"); delay(1000); } ``` 在这个示例中,假设校准值为2280.0,即传感器读取到的值除以2280.0得到实际的重量值。然后,将重量值除以10.0得到压力值,因为假设传感器的量程为0-10kPa。最后,将压力值输出到串口监视器中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值