Raspberry pi 4 通过机器人汽车的 USB 串口连接到 arduino
Raspberry pi 4 to arduino via usb Serial for robot car
我正在尝试使用带摄像头、Arduino 和 l298n 电机驱动器的 Raspberry Pi 对巡线车进行编码。我正在尝试让 Raspberry Pi 使用 USB 串口与 Arduino 通信,但我有点挣扎。
这是我为 Arduino 准备的代码:
#define leftEnable 6 // EnA
#define leftReverse 8 // IN1
#define leftForward 9 // IN2
#define rightEnable 5 //EnB
#define rightReverse 11 //IN4
#define rightForward 10 //IN3
void setup() { // put your setup code here, to run once:
pinMode(leftEnable, OUTPUT);
pinMode(rightEnable, OUTPUT);
pinMode(leftReverse, OUTPUT);
pinMode(rightReverse, OUTPUT);
pinMode(leftForward, OUTPUT);
pinMode(rightForward, OUTPUT);
// Configure for forward direction only
digitalWrite(leftReverse, LOW);
digitalWrite(rightReverse, LOW);
digitalWrite(leftForward, HIGH);
digitalWrite(rightForward, HIGH);
}
void loop() { // put your main code here, to run repeatedly:
analogWrite(leftEnable, 255);
analogWrite(rightEnable, 255);
delay(1000);
// Slow down
analogWrite(leftEnable, 200);
analogWrite(rightEnable, 200);
delay(1000);
//stop
analogWrite(leftEnable, 0);
analogWrite(rightEnable, 0);
delay(2000);
//turn right
analogWrite(leftEnable, 255);
analogWrite(rightEnable, 0);
delay(1000);
analogWrite(leftEnable, 0);
analogWrite(rightEnable, 255);
delay(1000);
}
对于覆盆子:
import serial
import time
import numpy as np
import cv2
from picamera import PiCamera
with PiCamera() as src:
src.resolution = (640,480)
src.framerate = 20
src.shutter_speed = 75000
output = np.empty((480,640, 3), dtype=np.uint8)
while(True):
start_time = time.time()
src.capture(output, format='bgr', use_video_port=True)
gray = cv2.cvtColor(output, cv2.COLOR_BGR2GRAY)
gray[gray < 50] =0
gray[gray > 50] = 255
top_center = np.average(np.where(gray[0] ==0 ))
bottom_center = np.average(np.where(gray[-1] ==0))
if top_center - bottom_center > 25:
print("Turn right")
elif top_center - bottom_center <-25:
print("Turn left")
else:
print("Stay on course")
cv2.imshow('Output', output)
key = cv2.waitKey(1)&0xFF
if key==ord("q"):
break
cv2.waitKey(8)
cv2.destroyAllWindows()
你缺少两端的串行端口命令。
在 raspberry pi
上像这样向串口发送命令
ser = serial.Serial()
ser.baudrate = 19200
ser.port = '/dev/ttyACM0'
ser.write(b'L') # send codes like 'L' for left,;'R' for Right
像这样在arduino上读取命令
void setup() {
// initialize serial:
Serial.begin(19200);
}
void loop() {
while (Serial.available() > 0) {
if (Serial.read() == 'L'){
// write code for left turn
}
}
}
我正在尝试使用带摄像头、Arduino 和 l298n 电机驱动器的 Raspberry Pi 对巡线车进行编码。我正在尝试让 Raspberry Pi 使用 USB 串口与 Arduino 通信,但我有点挣扎。
这是我为 Arduino 准备的代码:
#define leftEnable 6 // EnA
#define leftReverse 8 // IN1
#define leftForward 9 // IN2
#define rightEnable 5 //EnB
#define rightReverse 11 //IN4
#define rightForward 10 //IN3
void setup() { // put your setup code here, to run once:
pinMode(leftEnable, OUTPUT);
pinMode(rightEnable, OUTPUT);
pinMode(leftReverse, OUTPUT);
pinMode(rightReverse, OUTPUT);
pinMode(leftForward, OUTPUT);
pinMode(rightForward, OUTPUT);
// Configure for forward direction only
digitalWrite(leftReverse, LOW);
digitalWrite(rightReverse, LOW);
digitalWrite(leftForward, HIGH);
digitalWrite(rightForward, HIGH);
}
void loop() { // put your main code here, to run repeatedly:
analogWrite(leftEnable, 255);
analogWrite(rightEnable, 255);
delay(1000);
// Slow down
analogWrite(leftEnable, 200);
analogWrite(rightEnable, 200);
delay(1000);
//stop
analogWrite(leftEnable, 0);
analogWrite(rightEnable, 0);
delay(2000);
//turn right
analogWrite(leftEnable, 255);
analogWrite(rightEnable, 0);
delay(1000);
analogWrite(leftEnable, 0);
analogWrite(rightEnable, 255);
delay(1000);
}
对于覆盆子:
import serial
import time
import numpy as np
import cv2
from picamera import PiCamera
with PiCamera() as src:
src.resolution = (640,480)
src.framerate = 20
src.shutter_speed = 75000
output = np.empty((480,640, 3), dtype=np.uint8)
while(True):
start_time = time.time()
src.capture(output, format='bgr', use_video_port=True)
gray = cv2.cvtColor(output, cv2.COLOR_BGR2GRAY)
gray[gray < 50] =0
gray[gray > 50] = 255
top_center = np.average(np.where(gray[0] ==0 ))
bottom_center = np.average(np.where(gray[-1] ==0))
if top_center - bottom_center > 25:
print("Turn right")
elif top_center - bottom_center <-25:
print("Turn left")
else:
print("Stay on course")
cv2.imshow('Output', output)
key = cv2.waitKey(1)&0xFF
if key==ord("q"):
break
cv2.waitKey(8)
cv2.destroyAllWindows()
你缺少两端的串行端口命令。 在 raspberry pi
上像这样向串口发送命令ser = serial.Serial()
ser.baudrate = 19200
ser.port = '/dev/ttyACM0'
ser.write(b'L') # send codes like 'L' for left,;'R' for Right
像这样在arduino上读取命令
void setup() {
// initialize serial:
Serial.begin(19200);
}
void loop() {
while (Serial.available() > 0) {
if (Serial.read() == 'L'){
// write code for left turn
}
}
}