超声波测距避障小车

一、导言 通过笔记记录学习过程,不断进步。
mcropython系统的STM32开发板控制,HC-SR04超声波测距判断,L293D驱动电机组成避障小车。
二、组成 1、TPYBoardV103开发板(固件2018年4月)
2、HC-SR04超声波测距模块
3、0.96OLED显示模块
4、L293D芯片(可直接用L298驱动模块)
5、TT电机
三、连接 1、0.96OLED显示模块, 是SPI接口的,接线如下:

OLED TPYBoardV103
GND GND 电源地
VCC 3.3V 电源(2.8V~5.5V)
D0 X6 时钟线
D1 X8 数据线
RES Y10 复位线
DC Y9 数据/命令
CS NC (悬空) 片选
2、HC-SR04超声波测距,是4线的,接线如下,使用了定时器2,上升下降沿捕促,GPIO注意与定时器对应,这里输入为“X1”,输出为“X2”
HC-SR04 TPYBoard
VCC 5V
TRIG X2 触发控制信号输入
ECHO X1 回响信号输出
GND GND
3、L293D电机驱动,可同时驱动两个电机,每个通道提供600MA电流;使能端必须是高电平,才能激活电机,也可以加PWM控制电机的速度。
L293D TPYBoard
1 X3 使能1
2 Y3 输入1
7 Y4 输入2
9 X4 使能2
10 Y1 输入3
15 Y2 输入4
超声波测距避障小车
文章图片
L293接线图
电动机驱动
输入1(3) 输入2(4) 动作
电机停转
电机正转
电机反转
电机停转
TT马达 130减速电机
3-7.2V 双轴
3V时,电流170ma,转速约115转/分钟,扭力约0.7KGf.cm
6V时,电流230ma,转速约转255/分钟,扭力约1.2KGf.cm
7.2V时,电流250ma,转速约转320/分钟,扭力约1.5KGf.cm
四、代码 1、main.py
import pyb from pyb import Pin from pyb import Timer from ssd1306 import SSD1306# SPIOLED显示 # OLEDTPYBoardV102 # GNDGND电源地 # VCC3.3V电源(2.8V~5.5V) # D0X6时钟线 # D1X8数据线 # RESY10复位线 # DCY9数据/命令 # CSNC (悬空)片选display = SSD1306(pinout={'dc': 'Y9', 'res': 'Y10'}, height=64, external_vcc=False) display.poweron() display.init_display() display.clear()# 超声波测距 # HC-SR04 TPYBoard #VCC5V #TRIGX2触发控制信号输入 #ECHOX1回响信号输出 #GNDGNDTrig = Pin('X2',Pin.OUT_PP) Echo = Pin('X1',Pin.IN) ic_start=0 ic_width=0 #show=0 #distance=0.0 # Temer.ICEcho脉冲宽度,上升沿、下降沿输入捕获 timer_ic=Timer(2,prescaler=83,period=0x0fffffff)#1Mhz,计时周期值0x0fffffff ic=timer_ic.channel(1,Timer.IC,pin=Echo,polarity=Timer.BOTH) # 捕获Echo脉冲上升沿、下降沿时的回调函数,计算Echo时间,显示 def echo_width(timer): global ic_start global ic_width #global show #global distance # 捕获Echo脉冲上升沿、下降沿时的计数 if Echo.value(): #获得上升沿时计数值 ic_start=ic.capture() print('ic_start:',ic_start) else: ic_width=ic.capture() print('ic_width:',ic_width) #获得下降沿时计数值,减上升沿时计数值,获得高电平宽度 ic_width=ic.capture()-ic_start & 0x0fffffff print('ic_width2:',ic_width) #distance=round(ic_width/1000000*33299/2,2) #高电平计数,转换成距离CM #print('distance:',distance) #show=1 ic.callback(echo_width)#间隔固定时间发送测距信号 def run(timer): if Echo.value()==0: Trig.value(1) pyb.udelay(20) Trig.value(0) timer_=Timer(3,freq=2,callback=run)#PYB L293D # L293DTPYB # 1X3使能1 # 2Y3输入1 # 7Y4输入2 # 9X4使能2 # 10Y1输入3 # 15Y2输入4#左电机,输入端,正反转、停止 leftMotor1 = Pin('Y3',Pin.OUT_PP) leftMotor2 = Pin('Y4',Pin.OUT_PP) #右电机,输入端,正反转、停止 rightMotor1 = Pin('Y1',Pin.OUT_PP) rightMotor2 = Pin('Y2',Pin.OUT_PP)timer = Timer(9,freq=5000)#Timer与Pin有关,选择GPIO时要注意,对应 #电机使能端,并PWM控制速度 speedLeft =timer.channel(1,Timer.PWM,pin=Pin('X3',Pin.OUT_PP)) #speedLeft.pulse_width_percent(80) speedright =timer.channel(2,Timer.PWM,pin=Pin('X4',Pin.OUT_PP)) #speedright.pulse_width_percent(80)def go(speed):# 前进 pyb.delay(100) speedLeft.pulse_width_percent(speed) speedright.pulse_width_percent(speed) leftMotor1.low() leftMotor2.high() rightMotor1.high() rightMotor2.low()def back(speed):#后退 pyb.delay(100) speedLeft.pulse_width_percent(speed) speedright.pulse_width_percent(speed) leftMotor1.high() leftMotor2.low() rightMotor1.low() rightMotor2.high() def left():#左转 pyb.delay(100) speedLeft.pulse_width_percent(80) speedright.pulse_width_percent(80) leftMotor1.high() leftMotor2.low() rightMotor1.high() rightMotor2.low() def right():#右转 pyb.delay(100) speedLeft.pulse_width_percent(80) speedright.pulse_width_percent(80) leftMotor1.low() leftMotor2.high() rightMotor1.low() rightMotor2.high() def stop():#停止 speedLeft.pulse_width_percent(100) speedright.pulse_width_percent(100) leftMotor1.low() leftMotor2.low() rightMotor1.low() rightMotor2.low() def measure(ic_width,dis=display):#测量距离,返回CM,显示距离 distance=round(ic_width/1000000*33299/2,2) print('Distance:',distance) print(distance,'cm')dis.clear() dis.draw_text(1,1,'distance:',size=1,space=1) dis.draw_text(1,10,str(distance),size=1,space=1) dis.draw_text(80,10,'cm',size=1,space=1) #Write display buffer dis.display() return distancedef main(): pyb.delay(1000) while True: m=measure(ic_width) if m>40: go(100) elif m<20: stop() pyb.delay(5000) back(100) pyb.delay(5000) else: left() pyb.delay(10000) right() pyb.delay(10000) stop() pyb.delay(5000)main()

【超声波测距避障小车】2、ssd1306.py
# The MIT License (MIT) # # Copyright (c) 2014 Kenneth Henderick # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE.import pyb import fontnew# Constants DISPLAYOFF= 0xAE SETCONTRAST= 0x81 DISPLAYALLON_RESUME = 0xA4 DISPLAYALLON= 0xA5 NORMALDISPLAY= 0xA6 INVERTDISPLAY= 0xA7 DISPLAYON= 0xAF SETDISPLAYOFFSET= 0xD3 SETCOMPINS= 0xDA SETVCOMDETECT= 0xDB SETDISPLAYCLOCKDIV= 0xD5 SETPRECHARGE= 0xD9 SETMULTIPLEX= 0xA8 SETLOWCOLUMN= 0x00 SETHIGHCOLUMN= 0x10 SETSTARTLINE= 0x40 MEMORYMODE= 0x20 COLUMNADDR= 0x21 PAGEADDR= 0x22 COMSCANINC= 0xC0 COMSCANDEC= 0xC8 SEGREMAP= 0xA0 CHARGEPUMP= 0x8D EXTERNALVCC= 0x10 SWITCHCAPVCC= 0x20 SETPAGEADDR= 0xB0 SETCOLADDR_LOW= 0x00 SETCOLADDR_HIGH= 0x10 ACTIVATE_SCROLL= 0x2F DEACTIVATE_SCROLL= 0x2E SET_VERTICAL_SCROLL_AREA= 0xA3 RIGHT_HORIZONTAL_SCROLL= 0x26 LEFT_HORIZONTAL_SCROLL= 0x27 VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL = 0x29 VERTICAL_AND_LEFT_HORIZONTAL_SCROLL= 0x2A# I2C devices are accessed through a Device ID. This is a 7-bit # value but is sometimes expressed left-shifted by 1 as an 8-bit value. # A pin on SSD1306 allows it to respond to ID 0x3C or 0x3D. The board # I bought from ebay used a 0-ohm resistor to select between "0x78" # (0x3c << 1) or "0x7a" (0x3d << 1). The default was set to "0x78" DEVID = 0x3c# I2C communication here is either # or <> <> <> <>... # These two values encode the Co (Continuation) bit as b7 and the # D/C# (Data/Command Selection) bit as b6. CTL_CMD = 0x80 CTL_DAT = 0x40class SSD1306(object):def __init__(self, pinout, height=32, external_vcc=True, i2c_devid=DEVID): self.external_vcc = external_vcc self.height= 32 if height == 32 else 64 self.pages= int(self.height / 8) self.columns= 128# Infer interface type from entries in pinout{} if 'dc' in pinout: # SPI rate = 16 * 1024 * 1024 self.spi = pyb.SPI(1, pyb.SPI.MASTER, baudrate=rate, polarity=1, phase=0)# SCK: Y6: MOSI: Y8 self.dc= pyb.Pin(pinout['dc'],pyb.Pin.OUT_PP, pyb.Pin.PULL_DOWN) self.res = pyb.Pin(pinout['res'], pyb.Pin.OUT_PP, pyb.Pin.PULL_DOWN) self.offset = 0 else: # Infer bus number from pin if pinout['sda'] == 'X10': self.i2c = pyb.I2C(1) else: self.i2c = pyb.I2C(2) self.i2c.init(pyb.I2C.MASTER, baudrate=400000) # 400kHz self.devid = i2c_devid # used to reserve an extra byte in the image buffer AND as a way to # infer the interface type self.offset = 1 # I2C command buffer self.cbuffer = bytearray(2) self.cbuffer[0] = CTL_CMDdef clear(self): self.buffer = bytearray(self.offset + self.pages * self.columns) if self.offset == 1: self.buffer[0] = CTL_DATdef write_command(self, command_byte): if self.offset == 1: self.cbuffer[1] = command_byte self.i2c.send(self.cbuffer, addr=self.devid, timeout=5000) else: self.dc.low() self.spi.send(command_byte)def invert_display(self, invert): self.write_command(INVERTDISPLAY if invert else NORMALDISPLAY)def display(self): self.write_command(COLUMNADDR) self.write_command(0) self.write_command(self.columns - 1) self.write_command(PAGEADDR) self.write_command(0) self.write_command(self.pages - 1) if self.offset == 1: self.i2c.send(self.buffer, addr=self.devid, timeout=5000) else: self.dc.high() self.spi.send(self.buffer)def set_pixel(self, x, y, state): index = x + (int(y / 8) * self.columns) if state: self.buffer[self.offset + index] |= (1 << (y & 7)) else: self.buffer[self.offset + index] &= ~(1 << (y & 7))def init_display(self): chargepump = 0x10 if self.external_vcc else 0x14 precharge= 0x22 if self.external_vcc else 0xf1 multiplex= 0x1f if self.height == 32 else 0x3f compins= 0x02 if self.height == 32 else 0x12 contrast= 0xff # 0x8f if self.height == 32 else (0x9f if self.external_vcc else 0x9f) data = [DISPLAYOFF, SETDISPLAYCLOCKDIV, 0x80, SETMULTIPLEX, multiplex, SETDISPLAYOFFSET, 0x00, SETSTARTLINE | 0x00, CHARGEPUMP, chargepump, MEMORYMODE, 0x00, SEGREMAP | 0x10, COMSCANDEC, SETCOMPINS, compins, SETCONTRAST, contrast, SETPRECHARGE, precharge, SETVCOMDETECT, 0x40, DISPLAYALLON_RESUME, NORMALDISPLAY, DISPLAYON] for item in data: self.write_command(item) self.clear() self.display()def poweron(self): if self.offset == 1: pyb.delay(10) else: self.res.high() pyb.delay(1) self.res.low() pyb.delay(10) self.res.high() pyb.delay(10)def poweroff(self): self.write_command(DISPLAYOFF)def contrast(self, contrast): self.write_command(SETCONTRAST) self.write_command(contrast)def draw_text(self, x, y, string, size=1, space=1): def pixel_x(char_number, char_column, point_row): char_offset = x + char_number * size * fontnew.cols + space * char_number pixel_offset = char_offset + char_column * size + point_row return self.columns - pixel_offsetdef pixel_y(char_row, point_column): char_offset = y + char_row * size return char_offset + point_columndef pixel_mask(char, char_column, char_row): char_index_offset = ord(char) * fontnew.cols return fontnew.bytes[char_index_offset + char_column] >> char_row & 0x1pixels = ( (pixel_x(char_number, char_column, point_row), pixel_y(char_row, point_column), pixel_mask(char, char_column, char_row)) for char_number, char in enumerate(string) for char_column in range(fontnew.cols) for char_row in range(fontnew.rows) for point_column in range(size) for point_row in range(1, size + 1))for pixel in pixels: self.set_pixel(*pixel)

3、fontnew.py
# Originally from https://github.com/guyc/py-gaugette/blob/master/gaugette/font5x8.pycols = 5 rows = 8 bytes = [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, 0x18, 0x3C, 0x18, 0x00, 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, 0x18, 0x24, 0x18, 0x00, 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x26, 0x29, 0x79, 0x29, 0x26, 0x40, 0x7F, 0x05, 0x05, 0x07, 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, 0x66, 0x89, 0x95, 0x6A, 0x60, 0x60, 0x60, 0x60, 0x60, 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x08, 0x04, 0x7E, 0x04, 0x08, 0x10, 0x20, 0x7E, 0x20, 0x10, 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x1E, 0x10, 0x10, 0x10, 0x10, 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x30, 0x38, 0x3E, 0x38, 0x30, 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x23, 0x13, 0x08, 0x64, 0x62, 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x80, 0x70, 0x30, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x60, 0x60, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x72, 0x49, 0x49, 0x49, 0x46, 0x21, 0x41, 0x49, 0x4D, 0x33, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x27, 0x45, 0x45, 0x45, 0x39, 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x41, 0x21, 0x11, 0x09, 0x07, 0x36, 0x49, 0x49, 0x49, 0x36, 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x41, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x41, 0x22, 0x14, 0x08, 0x02, 0x01, 0x59, 0x09, 0x06, 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x3E, 0x41, 0x41, 0x51, 0x73, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x26, 0x49, 0x49, 0x49, 0x32, 0x03, 0x01, 0x7F, 0x01, 0x03, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x63, 0x14, 0x08, 0x14, 0x63, 0x03, 0x04, 0x78, 0x04, 0x03, 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x41, 0x41, 0x41, 0x7F, 0x04, 0x02, 0x01, 0x02, 0x04, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x03, 0x07, 0x08, 0x00, 0x20, 0x54, 0x54, 0x78, 0x40, 0x7F, 0x28, 0x44, 0x44, 0x38, 0x38, 0x44, 0x44, 0x44, 0x28, 0x38, 0x44, 0x44, 0x28, 0x7F, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x08, 0x7E, 0x09, 0x02, 0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x44, 0x7D, 0x40, 0x00, 0x20, 0x40, 0x40, 0x3D, 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, 0x7C, 0x04, 0x78, 0x04, 0x78, 0x7C, 0x08, 0x04, 0x04, 0x78, 0x38, 0x44, 0x44, 0x44, 0x38, 0xFC, 0x18, 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x18, 0xFC, 0x7C, 0x08, 0x04, 0x04, 0x08, 0x48, 0x54, 0x54, 0x54, 0x24, 0x04, 0x04, 0x3F, 0x44, 0x24, 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x44, 0x28, 0x10, 0x28, 0x44, 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x41, 0x36, 0x08, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x1E, 0xA1, 0xA1, 0x61, 0x12, 0x3A, 0x40, 0x40, 0x20, 0x7A, 0x38, 0x54, 0x54, 0x55, 0x59, 0x21, 0x55, 0x55, 0x79, 0x41, 0x21, 0x54, 0x54, 0x78, 0x41, 0x21, 0x55, 0x54, 0x78, 0x40, 0x20, 0x54, 0x55, 0x79, 0x40, 0x0C, 0x1E, 0x52, 0x72, 0x12, 0x39, 0x55, 0x55, 0x55, 0x59, 0x39, 0x54, 0x54, 0x54, 0x59, 0x39, 0x55, 0x54, 0x54, 0x58, 0x00, 0x00, 0x45, 0x7C, 0x41, 0x00, 0x02, 0x45, 0x7D, 0x42, 0x00, 0x01, 0x45, 0x7C, 0x40, 0xF0, 0x29, 0x24, 0x29, 0xF0, 0xF0, 0x28, 0x25, 0x28, 0xF0, 0x7C, 0x54, 0x55, 0x45, 0x00, 0x20, 0x54, 0x54, 0x7C, 0x54, 0x7C, 0x0A, 0x09, 0x7F, 0x49, 0x32, 0x49, 0x49, 0x49, 0x32, 0x32, 0x48, 0x48, 0x48, 0x32, 0x32, 0x4A, 0x48, 0x48, 0x30, 0x3A, 0x41, 0x41, 0x21, 0x7A, 0x3A, 0x42, 0x40, 0x20, 0x78, 0x00, 0x9D, 0xA0, 0xA0, 0x7D, 0x39, 0x44, 0x44, 0x44, 0x39, 0x3D, 0x40, 0x40, 0x40, 0x3D, 0x3C, 0x24, 0xFF, 0x24, 0x24, 0x48, 0x7E, 0x49, 0x43, 0x66, 0x2B, 0x2F, 0xFC, 0x2F, 0x2B, 0xFF, 0x09, 0x29, 0xF6, 0x20, 0xC0, 0x88, 0x7E, 0x09, 0x03, 0x20, 0x54, 0x54, 0x79, 0x41, 0x00, 0x00, 0x44, 0x7D, 0x41, 0x30, 0x48, 0x48, 0x4A, 0x32, 0x38, 0x40, 0x40, 0x22, 0x7A, 0x00, 0x7A, 0x0A, 0x0A, 0x72, 0x7D, 0x0D, 0x19, 0x31, 0x7D, 0x26, 0x29, 0x29, 0x2F, 0x28, 0x26, 0x29, 0x29, 0x29, 0x26, 0x30, 0x48, 0x4D, 0x40, 0x20, 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x38, 0x2F, 0x10, 0xC8, 0xAC, 0xBA, 0x2F, 0x10, 0x28, 0x34, 0xFA, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x08, 0x14, 0x2A, 0x14, 0x22, 0x22, 0x14, 0x2A, 0x14, 0x08, 0xAA, 0x00, 0x55, 0x00, 0xAA, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x10, 0x10, 0x10, 0xFF, 0x00, 0x14, 0x14, 0x14, 0xFF, 0x00, 0x10, 0x10, 0xFF, 0x00, 0xFF, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x14, 0x14, 0x14, 0xFC, 0x00, 0x14, 0x14, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x14, 0x14, 0xF4, 0x04, 0xFC, 0x14, 0x14, 0x17, 0x10, 0x1F, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x14, 0x14, 0x14, 0x1F, 0x00, 0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0x00, 0x00, 0x00, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x00, 0x00, 0x00, 0xFF, 0x14, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0x10, 0x17, 0x00, 0x00, 0xFC, 0x04, 0xF4, 0x14, 0x14, 0x17, 0x10, 0x17, 0x14, 0x14, 0xF4, 0x04, 0xF4, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x00, 0xF7, 0x14, 0x14, 0x14, 0x17, 0x14, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x14, 0x14, 0x14, 0xF4, 0x14, 0x10, 0x10, 0xF0, 0x10, 0xF0, 0x00, 0x00, 0x1F, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x14, 0x00, 0x00, 0x00, 0xFC, 0x14, 0x00, 0x00, 0xF0, 0x10, 0xF0, 0x10, 0x10, 0xFF, 0x10, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x14, 0x10, 0x10, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x38, 0x44, 0x44, 0x38, 0x44, 0x7C, 0x2A, 0x2A, 0x3E, 0x14, 0x7E, 0x02, 0x02, 0x06, 0x06, 0x02, 0x7E, 0x02, 0x7E, 0x02, 0x63, 0x55, 0x49, 0x41, 0x63, 0x38, 0x44, 0x44, 0x3C, 0x04, 0x40, 0x7E, 0x20, 0x1E, 0x20, 0x06, 0x02, 0x7E, 0x02, 0x02, 0x99, 0xA5, 0xE7, 0xA5, 0x99, 0x1C, 0x2A, 0x49, 0x2A, 0x1C, 0x4C, 0x72, 0x01, 0x72, 0x4C, 0x30, 0x4A, 0x4D, 0x4D, 0x30, 0x30, 0x48, 0x78, 0x48, 0x30, 0xBC, 0x62, 0x5A, 0x46, 0x3D, 0x3E, 0x49, 0x49, 0x49, 0x00, 0x7E, 0x01, 0x01, 0x01, 0x7E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x44, 0x44, 0x5F, 0x44, 0x44, 0x40, 0x51, 0x4A, 0x44, 0x40, 0x40, 0x44, 0x4A, 0x51, 0x40, 0x00, 0x00, 0xFF, 0x01, 0x03, 0xE0, 0x80, 0xFF, 0x00, 0x00, 0x08, 0x08, 0x6B, 0x6B, 0x08, 0x36, 0x12, 0x36, 0x24, 0x36, 0x06, 0x0F, 0x09, 0x0F, 0x06, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x30, 0x40, 0xFF, 0x01, 0x01, 0x00, 0x1F, 0x01, 0x01, 0x1E, 0x00, 0x19, 0x1D, 0x17, 0x12, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00]

五、图 超声波测距避障小车
文章图片
实图 超声波测距避障小车
文章图片
实图

    推荐阅读