[详细实例]MicroPython拼插编程实战:DIY一台会思考的壁障车
(转载请注明文章来源,更多教程可自助参考www.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇)
在日常生活中,大家会经常见到各种各样的遥控车,它需要我们人为的操作,控制它的前进、后退和转弯。今天就带大家认识一个不一样的新朋友--“会思考的避障车”。“会思考的避障车”和我们平时的遥控车最主要的区别就是智能化,它可以不需要我们去操控,自己就能行走。同时它还会实时检测前方是否有障碍物,思考自己是否要前进或者转弯。看到这里,是不是已经跃跃欲试了呢。话不多说,动起手来吧!

一、 所需器材:
1、TurnipBit开发板 1块(TB上可以买到)
2、下载数据线 1条
3、智能小车套件 1套(底盘、车轮、电机等)
4、超声波模块(HC-SR04)1个(用作小车的“眼睛”)
5、L298N电机驱动模块 1个
6、接入互联网的电脑 1台(推荐使用Google Chome或者Firefox浏览器)
二、壁障车的组装
第一步,先把小车底板、紧固件、码盘的黄色保护纸撕掉,然后把紧固件插入小车底板。

第二步,安装码盘,并把电机固定于底板。码盘轴心一面大一面小,大的一面往电机轴插(注意:电机引线铜片朝向内侧,即码盘一端)。

第三步,插入螺丝,把电机固定到小车底板,并拧上螺帽。

第四步,插入螺丝,固定电池盒。本实验中这一步可以省略,我们使用充电宝进行供电。

第五步,放入铜柱,拧紧8个螺丝固定万向轮,手捏住电机(保护紧固件),并往里面插入轮子,组装完成。

最后,我们来看一下组装完成的效果图。

三、电机驱动和超声波的安装
硬件的连接,主要是各引脚间的连接。具体为(详见下表):超声波模块共4个引脚,分别是VCC、GND、Trig和Echo。VCC接TurnipBit扩展板的+5V引脚,GND接TurnipBit扩展板的GND引脚,Trig触发引脚接P5,Echo回传引脚接P8。L298N电机驱动模块左侧OUT3、OUT4接线端子对应接入左轮电机的下侧、上侧侧铜片,右侧也是。L298N的输入端IN1、IN2、IN3、IN4分别接入扩展板的P19、P13、P12、P11。最后,本实验利用充电宝进行供电,只需将充电板通过usb线连接TurnipBit开发板的microusb口即可。



四、拼插编程
步骤1:因为P11和P12控制一个车轮,P13和P19控制一个车轮,只需要给相应车轮的P12和P19高电平,另外两个引脚低高平,避障车两个车轮就会转动,如果此时转动方向两个轮子不同或者是向后,说明你在连线时没有注意连接的L298N的引脚,只需要调换一下,避障车就会向前走,如下图。

步骤2:添加一个死循环,使程序一直运行。

步骤3:接下来就需要完成检测障碍物的功能,这部分需要超声波模块来实现。我们需要在死循环内添加障碍物检测的内容,让避障车一直不断的检测与前方障碍物的距离。

步骤4:为了更简单、方便、快捷的实现功能,我们采用计数的方式,测量一个大概的距离,然后进行判定是否进行避障。细心的同学可能会发现我们在程序一开始的时候定义了一个num的变量,我们就用num来计数。当引脚8为高电平时,表示超声波模块的echo进入接收模式,我们就不断的让num自加1,一直等到超声波模块接收到返回的信号,即引脚8为低电平时,停止计数。这里的num就能反映出当前小车与障碍物之间的距离。这里以25厘米为安全距离进行测试,发现num的数值为8。于是说明,如果小车与障碍物之间的距离小于25厘米时,num就小于8。所以程序中判断如果num的值小于或等于8时,就进行转向避障。

步骤5:到此,会思考的避障车已经完成了。为了让避障车更加炫酷,我们可以使用LED屏来动态显示当前避障车行驶的方向。方法是在小车做出转向动作前,先用箭头来显示转向的方向,然后再做动作。

步骤6:将程序名修改成turnipbit-car,点击【下载hex】按钮将程序保存到电脑里。把保存的turnipbit- car.hex文件拖入TurnipBit磁盘中,我们会看到TurnipBit板子上的灯在闪烁,说明正在下载到控制板中。下载成功后,将TurnipBit正确插入TurnipBit扩展板的金手指卡槽内,开始启动避障车吧。

(转载请注明文章来源,更多教程可自助参考www.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇)
[详细实例]MicroPython拼插编程实战:DIY一台会思考的壁障车的更多相关文章
- MicroPython可视化编程开发板—TurnipBit自制MP3教程实例
转载请以链接形式注明文章来源(MicroPythonQQ技术交流群:157816561,公众号:MicroPython玩家汇) 当前我们都生活在一个有声有色的社会当中,欣赏美丽的景色,享受动人的音乐, ...
- 【Java并发编程实战】-----“J.U.C”:Semaphore
信号量Semaphore是一个控制访问多个共享资源的计数器,它本质上是一个"共享锁". Java并发提供了两种加锁模式:共享锁和独占锁.前面LZ介绍的ReentrantLock就是 ...
- 【Java并发编程实战】-----“J.U.C”:ReentrantLock之一简介
注:由于要介绍ReentrantLock的东西太多了,免得各位客官看累,所以分三篇博客来阐述.本篇博客介绍ReentrantLock基本内容,后两篇博客从源码级别分别阐述ReentrantLock的l ...
- 【Java并发编程实战】-----“J.U.C”:锁,lock
在java中有两种方法实现锁机制,一种是在前一篇博客中([java7并发编程实战]-----线程同步机制:synchronized)介绍的synchronized,而另一种是比synchronized ...
- 【Java并发编程实战】-----synchronized
在我们的实际应用当中可能经常会遇到这样一个场景:多个线程读或者.写相同的数据,访问相同的文件等等.对于这种情况如果我们不加以控制,是非常容易导致错误的.在java中,为了解决这个问题,引入临界区概念. ...
- Linux下的C编程实战
Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来, Linu ...
- Linux下的编程实战【转】
一篇比较不错的文章, 降到了 makefile make , gcc编译器,GDB调试器, Linux文件系统,Linux文件API,.C语言库函数(C库函数的文件操作实际上是独立于具体的操作系统平台 ...
- Java多线程编程实战指南(核心篇)读书笔记(五)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76730459冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程实战指南(核心篇)读书笔记(四)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76690961冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
随机推荐
- 【Java基础】【19异常&IO(File类)】
19.01_异常(异常的概述和分类) A:异常的概述 异常就是Java程序在运行过程中出现的错误. B:异常的分类 通过API查看Throwable Error 服务器宕机,数据库崩溃等 Except ...
- 使用yum安装不知道到底安装在什么文件夹
find /* >yum001 #记录之前的文件夹 find /* >yum002 #记录安装完成后的文件夹 diff yum001 yum002 >yum000 ...
- 基于.Net进行前端开发的技术栈发展路线(二)
前言 上一篇<我的技能树>文章分享了我的技能成长过程,还未完成,今天继续跟大家分享. 01 我的技能树 我的当前的技能树: 其中,标注为黄色旗帜的是基本掌握,标注为红色旗帜的为使用熟练.未 ...
- webpack4.0各个击破(10)—— Integration篇
webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习we ...
- Qt的内存管理机制
当我们在使用Qt时不可避免得需要接触到内存的分配和使用,即使是在使用Python,Golang这种带有自动垃圾回收器(GC)的语言时我们仍然需要对Qt的内存管理机制有所了解,以更加清楚的认识Qt对象的 ...
- VS2017移动开发(C#、VB.NET)——Numeric控件的使用方式
Visual Studio 2017移动开发 控件介绍和使用方式:Numeric控件 Smobiler开发平台,.NET移动开发 一. 样式一 我们要实现上图中的效果,需要如下的操作 ...
- MySQL 笔记整理(6) --全局锁和表锁:给表加个字段怎么有这么多阻碍
笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 6) --全局锁和表锁:给表加个字段怎么有这么多阻碍 数据库锁设计的初衷是处理并发问题.作为多用户共享的资源,当出现并发访问的时候, ...
- JAVA程序员面试30问(附带答案)
第一,谈谈final, finally, finalize的区别. 最常被问到.final修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能 ...
- Java开发笔记(三十一)字符类型的表达
前面介绍的Java编程,要么是与数字有关的计算,要么是与逻辑有关的推理,充其量只能实现计算器和状态机.若想让Java运用于更广阔的业务领域,就得使其支撑更加血肉丰满的业务场景,而丰满的前提是能够表达大 ...
- 3. 基于优先级的Queue(PriorityBlockingQueue)
package com.gf.conn013; import java.util.Iterator; import java.util.concurrent.PriorityBlockingQueue ...