效果:摄像头捕获室内图像,将视频实时通过串口通讯传递给改进之后的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 LEDchar var; void setup()
{pinMode(redPin, OUTPUT); //set redPin as OUTPUTpinMode(greenPin, OUTPUT);//set greenPin as OUTPUTdigitalWrite(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收到串口发送指令之后红灯亮,表示有火焰
延迟多少秒以及优先权级别可根据实际情况需要来设定
func1
函数会发送1给Arduino,Arduino收到串口发送指令之后绿灯亮
s.enter(2, 0, func)
2s后调用func函数,发送0,红灯亮,优先级为0
s.enter(5, 1, func1)
5s后调用func1函数,发送1,绿灯亮,优先级为1
最终的效果为:2s后红灯亮、5s后绿灯亮
import serial.tools.list_ports
import time
import schedfire=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火焰识别模型
通过串口延时发送指令控制arduino基本原理了解之后
YOLOv5火焰识别模型中,检测到火焰的时候就调用一下,发送指令给arduino即可