效果:摄像头捕获室内图像,将视频实时通过串口通讯传递给改进之后的YOLOv5神经网络进行火焰识别,若5s内连续检测到有火焰,警报灯变红,进入危险状态。5s之内未连续出现火焰,警报灯变绿,进入安全状态
一、PyCharm和Arduino进行串口通信调试
这里以双色LED灯为例子,PyCharm进行串口通信控制LED灯2s之后变红,延迟30ms之后再变绿
所需材料:
双色LED灯
Arduino UNO R3核心板
PyCharm编译器
arduino编译器
二、Arduino代码
Arduino | LED灯 |
---|---|
P10 | R灯 |
P11 | G灯 |
GND | GND |
/***************************************************
Dual-color LED Arduin Uno R3
R 11
GND GND
G 10
****************************************************/
int redPin = 11; // select the pin for the red LED
int greenPin = 10; // select the pin for the green LED
char var;
void setup()
{
pinMode(redPin, OUTPUT); //set redPin as OUTPUT
pinMode(greenPin, OUTPUT);//set greenPin as OUTPUT
digitalWrite(redPin,LOW);
digitalWrite(greenPin,HIGH);
Serial.begin(9600);
}
void loop()
{
while(Serial.available()>0)//当有信号的时候
{
var=Serial.read();
if(var=='0')//传过来的是0
{
digitalWrite(redPin, HIGH);//red灯亮
digitalWrite(greenPin, LOW);//green灯灭
delay(3000); //delay 30ms
}
if(var=='1')//传过来的是1
{
digitalWrite(redPin, LOW);//red灯灭
digitalWrite(greenPin, HIGH);//green灯亮
delay(30); //delay 30ms
}
}
}
三、Python代码
s.enter(2, 0, func)
2
表示延迟2s之后执行func函数,0
表示优先级
func
函数会发送0给Arduino,Arduino收到串口发送指令之后红灯亮,表示有火焰
延迟多少秒以及优先权级别可根据实际情况需要来设定
import serial.tools.list_ports
import time
import sched
fire=b"0"#将0转换为ASCII码方便发送
notfire=b"1"#将1转换为ASCII码方便发送
def func():
serialFd.write(fire)
def func1():
serialFd.write(notfire)
plist = list(serial.tools.list_ports.comports())
if len(plist) <= 0:
print("没有发现端口!")
else:
plist_0 = list(plist[0])
serialName = plist_0[0]
serialFd = serial.Serial(serialName, 9600, timeout=60)
print("可用端口名>>>", serialFd.name)
s = sched.scheduler(time.time, time.sleep)
s.enter(2, 0, func)
s.enter(5, 1, func1)
s.run()
四、融合注意力机制的YOLOv5火焰识别模型
有点事,先发表下,回来接着写 未完待续。。。