[TPYBoard - Micropython 之会python就能做硬件 9] 五分种学会用TPYBoard V102 制作避障小车(升级版)
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi
一、实验器材
1、TPYboard V102板 1块
2、电机驱动模块L298N 1个
3、电机 2块
4、小车底盘 1个
5、超声波模块 1个
6、舵机 1个
7、SG90舵机支架 1个
8、超声波云台支架 1个
二、超声波模块
1、什么是超声波模块
超声波传感器是利用超声波的特性研制而成的传感器, 它是通过传送一个超声波(远高于人的听觉范围)和提供一个对应于爆裂回声返回到传感器所需时间的输出脉冲来工作的。超声波传感器在非接触性测量方面的应用非常广泛,如检测液体水位(特别是具有腐蚀性的液体,如硫酸、硝酸液体),汽车倒车防撞系统,金属/非金属探伤等,都可以用到超声波距离传感器。
2、超声波模块测距的原理
(1)采用IO口TRIG触发测距,给最少10us的高电平信呈。
(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回。
(3)有信号返回,通过 IO 口 ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2。
如下图接线,VCC 供 5V电源, GND 为地线,TRIG 触发控制信号输入,接板子的X9,ECHO 回响信号输出,接板子的X10,四个接口端。

三、电机驱动模块
1、什么是电机驱动模块
电机驱动模块主要是可以控制电机的运行:调速、运行、停止、步进、匀速等操作
2、L298N的使用方法
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的X1,X2,Y1,Y2,通过X1,X2与Y1,Y2的高低电平,来控制电机的转动,从而让小车前进,后退,向左,向右。

四、舵机
1、概述
舵机也叫伺服电机,最早用于船舶上实现其转向功能,由于可以通过程序连续控制其转角,因而被广泛应用智能小车以实现转向以及机器人各类关节运动中,如下图所示。

2、舵机的组成
一般来讲,舵机主要由以下几个部分组成,舵盘、减速齿轮组、位置反馈电位计、直流电机、控制电路等,如下图所示。

舵机的输入线共有三条,红色中间,是电源线,一边灰色的是地线,这辆根线给舵机提供最基本的能源保证,主要是电机的转动消耗。电源有两种规格,一是4.8V,一是6.0V,分别对应不同的转矩标准,即输出力矩不同,6.0V对应的要大一些,具体看应用条件;另外一根线是控制信号线,Futaba的一般为白色,JR的一般为桔黄色。另外要注意一点,SANWA的某些型号的舵机引线电源线在边上而不是中间,需要辨认。但记住红色为电源,灰色为地线,剩下的一根为信号线,一般不会搞错。本实验中,舵机红色接TPYBoard v102+的VIN引脚,灰色接TPYBoard v102+的GND引脚,剩下的橙色是信号线,接TPYBoard V102+的X3针脚。TPYBoard v102+ 的X1、X2、X3、X4为信号引脚。

3、舵机工作原理
控制电路板接受来自信号线的控制信号,控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机转动的方向和速度,从而达到目标停止。其工作流程为:控制信号→控制电路板→电机转动→齿轮组减速→舵盘转动→位置反馈电位计→控制电路板反馈。
五、伺服电机的构造函数与方法
1、构造函数
pyb.Servo(id)
在这id为1-4,对应TPYBoard v102+的X1-X4。
2、方法
Servo.angle([angle,time = 0 ])
如果没有给出参数,则该函数返回当前角度。
如果给出参数,则该函数设置伺服角度:
- angle 是以度数移动的角度。
- time是达到指定角度所需的毫秒数。如果省略,则伺服器尽可能快地移动到其新位置。
Servo.speed([speed, time=0])
如果没有给出参数,则该函数返回当前速度。
如果给出参数,则该功能设置伺服的速度:
- speed 是在-100到100之间变化的速度。
- time是达到指定速度所需的毫秒数。如果省略,则伺服器尽可能快地加速。
Servo.pulse_width([value ])
如果没有给出参数,该函数返回当前的原始脉冲宽度值。
如果给出参数,则该函数设置原始脉冲宽度值。
Servo.calibration([pulse_min,pulse_max,pulse_centre [,pulse_angle_90,pulse_speed_100 ]])
如果没有给出参数,则该函数返回当前的校准数据,作为5元组。
如果给出参数,该功能设置时序校准:
- pulse_min 是允许的最小脉冲宽度。
- pulse_max 是允许的最大脉冲宽度。
- pulse_centre 是对应于中心/零位置的脉冲宽度。
- pulse_angle_90 是对应于90度的脉冲宽度。
- pulse_speed_100 是对应于速度100的脉冲宽度。
六、实验要求
本实验为智能避障小车的实验,主要实现小车的避障功能,当前方距离过近的时候,TPYBoard v102+会控制舵机转动超声波云台支架来判断前方、左前方、右前方的距离,从而控制小车向左转,向右转或者向前转,实现避障的功能。
七、实验效果
视频地址:http://player.youku.com/player.php/sid/XMjY2MTQ1NDA2MA==/v.swf
八、源代码
变量命名有点low,大家自己改吧。
# main.py -- put your code here!
#www.tpyboard.com
#turnipsmart.taobao.com
import pyb
from pyb import Pin
from pyb import Timer
from pyb import servo x1 = Pin('X1', Pin.OUT_PP)
x2 = Pin('X2', Pin.OUT_PP)
y1 = Pin('Y1', Pin.OUT_PP)
y2 = Pin('Y2', Pin.OUT_PP)
Trig = Pin('X9',Pin.OUT_PP)
Echo = Pin('X10',Pin.IN) num=0
flag=0
run=1
zuo=0
qian=0
you=0
distance=0
def start(t):
global flag
global num
if(flag==0):
num=0
else:
num=num+1
def stop(t):
global run
if(run==0):
run=1
start1=Timer(1,freq=10000,callback=start)
stop1=Timer(4,freq=2,callback=stop) #小车左转
def left():
x1.high()
x2.low()
y1.high()
y2.low()
#小车前进
def go():
x1.high()
x2.low()
y1.low()
y2.high()
#小车后退
def back():
x1.low()
x2.high()
y1.high()
y2.low()
#小车右转
def right():
x1.low()
x2.high()
y1.low()
y2.high()
#小车停止
def stop():
x1.low()
x2.low()
y1.low()
y2.low()
#控制舵机向右、向左、向前
def servo():
global distance
global zuo
global you
global qian
servo3=pyb.Servo(3)
#向右75旋转
servo3.angle(-75,500)
pyb.delay(1000)
ceju()
you=distance
print('you',you)
#向左转75度
servo3.angle(75,500)
pyb.delay(1000)
ceju()
zuo=distance
print('zuo',distance)
#转到0度
servo3.angle(0,500)
pyb.delay(1000)
ceju()
qian=distance
print('qian',distance)
#返回正前方、左前方、右前方的距离
return qian,zuo,you
#测距方法
def ceju():
global flag
global num
global run
global distance
if(run==1):
Trig.value(1)
pyb.udelay(100)
Trig.value(0)
while(Echo.value()==0):
Trig.value(1)
pyb.udelay(100)
Trig.value(0)
flag=0
if(Echo.value()==1):
flag=1
while(Echo.value()==1):
flag=1
if(num!=0):
#测距
distance=num/10000*34299/2
#print('Distance:')
#print(distance,'cm')
pyb.delay(500)
flag=0
run=0
return distance
def main():
global distance
global zuo
global you
global qian
servo3=pyb.Servo(3)
servo3.angle(0,500)
pyb.delay(1000)
ceju()
while 1==1:
ceju()、
#前方距离大于40cm前进
if distance > 40:
go()
ceju()
print('juli',distance)
#前方距离小于40cm
if distance <= 40:
stop()
back()
pyb.delay(500)
stop()
servo()
#如果右前方距离大于左前方
if you>zuo:
right()
pyb.delay(400)
ceju()
#如果左前方距离大于右前方
if zuo>you:
left()
pyb.delay(400)
ceju()
#如果所有方向距离全部小于15cm
if zuo<15 and you< 15 and qian<15 :
stop()
back()
pyb.delay(800)
stop()
ceju()
#有一个方向距离小于5CM
if zuo<5 or you <5 or qian<5:
stop()
back()
pyb.delay(800)
stop()
ceju()
main()
[TPYBoard - Micropython 之会python就能做硬件 9] 五分种学会用TPYBoard V102 制作避障小车(升级版)的更多相关文章
- [TPYBoard - Micropython之会python就能做硬件 1] 运行第一个脚本——点亮LED
转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 会python就能做硬件! 一.TPYBoard V102开发板 TPYBoard V102 ...
- [TPYBoard - Micropython之会python就能做硬件 开篇]会python就能做硬件!
转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 会python就能做硬件! 在写这套教程之前,首先感觉山东萝卜电子科技有限公司(turnip ...
- [TPYBoard - Micropython之会python就能做硬件 8] 学习使用蓝牙模块及舵机
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.实验器材 1.TPYboard V102板 一块 2.电机驱动模块L2 ...
- [TPYBoard - Micropython之会python就能做硬件 8] 学习使用超声波模块制作避障小车
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.实验器材 1.TPYboard V102板 一块 2.电机驱动模块L2 ...
- [TPYBoard - Micropython之会python就能做硬件 6] 学习使用OLED显示屏
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.实验器材 1.TPYBoard板子一块 2.数据线一条 ...
- [TPYBoard - Micropython] 五分种学会用TPYBoard - GPS 制作短信群发机
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.什么是TPYBoard-GPS TPYBoard-GPS又称TPYBoa ...
- [TPYBoard-Micropython之会python就能做硬件 2] 利用micropython控制NOKIA 5110屏
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.TPYboard V102板 一块 2.DS3231 ...
- [TPYBoard-Micropython之会python就能做硬件 3] 制作电子时钟
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.TPYboard V102板 一块 2.DS3231 ...
- [TPYBoard-Micropython之会python就能做硬件 4] 学习使用电位器和1602显示屏
一.实验器材 1.TPYboard V102板 一块 2.电位器 一个 3.1602 屏 一块 4.杜邦线:若干 二.电位器的使用 电位器 (英文:Potentiometer)是可变电阻器的一种 ...
随机推荐
- C# Webform中读取Windows AD/LDAP域用户清单
直接上干货,核心代码如下,读取出来相应的用户清单到DataTable中.需要其它字段可以自己增加,别忘了引用using System.DirectoryServices. #region privat ...
- C++编程练习(2)----“实现简单的线性表的链式存储结构“
单链表采用链式存储结构,用一组任意的存储单元存放线性表的元素. 对于查找操作,单链表的时间复杂度为O(n). 对于插入和删除操作,单链表在确定位置后,插入和删除时间仅为O(1). 单链表不需要分配存储 ...
- 通过web sql实现增删查改
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- GitHub 上下载代码运行报错 :'The sandbox is not sync with the Podfile.lock\'
问题描述: github下载的Demo,很多时候使用到CocoaPods,有的时候因为依赖关系或者版本问题不能编译运行.出现例如The sandbox is not sync with the Pod ...
- 【Java基础】线程和并发机制
前言 在Java中,线程是一个很关键的名词,也是很高频使用的一种资源.那么它的概念是什么呢,是如何定义的,用法又有哪些呢?为何说Android里只有一个主线程呢,什么是工作线程呢.线程又存在并发,并发 ...
- HR从业者的下一个十年该怎么做?
众所周知,目前我们所处的以互联网为代表的新经济时代,有两个重要的特征一是客户价值至上,二是人力资本主权.围绕这两个基本特征,我们需要重新架构我们的商业模式和创新人力资源管理思维.模式.工具和方法. 人 ...
- vim高亮设置
vim高亮设置 前提: 查看vim是否完整安装 rpm -qa | grep vim 若完整安装,则会出现如下相关信息 vim-filesystem-7.4.629-5.el6.x86_64 vim- ...
- OpenCv 2.4.9 (二) 核心函数
前言 经过前面一节的怎样读取图片,我们可以做一些有趣的图像变换,下面我们首先介绍使用遍历的方法实现,然后我们使用内置的函数实现. 矩阵掩码实现 矩阵掩码,和卷积神经网络中的卷积类似.一个例子如下: 现 ...
- 监听器如何获取Spring配置文件(加载生成Spring容器)
Spring容器是生成Bean的工厂,我们在做项目的时候,会用到监听器去获取spring的配置文件,然后从中拿出我们需要的bean出来,比如做网站首页,假设商品的后台业务逻辑都做好了,我们需要创建一个 ...
- Java工程师:四个月小白变大咖,你能做到吗?
你眼中的Java工程师是什么样子? 技术大牛?闷骚男?IT民工?没有女朋友?全是汉子?很邋遢?贼眉鼠眼? 今天,中软国际卓越工程师,Java精英班正式开课啦.你想看看他们都是一群怎样的人吗? 今天的武 ...