硬件平台:01stuino-pyai-k210 ;arduino mega2560开发板; arduino拓展板(实验室老师焊的)
环境:Maix_py ide; arduino ide
k210代码
#识别蓝色色块,像素低于600过滤掉
#当在中心位置检测到蓝色色块时,向arduino发送字符”b",arduino执行抓取函数。
import sensor,lcd,time,utime
from machine import UART
from fpioa_manager import fm
#映射串口引脚并初始化 6-RX,7-TX
fm.register(6, fm.fpioa.UART1_RX, force=True)
fm.register(7, fm.fpioa.UART1_TX, force=True)
uart = UART(UART.UART1,115200, read_buf_len=4096)
#摄像头初始化
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(1)
#lcd 初始化
lcd.init()
#创建一个时钟
clock=time.clock()
#颜色识别阈值(L Min,L Max,A Min,A Max,B Min,B Max)
thresholds=[(30,100,15 ,127,15 ,127),#红色阈值
(30,100,-64,-8 ,-32 ,32),#绿色阈值
(0 ,40 ,0 ,20,-70,-20)]#蓝色阈值
while True:
img=sensor.snapshot()
blobs=img.find_blobs([thresholds[1]],pixels_threshold=600)
if blobs:
tmp=img.draw_rectangle(blobs[0][0:4])
tmp=img.draw_cross(blobs[0].cx(),blobs[0].cy())
#画框描边,在中心画十字
lcd.display(img)
#显示
if blobs[0].cx()>110://超过中心位置 中心位置坐标 blobs[0].cx ==120(110-130)
uart.write('B')
print('b')
utime.sleep_ms(100)
arduino代码
#include<Servo.h>
Servo servo;
void setup()
{
Serial1.begin(115200);
Serial.begin(115200);
servo.attach(7);
}
void loop()
{
while(Serial1.available())
{
Serial.print(Serial1.read());
if(Serial1.read()=='B')
{
Serial.print('b');
capture();
break;
}
}
}
void capture()
{
servo.write(0);
delay(1000);
servo.write(180);
delay(1000);
}
注意事项
1.mega板的0 1口已经和电脑串口通信,所以应该使用其他串口进行通信。由于实验室老师提前写好库了,所以我直接调用了(Serial1.那里)
2.k210和arduino要共地