查看: 403|回复: 0

[原创] Python蓝牙智能小车制作教程实例

[复制链接]

11

主题

0

好友

132

积分

童生

Rank: 2

  • TA的每日心情
    开心
    2017-5-27 15:48
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2016-12-16 13:12:18 |显示全部楼层
        给大家介绍一个Python手机蓝牙遥控智能小车的制作教程,小车制作采用的是Python开发语言,MCU为TPYBoard,一款支持Python语言的MicroPython开发板,先一起看下成品的视频演示吧!详细的教程可参考TPYBoard官网例程



    蓝牙小车3.jpg


        首先介绍一下用到的开发板——TPYBoard

        TPYBoard是遵守MIT协议由TurnipSmart公司制作的一款MicroPython开发板,它是基于STM32F405单片机,通过USB接口进行数据传输。该开发板内置4个LED灯、一个加速传感器、时钟模块,可在3V-10V之间的电压正常工作。简而言之,TPYBoard通过Python脚本语言实现单片机的控制,单片机能做什么就等于TPYBoard能做什么。

    tpyboardv102 (2).jpg


        1.实验目的

        1. 学习在PC机系统中扩展简单I/O 接口的方法。
        2. 进一步学习编制数据输出程序的设计方法。
        3. 学习蓝牙模块的接线方法及其工作原理。
        4. 学习 L298N电机驱动板模块的接线方法。
        5. 学习蓝牙控制小车的工作原理。

        2.所需元器件

        TPYBoard板子一块
        蓝牙串口模块一个
        L298N电机驱动板模块一个
        智能小车底盘一个
        数据线一条
        杜邦线若干

        3.蓝牙串口模块原理

        (1)引出接口包括EN,5V,GND,TX,RX,STATE,我们小车只用到RX,TX,GND,5V四个针脚。
        (2)模块默认波特率位9600,默认配对密码为1234,默认名称位为HC-06。
        (3)led指示蓝牙连接状态,闪烁表示没有蓝牙连接,常亮表示蓝牙已连接并打开了端口,当我们用安卓手机软件发送指令时,通过串口给TPYBoard发送指令,TPYBoard收到指令通过L298BN模块来驱动小车前进,后退,向左,向右或者停止。

        如下图接线,5V 接TPYBoard的VIN, GND 为地线,TX接TPYBoard的RX(这用的是TPYBoard串口2,X3,X4)即X4,RX接TPYBoard的TX即X3。

    蓝牙小车1.png


        4.学习L298N电机驱动板模块的接线方法

        本模块是2路的H桥驱动,所以可以同时驱动两个电机,接法如图所示使能ENA ENB之后,可以分别从IN1 IN2输入PWM信号驱动电机1的转速和方向,可以分别从IN3 IN4输入PWM信号驱动电机2的转速和方向。我们将电机1接口的OUT1与OUT2与小车的一个电机的正负极连接起来,将电机2接口的OUT3与OUT2与小车的另一个电机的正负极连接起来。然后将两边的接线端子,即供电正极(中间的接线端子为接地)连接TPYboard的VIN,中间的接线端子即接地,连接TPYBoard的GND,In1-In4连接TPYBoard的Y1,Y2,Y3,Y4,通过Y1,Y2与Y3,Y4的高低电平,来控制电机的转动,从而让小车前进,后退,向左,向右。

    蓝牙小车2.jpg


        接线ok后,编写main.py,给TOYBoard通电就ok了,下面是源代码。

        5.源代码
    1. import pyb
    2. from pyb import UART
    3. from pyb import Pin
    4.   
    5. M2 = Pin('X3', Pin.IN)
    6. M3 = Pin('X4', Pin.IN)
    7. N1 = Pin('Y1', Pin.OUT_PP)
    8. N2 = Pin('Y2', Pin.OUT_PP)
    9. N3 = Pin('Y3', Pin.OUT_PP)
    10. N4 = Pin('Y4', Pin.OUT_PP)
    11.   
    12. u2 = UART(2, 9600)
    13.   
    14. while True:
    15.     pyb.LED(2).on()
    16.     pyb.LED(3).on()
    17.     pyb.LED(4).on()
    18.     _dataRead=u2.readall()
    19.     if _dataRead!=None:
    20.     #停止(读取手机APP传过来的指令,不同的软件指令可能不同,可以自己设定,在这里是默认的,下同)
    21.         if(_dataRead.find(b'\xa5Z\x04\xb1\xb5\xaa')>-1):
    22.             print('stop')
    23.             N1.low()
    24.             N2.low()
    25.             N3.low()
    26.             N4.low()
    27.         #向左
    28.         elif(_dataRead.find( b'\xa5Z\x04\xb4\xb8\xaa')>-1):
    29.             print('left')
    30.             N1.low()
    31.             N2.high()
    32.             N3.high()
    33.             N4.low()
    34.         #向右
    35.         elif(_dataRead.find( b'\xa5Z\x04\xb6\xba\xaa')>-1):
    36.             print('right')
    37.             N1.high()
    38.             N2.low()
    39.             N3.low()
    40.             N4.high()
    41.         #后退
    42.         elif(_dataRead.find(b'\xa5Z\x04\xb5\xb9\xaa')>-1):
    43.             print('back')
    44.             N2.high()
    45.             N1.low()
    46.             N4.high()
    47.             N3.low()
    48.         #向前   
    49.         elif(_dataRead.find( b'\xa5Z\x04\xb2\xb6\xaa')>-1):
    50.             print('go')
    51.             N1.high()
    52.             N2.low()
    53.             N3.high()
    54.             N4.low()
    复制代码
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /4 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-7-28 14:45 , Processed in 0.181664 second(s), 12 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部