编辑器版本 ×
标准版

1、简单易用,可快速上手

2、流畅支持300个器件或1000个焊盘以下的设计规模

3、支持简单的电路仿真

4、面向学生、老师、创客

专业版

1、全新的交互和界面

2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计

3、更严谨的设计约束,更规范的流程

4、面向企业、更专业的用户

标准版 【毕设】智能运载小车

简介:基于STC单片机的智能运载小车

开源协议: GPL 3.0

发布时间: 2022-07-21 13:23:04
  • 5.3k
  • 18
  • 43
描述

作者介绍

姓名:雷超林,英文名:Mark Lei  ,笔名:复来
2000年出生,湖南衡阳人。
电子电气专业,主攻集成电路测试技术以及高频信号处理领域
获奖经历(省级以下略去)
2020年4月发表论文《基于STM32与PID算法探究》
2020年10月湖南省电子设计竞赛(TI杯)一等奖
2021年湖南省职业院校技能竞赛省一等奖(集成电路应用与开发)
2021年10月湖南省工业和信息化技术技能大赛二等奖,全国高端技术能手荣誉称号
2021年11月全国大学生电子设计大赛湖南赛区一等奖
2021年12月湖南省职业院校技能竞赛:“楚怡杯”一等奖(电子产品设计及制作)
2022年3月保送至湖南科技大学电子信息工程攻读学士学位

 

1 题目要求

  设计一台智能装载运输工程车,要求能夹持物体,将物体从A地送往B地,同时车身搭载多款避障传感器,能自己规划线路,供电采用锂电池供电,使用自己设计的车模,不得购买成品

 

1-2题目分析

  题目要求并不是很难,目前市面上有很多类似的避障小车,但是还没有这种运输的小车,尤其还需要夹物体,我们需要考虑到机械结构,车体我打算使用铝合金板打造,电机采用12V直流电机,扭矩大,电池采用3节18650锂电池。对于避障,采用多款传感器,以达到题目要求

 

2 总体设计方案

  设计方案首先是电池降压让单片机能以一个稳定的电压工作,同时单片机外围集成了TTL下载器,方便我们调试的程序下载,单片机通过电机驱动,驱动电机控制小车上下左右移动,传感器和摄像头将避障的信息发给单片机做处理。当识别到可夹持物体单片机再控制舵机夹子夹住物体

pJtis5AqUPOjsfy5Xqpkkd0A58Ju476sC4suWtST.png

 

 

3 原理图设计

3-1 单片机电路

uWlsSxbyTUS0KAYPjrMVlCAJnOPXbl74wFZnZEPo.png

本系统采用的是STC的8A8K64S4A12单片机,编程简单,支持3.3V-5V供电。

贴片封装,占板体积小,引脚功能强大。由于STM32的价格太贵,我们在STC和STM32之间选择了STC的8A系列。功能并不比STM32的要差,支持国产!

 

3-2 物体检测电路

7Ss9F52mNhlFw0rrLyNn9ZHVZHdcUQztEFSgxaiK.png

物体检测电路是利用了一个红外发射管和一个光电三极管以及外围比较电路,红外发射管发出红外不可见光,当外部没有物体时,红外光发散出去,光电三极管不导通,当物体遮挡时,光电三极管导通。通过LM393做比较,输出一个高电平,从而检测是否有物体在前方,R5可调电阻的作用是调节灵敏度,防止误触。

 

3-3 外设电路

8DuRt9twmhcAWLf36ZNrirSaqUtSvi2bN4JUxOTu.png

外设采用了超声波测距,摄像头循迹,以及夹子舵机接口,外设丰富,满足多种要求

 

3-4 电机驱动电路

2yg0Q6uBxQgUCEuSDSUumzsqGfvq6eLsHxK7rqC0.png

电机驱动电路采用了4片RZ7899电机驱动芯片,控制4个轮子RZ7899 是一款 DC 双向马达驱动电路,它适用于玩具等类的电机驱动、自动阀门电机驱动、电磁门锁驱动等。它有两个逻辑输入端子用来控制电机前进、后退及制动。该电路具有良好的抗干扰性,微小的待机电流、低的输出内阻,同时,他还具有内置二极管能释放感性负载的反向冲击电流。

 

3-5 USB转TTL电路

9QI1Sq9iIz8EGMjRjL04bkovpA13Zn8DkLPNqHzO.png

CH340 是一个 USB 总线的转接芯片,实现 USB 转串口或者 USB 转打印口。

在串口方式下,CH340 提供常用的 MODEM 联络信号,用于为计算机扩展异步串口。

特别注意的是CH340芯片支持 5V 电源电压或者 3.3V 电源电压。当使用 5V 工作电压时,CH340 芯片的 VCC 引脚输入外部 5V 电源,并且 V3 引脚应该外接容量为 0.1uF 的电源退耦电容。当使用 3.3V 工作电压时,CH340 芯片的 V3 引脚应该与 VCC 引脚相连接,同时输入外部的 3.3V 电源,并且与 CH340 芯片相连接的其它电路的工作电压不能超过 3.3V。

 

3-6 单片机复位及供电电路

uALMFzorfom8DOtdEY9CBGFNBCpclHwLrmHApwIB.png

单片机复位电路的原理是过给单片机RESET引脚20us的高电平时间。

单片机的供电以及设备供电采用的是LM2596固定电压输出,采用DC-DC降压的好处是:由于我们小车采用的是电池供电,电能的充分利用是我们提高续航的重要方法。LM2596的效率最高可到90%,大大的为我们节约了电池的能量,提高我们的续航。

电池采用了三节18650电池,充满电压是14.7V。

由于摄像头的功率较高,所以我们不能使用7805

 

3-7 原理图展示

 

xTKLheduJ6Og1hK7cmfx8FoaMmduCnEMOTUEuL1Z.png

4-1PCB设计说明

 

5 软件介绍

5-1 软件流程图

ewyTOrfrnHRNypgz6MIJkpUrH0KUIIR0ZUxSMiAj.png

5-2 核心代码分析

 

KyxskVHLXIlZSDNA814jgPlIAZSEyozTIWSrdQYX.png

O8fN90IqLwkCWI7MIAUJX7r6nyUS3gzesPnR3r0f.png

2G9sHYxJZFELrIquzxjVulNJS0ESmhykuPL4MScW.png

def check_cross(img):  #白色背景识别
    left_y=0
    right_y=0
    for blob in img.find_blobs([(100,200)], pixel_threshold=500,merge=True, margin=5,roi=(0,0,60,120)):
        img.draw_rectangle(blob.rect())
        left_y=blob.cy()
        img.draw_cross(blob.cx(), blob.cy())
    for blob in img.find_blobs([(100,200)], pixel_threshold=500,merge=True, margin=5,roi=(100,0,60,120)):
        img.draw_rectangle(blob.rect())
        right_y=blob.cy()
        img.draw_cross(blob.cx(), blob.cy())
    if(left_y and right_y):
        if(math.fabs(left_y-right_y)<20):
            return 1
    return 0
find_cross_flag=1

THRESHOLD = (0, 20, -33, 13, -16, 20) # Grayscale threshold for dark things...
import sensor, image, time
from pyb import LED
import car
from pyb import UART
from pid import PID
                          #以传感器修正图像的中心向正上方为y轴,中心向右边为x轴,中心在正下方的投影点为原点建系
rho_pid = PID(p=1, i=0.1) #循迹时地面的直线在传感器中的位置可能不过中心,此时该PID修正中心偏离程度,相当于y=kx+b ,的b
theta_pid = PID(p=0.5, i=0) #该PID相当于k,是直线偏离中心的角度(假设k=0,b=0时为理想角度,此时err为0)
uart = UART(3,115200)      #启用串口3,波特率115200

#LED(1).on()#补光灯
#LED(2).on()
#LED(3).on()

sensor.reset()#重启
sensor.set_vflip(True)#垂直方向翻转
sensor.set_hmirror(True)#水平方向翻转
sensor.set_pixformat(sensor.RGB565) # 将传感器的颜色数据格式化为RGB565格式
sensor.set_framesize(sensor.QQQVGA) # 80x60 (4,800 pixels) - O(N^2) max = 2,3040,000.
#sensor.set_windowing([0,20,80,40])
sensor.skip_frames(time = 2000)     # WARNING: If you use QQVGA it may take seconds
clock = time.clock()                # to process a frame sometimes.

 

while(True):
    clock.tick()
    img = sensor.snapshot().binary([THRESHOLD])#将阈值像素二值化输出
    line = img.get_regression([(100,100)], robust = True)#调用线性回归绘制直线
    if (line):
        rho_err = abs(line.rho())-img.width()/2 #计算偏离原点的误差
        if line.theta()>90: #计算倾斜度误差
            theta_err = line.theta()-180
        else:
            theta_err = line.theta()#霍夫变换后的直线角度0-179
        img.draw_line(line.line(), color = 127)#画出直线
        print(rho_err,line.magnitude(),rho_err)
        if line.magnitude()>1:      #霍夫变换后的直线长度,值越大效果越好
            #if -40<b_err<40 and -30<t_err<30:
            rho_output = rho_pid.get_pid(rho_err,1) #得到PID的输出值
            theta_output = theta_pid.get_pid(theta_err,1)
            output = rho_output+theta_output    #简单的参数融合
            #car.run(50+output, 50-output)      #OpenMV控制小车
            str1 = str(int(output*10))          #将数据化为整数
            uart.write('A'+','+str1)#将数据发给单片机格式:[A,outputValue],第一个字母表示类型,'A'表示识别正常,并发送输出值
            print(str1)#打印调试数据
        else:
            #car.run(15,12)#线性回归效果不好,向目标直走
            uart.write('B') #'B'表示PID融合输出的结果不好


    else:
        #car.run(20,-20)#原地旋转寻目标
        uart.write('C') #'C'表示未找目标

        pass
    #print(clock.fps())#调试时输出帧率

 

以上代码是舵机控制和摄像头的部分代码,尤其是在小车运动的时候,一定要把速度降低,也就是降低我标红的那个占空比,否则会让电机寿命变短

还有一部分代码是OPENMV的代码由python编写。此代码我会放在附件里,目前只能识别两种不同的颜色,后续算法会完善,工作量大,请大家耐心等待。

 

6 实物展示说明

 

7 注意事项

硬件上注意:

锂电池短路非常的危险,我们要注意锂电池的保存及使用。

在电机输出端要并联电容,否则容易烧驱动芯片,重则烧毁单片机!

调试的时候要注意电机的正负极,同时焊接的时候不要焊太多锡了,可能会造成板子的短路。

同时上电之前要检测板子是否有短路的情况,否则后果自负!

软件上注意:

一定要接对摄像头和单片机的串口接线,否则烧坏摄像头概不负责,先下载好摄像头的程序,再下载小车的,最后最装机,

由于摄像头和电机的功率较大,大家一点要记得充电。摄像头采用的是H750的OPENMV。网上有很多类似的教程,大家可以去找找。

最后祝大家一切顺利

 

8 演示视频

 

设计图
原理图
1 /
PCB
1 /
暂无
工程附件
序号 文件名称 下载次数
1

测试视频.mp4

1904
2

智能小车.rar

157
工程成员
添加到专辑 ×

加载中...

温馨提示 ×

是否需要添加此工程到专辑?

  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 技术支持

  • 开源平台公众号