心心念念想做智能小车,在淘宝买的便宜架子,虽然有点简陋,但跑起来应该没有问题了。有机会以后弄个性能好点的车身,现在需要自己花钱,才发现心中不舍。
一,小车硬件介绍。
1,亚克力车身,四个直流小电机。
2, 四路直流电机驱动模块。
二,X3派开发板。
自己画了了个小PCB板,用支撑柱将开发板固定起来,起保护作用 ,加了个风扇,不然CPU温度确实有点高。另外又买了WIFI天线,不然信号太差。小板形状如下:
三,使用串口控制小车运动。
这里用串口f控制GPIO,GPIO连接上面的驱动板,这样实现对电机的控制。
根据官方提供的串口和GPIO程序,稍微修改下:
#!/usr/bin/env python3
import Hobot.GPIO as GPIO
import time
import sys
import os
import time
# 定义使用的GPIO通道为38
output_pin26 = 26
output_pin28 = 28
output_pin38 = 38 # BOARD 编码 38
output_pin40 = 40
# ����python���ڿ�
import serial
import serial.tools.list_ports
def serialTest():
# 设置管脚编码模式为硬件编号 BOARD
GPIO.setmode(GPIO.BOARD)
# 设置为输出模式,并且初始化为高电平
GPIO.setup(output_pin26, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(output_pin28, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(output_pin38, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(output_pin40, GPIO.OUT, initial=GPIO.LOW)
# 记录当前管脚状态
curr_value = GPIO.HIGH
print("List of enabled UART:")
os.system('ls /dev/tty[a-zA-Z]*')
# uart_dev= input("�������Ҫ���ԵĴ����豸��:")
uart_dev='/dev/ttyS3'
# baudrate = input("�����벨����(9600,19200,38400,57600,115200,921600):")
baudrate = 115200
try:
ser = serial.Serial(uart_dev, int(baudrate), timeout=1) # 1s timeout
except Exception as e:
print("open serial failed!\n")
print(ser)
print("Starting demo now! Press CTRL+C to exit")
while True:
#test_data = "AA55"
#write_num = ser.write(test_data.encode('UTF-8'))
#print("Send: ", test_data)
received_data = ser.read().decode('UTF-8')
#print("Recv: ", received_data)
#print(ser.read().hex())
if received_data == '5':
GPIO.output(output_pin26, GPIO.HIGH)
GPIO.output(output_pin28, GPIO.LOW)
GPIO.output(output_pin38, GPIO.HIGH)
GPIO.output(output_pin40, GPIO.LOW)
print("Recv: ", received_data)
elif received_data == '2':
GPIO.output(output_pin26, GPIO.LOW)
GPIO.output(output_pin28, GPIO.HIGH)
GPIO.output(output_pin38, GPIO.LOW)
GPIO.output(output_pin40, GPIO.HIGH)
print("Recv: ", received_data)
elif received_data == '1':
GPIO.output(output_pin26, GPIO.HIGH)
GPIO.output(output_pin28, GPIO.LOW)
GPIO.output(output_pin38, GPIO.LOW)
GPIO.output(output_pin40, GPIO.LOW)
print("Recv: ", received_data)
elif received_data == '3':
GPIO.output(output_pin26, GPIO.LOW)
GPIO.output(output_pin28, GPIO.LOW)
GPIO.output(output_pin38, GPIO.HIGH)
GPIO.output(output_pin40, GPIO.LOW)
print("Recv: ", received_data)
elif received_data == '0':
GPIO.output(output_pin26, GPIO.LOW)
GPIO.output(output_pin28, GPIO.LOW)
GPIO.output(output_pin38, GPIO.LOW)
GPIO.output(output_pin40, GPIO.LOW)
print("Recv: ", received_data)
time.sleep(0.2)
ser.close()
return 0
if __name__ == '__main__':
if serialTest() != 0:
print("Serial test failed!")
else:
print("Serial test success!")
四,测试。
小车运动