Difference between revisions of "快速上手 香蕉派 Q-Car"

From Banana Pi Wiki
Jump to: navigation, search
(基本入门)
(巡线行驶)
 
(76 intermediate revisions by 3 users not shown)
Line 2: Line 2:
  
 
=产品介绍=
 
=产品介绍=
[[File:Q-Car_With_Micro_Bit.png|thumb|BPI Q-Car with micro:bit]]
+
[[File:Q-Car_With_Micro_Bit.png|thumb|[[香蕉派 Q-Car]] with micro:bit]]
 
[[File:Q-Car_With_Web_Bit.png|thumb|BPI Q-Car with [[BPI-Bit ]]]]
 
[[File:Q-Car_With_Web_Bit.png|thumb|BPI Q-Car with [[BPI-Bit ]]]]
 
[[File:BPi-QCar_1.jpg|thumb|BPI-QCar with [[BPI-AI]] board]]
 
[[File:BPi-QCar_1.jpg|thumb|BPI-QCar with [[BPI-AI]] board]]
Line 88: Line 88:
  
 
=Q-Car 配合 Micro:Bit 使用MakeCode环境编程=
 
=Q-Car 配合 Micro:Bit 使用MakeCode环境编程=
[[基本入门]]
 
  
==基本入门==
+
==基础教程==
==基本入门==
+
 
 
===MakeCode编程点亮Micro:Bit===
 
===MakeCode编程点亮Micro:Bit===
 +
 
学习目标:熟悉基础的MakeCode的应用并在Micro:Bit的5*5LED矩阵上显示一些图形或文字。
 
学习目标:熟悉基础的MakeCode的应用并在Micro:Bit的5*5LED矩阵上显示一些图形或文字。
  
 
打开Micro:Bit的MakeCode编程环境网页端:https://makecode.microbit.org/
 
打开Micro:Bit的MakeCode编程环境网页端:https://makecode.microbit.org/
  
新建一个项目,参照下图的例程连接MakeCode积木,例如其中第一个积木块“show leds”可以在“Basic”选项栏目中找到,此积木可以自行编辑想要输出的图形
+
新建一个项目,参照下图的例程连接MakeCode积木,例如其中第一个积木块“show leds”可以在“Basic”选项栏目中找到,此积木可以自行编辑想要输出的图形。
  
 
[[Image:Microbit-screenshot_(display_graphics).png]]
 
[[Image:Microbit-screenshot_(display_graphics).png]]
Line 103: Line 103:
 
右键积木可对积木进行一些操作,如添加注释,删除复制积木,以及'''查阅积木对应的说明文档''',这个对于初次上手的人来说能提供很大的帮助。
 
右键积木可对积木进行一些操作,如添加注释,删除复制积木,以及'''查阅积木对应的说明文档''',这个对于初次上手的人来说能提供很大的帮助。
  
MakeCode编程环境有'''自带模拟程序运行效果的仿真器'''可以实时查看效果,通常显示在左上方
+
MakeCode编程环境有'''自带模拟程序运行效果的仿真器'''可以实时查看效果,通常显示在左上方。
  
MakeCode编程环境也支持从外部导入项目文件,如经过MakeCode编译生成的.hex文件
+
MakeCode编程环境也支持从外部导入项目文件,如经过MakeCode编译生成的.hex文件。
  
 
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-display-graphics.hex
 
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-display-graphics.hex
  
'''注意''':正确的.hex文件导入方式是将上文链接中的.hex文件下载到本地然后将其导入到MakeCode中,而不是直接将此链接导入,外部项目链接导入MakeCode的方式与此处不同
+
'''注意''':正确的.hex文件导入方式是将上文链接中的.hex文件下载到本地然后将其导入到MakeCode中,而不是直接将此链接导入,外部项目链接导入MakeCode的方式与此处不同。
  
 
[[Image:Makecode(import_file).png]]
 
[[Image:Makecode(import_file).png]]
  
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行
+
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
 
+
----
===按钮控制Micro:Bit-基础===
+
===按钮控制Micro:Bit输出图形===
  
学习目标:使用Micro:Bit上的AB两个按钮控制LED矩阵所要输出的图形
+
学习目标:使用Micro:Bit上的AB两个按钮控制LED矩阵所要输出的图形。
  
在章节“使用MakeCode编程点亮Micro:Bit”的基础上,在MakeCode中“input”选项栏目中找到应用按钮控制的积木“on button A pressed”来进行编程
+
在章节“使用MakeCode编程点亮Micro:Bit”的基础上,在MakeCode中“input”选项栏目中找到应用按钮控制的积木“on button A pressed”来进行编程。
  
例程如下图,实现按一下A按钮显示英文字符“A”,按一下B按钮显示英文字符“B”,同时按下AB按钮后显示一个形似香蕉的图案
+
例程如下图,实现按一下A按钮显示英文字符“A”,按一下B按钮显示英文字符“B”,同时按下AB按钮后显示一个形似香蕉的图案。
  
 
[[Image:Using_the_button.png]]
 
[[Image:Using_the_button.png]]
Line 127: Line 127:
 
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Using_the_button_1.hex
 
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Using_the_button_1.hex
  
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行
+
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
 +
----
 +
===Micro:Bit按钮计数器===
  
===按钮控制Micro:Bit-进阶===
+
学习目标:用MakeCode编程实现一个计数并显示的按钮控制程序。
  
学习目标:用MakeCode编程实现一个计数并显示的按钮控制程序
+
在前一章节的基础上,先在MakeCode中“Variables”选项栏目中新建一个变量名为“A_was_pressed_times”的变量,此时将在“Variables”选项栏目产生多个关于变量的积木。
  
在前一章节的基础上,先在MakeCode中“Variables”选项栏目中新建一个变量名为“A_was_pressed_times”的变量,此时将在“Variables”选项栏目产生多个关于变量的积木
+
将“Math”选项栏目中的加法积木与“Variables”选项栏目中的积木镶嵌组合,参照下图例程。
 
 
将“Math”选项栏目中的加法积木与“Variables”选项栏目中的积木镶嵌组合,参照下图例程
 
  
 
[[Image:Using_the_button_2.png]]
 
[[Image:Using_the_button_2.png]]
  
此时,我们就实现了在MakeCode编程并做出了一个利用加法计数的程序,按一次按钮A计数加1同时将计数值输出到LED矩阵中,按一次按钮B计数归0并清除LED矩阵的显示
+
此时,我们就实现了在MakeCode编程并做出了一个利用加法计数的程序,按一次按钮A计数加1同时将计数值输出到LED矩阵中,按一次按钮B计数归0并清除LED矩阵的显示。
  
 
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Using_the_button_2.hex
 
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Using_the_button_2.hex
  
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行
+
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
 +
----
 +
===氛围灯控制===
 +
 
 +
学习目标:用MakeCode编程实现对Q-Car上10颗WS2812B彩色氛围灯的控制。
 +
 
 +
例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,Q-Car上的10颗WS2812B彩灯将同时以1800ms一周期循环彩虹光效。
 +
 
 +
[[Image:Q-Car_Pixel.png]]
  
===车轮测速===
+
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-Car_Pixel.hex
  
学习目标:用MakeCode编程实现读取Q-Car上用于车轮测速的红外对管的高低电平信号并用计数法算出车轮转速
+
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
  
例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,此时旋转Q-Car左右轮,可以从USB串口中读取到左右轮转速
+
----
 +
===蜂鸣器的使用===
 +
 
 +
学习目标:用MakeCode编程编写一段曲子并在Q-Car的蜂鸣器上播放。
 +
 
 +
例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,按一次A按钮,Q-Car上的蜂鸣器将循环两次播放曲子。
 +
 
 +
[[Image:Q-car_Music_Arrangement.png|500px]]
 +
 
 +
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-car_Music_Arrangement.hex
 +
 
 +
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
 +
----
 +
 
 +
===电机控制-应用扩展积木===
 +
 
 +
学习目标:用MakeCode编程实现用按钮控制Q-Car行驶状态。
 +
 
 +
例程如下图,应用了Q-Car专属扩展积木,扩展积木对应实现的功能直观明了,可有效降低入门难度。
 +
 
 +
将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,接通电源,按下Micro:Bit的A按钮,Q-Car向前行驶,按下micro:bit的B按钮,Q-Car向后行驶,同时按下micro:bit的AB按钮,Q-Car停车。
 +
 
 +
[[Image:Q-Car_Motor_control_module2.png]]
 +
 
 +
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Qcar-demo-button_control-1.hex
 +
 
 +
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
 +
 
 +
----
 +
 
 +
===超声波测距-应用扩展积木===
 +
 
 +
学习目标:用MakeCode编程实现Micro:Bit显示超声波测距模块的测距数值。
 +
 
 +
例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,将超声波测距模块与Q-Car连接,接通电源,
 +
 
 +
Micro:Bit将显示测距数值的整数,单位为cm。
 +
 
 +
[[Image:Q-car_Ultrasonic_ranging2.png]]
 +
 
 +
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-car_Ultrasonic_ranging2.hex
 +
 
 +
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
 +
 
 +
 
 +
==进阶教程==
 +
 
 +
===光电计数器===
 +
 
 +
学习目标:
 +
 
 +
# 理解Q-Car上靠近车轮内侧的红外对管与车轮上的编码盘之间是如何组成光电开关的
 +
# 学习如何通过MakeCode编程设计一个计数器
 +
 
 +
[[Image:Q-car_wheel_1.jpg|500px]]
 +
 
 +
[[Image:Q-car_wheel_2.jpg|500px]]
 +
 
 +
在Q-Car上有一对D字轴橡胶车轮,带有12线编码盘,在底部紧贴编码盘的位置放置了红外对管用于采集编码盘的信息。
 +
 
 +
[[Image:Infrared_tube_pair.png]]
 +
 
 +
红外对管一侧发射红外光,一侧接收红外光,接收端将反射回的光线强弱的信息转化为电压高低的信号。
 +
 
 +
micro:bit的P11引脚为高电平时Q-Car上的红外对管才会通电工作。
 +
 
 +
与右车轮的编码盘紧贴的红外对管与micro:bit的P5引脚相连,而左车轮的编码盘紧贴的红外对管与micro:bit的P11引脚相连。
 +
 
 +
以右轮为例,可以制作一个测试程序,检测右轮编码盘对应的红外对管向P5引脚输出高低电平信号,例程如下图。
 +
 
 +
[[Image:Q-Car_Photoelectric_switch_test.png]]
 +
 
 +
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Photoelectric_switch_test.hex
 +
 
 +
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
 +
 
 +
将程序下载进micro:bit,然后保持USB串口连接,将micro:bit插入Q-Car的插槽,
 +
 
 +
[[Image:Q-car_wheel_3.jpg|500px]]
 +
 
 +
旋转右轮使编码盘的凹口对向红外对管,此时micro:bit显示0,即表明此时红外对管输出给P5引脚的是低电平信号
 +
 
 +
[[Image:Q-car_wheel_4.jpg|500px]]
 +
 
 +
旋转右轮使编码盘的凸柱对向红外对管,此时micro:bit显示1,即表明此时红外对管输出给P5引脚的是高电平信号
 +
 
 +
这犹如一个物理开关的接通与关断两个状态,编码盘与红外对管构成了一个光电开关。
 +
 
 +
以右轮为例,参照micro:bit按钮计数器即可设计出Q-Car车轮上的编码盘与红外对管组合的光电计数器,例程如下图。
 +
 
 +
[[Image:Q-Car_Photoelectric_counter.png]]
 +
 
 +
较比按钮计数器,我们可以加入一个间隔一段时间输出一次内容的功能。
 +
 
 +
"running time(ms)"积木会获取程序从启动或复位以来至读取这个积木为止的时间,单位为毫秒,即获取从开机到现在所经过的时间。
 +
 
 +
在"forever"积木中加入"if"条件积木,设置一个变量"A_was_pressed_times"用于储存每当条件满足时的时间数值,
 +
 
 +
判断条件为当前时间减去变量大于等于1000ms时,显示一次计数值,将此次满足条件的时间数值储存到变量中用于下次判断,即实现了间隔1s让micro:bit显示一次计数值。
 +
 
 +
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Photoelectric_counter.hex
 +
 
 +
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
 +
----
 +
 
 +
===利用光电计数器进行转速测量===
 +
 
 +
学习目标:理解转速的定义,用MakeCode编程在光电计数器的基础上设计转速测量
 +
 
 +
先简单的陈述转速的定义,即物体在单位时间内旋转360°的次数。RPM是一个较常用的转速单位,表示设备每分钟的旋转次数。
 +
 
 +
我们从直觉上理解,通过计数器统计1分钟Q-Car车轮的编码盘计数值除以12即可得到RPM转速值,但这样显然得到的信息时效性滞后了太多。
 +
 
 +
如果将统计时间缩短到5秒甚至1秒,例如统计1秒Q-Car右轮的编码盘计数值除以12再乘以60,也可得到右轮RPM转速值。
 +
 
 +
例程如下图。
 +
 
 +
[[File:Q-Car_RPM_measurement_1.png]]
 +
 
 +
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-RPM_measurement_1.hex
 +
 
 +
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
 +
 
 +
条条道路通罗马,测速的方法当然不止这一种,稍微改变一下思路,记录下通过编码盘12个凸柱即车轮旋转一周所花费的时间,60秒(1分钟)除以这个时间,即为RPM转速值。
 +
 
 +
例程如下图,其中在给"Right_whell_speed"变量赋值时将计算所得值通过"round"积木取整,这样方便LED显示出整数而不会显示一长串小数。
 +
 
 +
[[File:Q-Car_RPM_measurement_2.png]]
 +
 
 +
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-RPM_measurement_2.hex
 +
 
 +
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
 +
 
 +
----
 +
 
 +
===用if条件判断制作计数器并用于车轮转速测量===
 +
 
 +
学习目标:用MakeCode编程实现读取Q-Car上用于车轮测速的红外对管的高低电平信号并用计数法算出车轮转速。
 +
 
 +
例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,此时旋转Q-Car左右轮,可以从USB串口中读取到左右轮转速。
  
 
[[Image:Q-Car_velocity_measurement_module.png]]
 
[[Image:Q-Car_velocity_measurement_module.png]]
Line 157: Line 304:
 
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-Car_velocity_measurement_module.hex
 
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-Car_velocity_measurement_module.hex
  
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行
+
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
 +
 
 +
----
  
===电机控制===
+
===电机控制-对PCA9685驱动芯片进行控制===
  
学习目标:用MakeCode编程实现Q-Car左右电机正反转控制
+
学习目标:用MakeCode编程实现Q-Car左右电机正反转控制。
  
例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,左右电机将同时正转2s,同时反转2s,右电机单独正转2s,左电机单独正转2s
+
例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,按一次A按钮,左右电机将同时正转2s,同时反转2s,右电机单独正转2s,左电机单独正转2s,同时停转。
  
[[Image:Q-Car_Motor_control_module.png]]
+
[[Image:Q-Car_Motor_control_module.png|800px]]
  
 
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-Car_Motor_control_module.hex
 
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-Car_Motor_control_module.hex
  
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行
+
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
 +
 
 +
----
  
===氛围灯控制===
+
===详解超声波测距-应用原始积木===
 +
 
 +
学习目标:
 +
# 理解超声波测距原理
 +
# 理解压电式超声波扩展模块工作原理
 +
# 用MakeCode编程实现只使用原始积木来对Q-Car上HC-SR04超声波扩展模块的控制。
 +
 
 +
“声”在1个标准大气压和15℃的条件下传导速度约为340m/s。当一段声波从声源发出,到遇到障碍物被反射传回声源所在的位置,这段声波就经过了传播时间乘以声速乘以2的距离。
 +
 
 +
超声波具有指向性强,能量消耗缓慢,在介质中传播的距离较远的特点,在精度要求不是特别严苛且在非真空的条件下,很适合用于测量直线距离,设备成本也相对低廉。
 +
 
 +
压电式超声波发生器实际上是利用压电晶体的谐振来工作的,它有两个压电晶片和一个共振板。
 +
 
 +
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。
 +
 
 +
反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。
 +
 
 +
在一个超声波测距模块上测得发射时与接收时的两段电信号之间的时间差,即为这个超声波测距模块此次发出的超声波的传播时间,进而可以计算出超声波发射源与障碍物之间的距离。
 +
 
 +
在Q-Car正面micro:bit插槽前方有一个2*4扩展槽,其中有“V,T,E,G”四个排针槽位对应从micro:bit的“3V,P13,P14,GND”引出。
 +
 
 +
[[Image:Q-car_front_view2.png|420px]]
  
学习目标:用MakeCode编程实现对Q-Car上10颗WS2812B彩色氛围灯的控制
+
可对应顺序连接HC-SR04超声波扩展模块的“VCC,Trig,Echo,GND”引脚。
  
例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,Q-Car上的10颗WS2812B彩灯将同时以1800ms一周期循环彩虹光效
+
[[File:HC-SR04.png|280px]]
  
[[Image:Q-Car_Pixel.png]]
+
由micro:bit的P13引脚向HC-SR04的Trig引脚发送持续时间大于10us的高电平信号,其发射端将产生持续8个周期,频率为40khz的超声波并向前方发射,
  
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-Car_Pixel.hex
+
当超声波反射回来被接收端检测到,HC-SR04的Echo引脚将产生一段持续时间与这段超声波的传播时间相同的高电平信号,micro:bit的P13引脚将采集到这段高电平信号,
  
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行
+
我们可以通过已知的这段高电平信号持续时间,设计一个程序求解出距离。
  
===超声波传感器控制===
+
例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,将HC-SR04超声波扩展模块与Q-Car连接,将5V电源与Q-Car连接。
  
学习目标:用MakeCode编程实现对Q-Car上HC-SR04超声波扩展模块的控制
+
[[Image:Q-car_Ultrasonic_ranging.png|700px]]
  
例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,将HC-SR04超声波扩展模块与Q-Car连接,将5V电源与Q-Car连接
+
采集P13引脚的高电平持续时间并赋值给变量"Ultrasonic_time",此处时间单位是us微秒,经过换算在15℃标准大气压下声速为0.034cm/us,
  
[[Image:Q-car_Ultrasonic_ranging.png]]
+
而25℃标准大气压下声速为0.0346cm/us, 我们选择后者用于距离计算,变量"Ultrasonic_time"乘以0.0346除以2再赋值给变量"Distance",
  
可以从Micro:Bit的USB串口读取到超声波传感器检测到的距离以及Micro:Bit上的温度传感器数据,例程实现了对超声波传感器的温度校准
+
用一个if条件判断进行消噪,小于等于0和大于500的值都做归零处理,
  
Distance=85.815|Temperature=21
+
程序上设计间隔0.1s进行一次超声波测距用以防止发射信号对回响信号的干扰,Micro:Bit的USB串口间隔1s输出超声波传感器检测到的距离。
  
 
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-car_Ultrasonic_ranging.hex
 
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-car_Ultrasonic_ranging.hex
  
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行
+
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
 +
 
 +
----
  
===蜂鸣器的使用===
+
===自动控制-利用超声波测距使Q-Car自动保持距离===
 +
 
 +
学习目标:
 +
 
 +
# 理解自动控制的基础概念
 +
# 用MakeCode编程实现利用超声波测距使Q-Car自动与前方障碍物保持相对距离的程序
 +
 
 +
自动控制是相对人工控制概念而言的,例如为了保持车与障碍物之间的间距,人眼在看到车与障碍物的间距小于一个范围时,需要手动控制车后退拉开距离,
 +
 
 +
接收到"车与障碍物的间距小于一个范围"这个信息的是人,对收集的信息产生需要如何控制的想法的是人,最后去控制车改变状态的也是人,即是人工控制。
 +
 
 +
相对的,让设备列如超声波测距传感器接收信息,将信息转化为电讯号传递给处理器,处理器按照既定的程序将与收集到的信息对应该发出的控制信号发给电机驱动模块,
 +
 
 +
进而改变车的状态使车后退拉开距离,人除了编程和启动这套控制系统以外,再不参与接收信息并反馈控制,这套控制系统即为自动控制系统。
 +
 
 +
我们可以在MakeCode编程来实现一个保持Q-Car与障碍物的间距的程序,例程如下图。
 +
 
 +
[[File:Q-car_Ultrasonic_control_demo.png|720px]]
  
学习目标:用MakeCode编程编写一段曲子并在Q-Car的蜂鸣器上播放
+
在例程中设计了一个while true循环,在循环中最开始读取一次超声波测距的数值并赋值给一个变量,然后进行关于这个变量的判断,大于30cm停车,小于等于30cm且大于10cm则以20%转速前进,
  
例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,Q-Car上的蜂鸣器将循环两次播放曲子
+
小于等于10cm且大于等于9cm则停车,小于9cm则以20%转速后退,这有些类似于“自动倒车系统”。
  
[[Image:Q-car_Music_Arrangement.png]]
+
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Qcar-demo_ultrasonic1.hex
  
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-car_Music_Arrangement.hex
+
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。
  
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行
+
----
  
 
===巡线行驶===
 
===巡线行驶===
  
学习目标:用MakeCode编程实现Q-Car巡线行驶,巡线红外对管模拟值校准,超声波测距及遇障停车
+
学习目标:用MakeCode编程实现Q-Car巡线行驶,巡线红外对管模拟值校准,超声波测距及遇障停车。
  
例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,打开电源开关,
+
例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,打开电源开关。
  
待LED矩阵显示右箭头时,将Q-Car的底部前端两个巡线红外对管水平对齐放置在巡线线路正上方,
+
待LED矩阵显示右箭头时,将Q-Car的底部前端两个巡线红外对管放置在线路周围白色路面上方。
  
按下B按钮,等待校准程序完成后LED矩阵将显示左箭头,此时将Q-Car车头对向线路行进方向,
+
按下A按钮,等待校准程序完成后LED矩阵将显示左箭头,此时将Q-Car车头对向线路行进方向。
  
按下A按钮,Q-Car将开始巡线行驶,行驶过程中如超声波测距模块检测到前方有小于等于10cm间距的物体将停车
+
按下B按钮,Q-Car将开始巡线行驶,行驶过程中如超声波测距模块检测到前方有小于等于10cm间距的物体将停车。
  
[[Image:Q-car_Line_patrol.png]]
+
[[Image:Q-car_Line_patrol.png|800px]]
  
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-car_Line_patrol.hex
+
例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-car_Line_tracking.hex
  
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行
+
项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。

Latest revision as of 00:13, 9 September 2021


产品介绍

香蕉派 Q-Car with micro:bit
BPI Q-Car with BPI-Bit
BPI-QCar with BPI-AI board

大家好,我是Q-Car,你也可以叫我小Q,是一款专注于创客教育的机器人。兼容了Web:Bit和Micro:Bit两款开发板。小巧的车身,高度集成的功能,即插即用,能快速小朋友的注意力,完成图形编程的快速入门,培养独立思考能力和逻辑思维能力

关键特性

  • 支持Makecode图形化编程,支持Webduino图形化编程及MicroPython编程
  • 车身小巧,整体性强
  • N20微型减速电机
  • 红外发射、红外接收、巡线、测速、氛围灯、I2C接口(支持3.3V和5V)、超声波接口、蜂鸣器、舵机接口、排针扩展口、扩展螺孔等等......功能齐全,扩展性强
  • 轻松上手

Q-Car 配合BPI:Bit 使用Arduino环境编程

Arduino是一款便捷灵活、方便上手的开源电子原型平台。在社区的努力下,BPI:Bit可以通过Arduino环境编程,具体环境搭建教程可以参考BPI:bit_for_Arduino

电机控制

学习目标:掌握Q-Car的电机控制基本方法

程序效果展示:小车前进1秒,停100ms,后退1秒,停100ms,左转1秒,停100ms,右转1秒,停100ms。

Q-Car Motor Test.gif

Arduino程序链接:https://github.com/BPI-STEAM/Q-Car/tree/master/SoftWare/Web_Bit_Arduino/Motor_Demo

氛围灯控制

学习目标:了解Q-Car的RGB氛围灯的基本使用方法

程序效果展示:底部RGB氛围灯红、绿、蓝三色混合渐变显示出多种颜色,呈现出彩色呼吸效果。

Q-Car Pixel Test.gif

Arduino程序链接:https://github.com/BPI-STEAM/Q-Car/tree/master/SoftWare/Web_Bit_Arduino/Pixel_Demo

超声波传感器控制

学习目标:掌握Q-Car的超声波传感器的使用方法

程序效果展示:串口显示超声波测得的距离数据。

Q-Car Ultrasonic Test 1.gif

Q-Car Ultrasonic Test 2.png

Arduino程序链接:https://github.com/BPI-STEAM/Q-Car/tree/master/SoftWare/Web_Bit_Arduino/Ultrasonic_Demo

蜂鸣器的使用

学习目标:掌握Q-Car的蜂鸣器的使用方法

程序效果展示:蜂鸣器播放“小星星音乐”

Arduino程序链接:https://github.com/BPI-STEAM/Q-Car/tree/master/SoftWare/Web_Bit_Arduino/Buzzer_Demo

红外遥控

学习目标:掌握Q-Car的红外遥控

程序效果展示:红外遥控Q-Car前进后退以及转弯

Q-Car IR Control.gif

Arduino程序链接:https://github.com/BPI-STEAM/Q-Car/tree/master/SoftWare/Web_Bit_Arduino/IR_Control_Demo

超声波避障

程序效果展示:开机小车前进,超声波检测前方距离,如果距离小于8cm,小车左右查看两边障碍物,选择距离更远的方向拐弯,避开障碍物。

配件准备:M2铜柱×2,M2螺丝×2,SR04超声波模块×1,超声波支架×1,舵机支架×1(支架下载地址),杜邦线若干,插入前方的SR04接口。

Q-Car Avoidance Demo.gif

Arduino程序链接:https://github.com/BPI-STEAM/Q-Car/tree/master/SoftWare/Web_Bit_Arduino/Avoidance_Demo

巡线行驶

Q-Car 配合 BPI:Bit 使用MicroPython环境编程

Q-Car 配合 Micro:Bit 使用MakeCode环境编程

基础教程

MakeCode编程点亮Micro:Bit

学习目标:熟悉基础的MakeCode的应用并在Micro:Bit的5*5LED矩阵上显示一些图形或文字。

打开Micro:Bit的MakeCode编程环境网页端:https://makecode.microbit.org/

新建一个项目,参照下图的例程连接MakeCode积木,例如其中第一个积木块“show leds”可以在“Basic”选项栏目中找到,此积木可以自行编辑想要输出的图形。

Microbit-screenshot (display graphics).png

右键积木可对积木进行一些操作,如添加注释,删除复制积木,以及查阅积木对应的说明文档,这个对于初次上手的人来说能提供很大的帮助。

MakeCode编程环境有自带模拟程序运行效果的仿真器可以实时查看效果,通常显示在左上方。

MakeCode编程环境也支持从外部导入项目文件,如经过MakeCode编译生成的.hex文件。

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-display-graphics.hex

注意:正确的.hex文件导入方式是将上文链接中的.hex文件下载到本地然后将其导入到MakeCode中,而不是直接将此链接导入,外部项目链接导入MakeCode的方式与此处不同。

Makecode(import file).png

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。


按钮控制Micro:Bit输出图形

学习目标:使用Micro:Bit上的AB两个按钮控制LED矩阵所要输出的图形。

在章节“使用MakeCode编程点亮Micro:Bit”的基础上,在MakeCode中“input”选项栏目中找到应用按钮控制的积木“on button A pressed”来进行编程。

例程如下图,实现按一下A按钮显示英文字符“A”,按一下B按钮显示英文字符“B”,同时按下AB按钮后显示一个形似香蕉的图案。

Using the button.png

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Using_the_button_1.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。


Micro:Bit按钮计数器

学习目标:用MakeCode编程实现一个计数并显示的按钮控制程序。

在前一章节的基础上,先在MakeCode中“Variables”选项栏目中新建一个变量名为“A_was_pressed_times”的变量,此时将在“Variables”选项栏目产生多个关于变量的积木。

将“Math”选项栏目中的加法积木与“Variables”选项栏目中的积木镶嵌组合,参照下图例程。

Using the button 2.png

此时,我们就实现了在MakeCode编程并做出了一个利用加法计数的程序,按一次按钮A计数加1同时将计数值输出到LED矩阵中,按一次按钮B计数归0并清除LED矩阵的显示。

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Using_the_button_2.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。


氛围灯控制

学习目标:用MakeCode编程实现对Q-Car上10颗WS2812B彩色氛围灯的控制。

例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,Q-Car上的10颗WS2812B彩灯将同时以1800ms一周期循环彩虹光效。

Q-Car Pixel.png

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-Car_Pixel.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。


蜂鸣器的使用

学习目标:用MakeCode编程编写一段曲子并在Q-Car的蜂鸣器上播放。

例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,按一次A按钮,Q-Car上的蜂鸣器将循环两次播放曲子。

Q-car Music Arrangement.png

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-car_Music_Arrangement.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。


电机控制-应用扩展积木

学习目标:用MakeCode编程实现用按钮控制Q-Car行驶状态。

例程如下图,应用了Q-Car专属扩展积木,扩展积木对应实现的功能直观明了,可有效降低入门难度。

将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,接通电源,按下Micro:Bit的A按钮,Q-Car向前行驶,按下micro:bit的B按钮,Q-Car向后行驶,同时按下micro:bit的AB按钮,Q-Car停车。

Q-Car Motor control module2.png

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Qcar-demo-button_control-1.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。


超声波测距-应用扩展积木

学习目标:用MakeCode编程实现Micro:Bit显示超声波测距模块的测距数值。

例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,将超声波测距模块与Q-Car连接,接通电源,

Micro:Bit将显示测距数值的整数,单位为cm。

Q-car Ultrasonic ranging2.png

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-car_Ultrasonic_ranging2.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。


进阶教程

光电计数器

学习目标:

  1. 理解Q-Car上靠近车轮内侧的红外对管与车轮上的编码盘之间是如何组成光电开关的
  2. 学习如何通过MakeCode编程设计一个计数器

Q-car wheel 1.jpg

Q-car wheel 2.jpg

在Q-Car上有一对D字轴橡胶车轮,带有12线编码盘,在底部紧贴编码盘的位置放置了红外对管用于采集编码盘的信息。

Infrared tube pair.png

红外对管一侧发射红外光,一侧接收红外光,接收端将反射回的光线强弱的信息转化为电压高低的信号。

micro:bit的P11引脚为高电平时Q-Car上的红外对管才会通电工作。

与右车轮的编码盘紧贴的红外对管与micro:bit的P5引脚相连,而左车轮的编码盘紧贴的红外对管与micro:bit的P11引脚相连。

以右轮为例,可以制作一个测试程序,检测右轮编码盘对应的红外对管向P5引脚输出高低电平信号,例程如下图。

Q-Car Photoelectric switch test.png

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Photoelectric_switch_test.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。

将程序下载进micro:bit,然后保持USB串口连接,将micro:bit插入Q-Car的插槽,

Q-car wheel 3.jpg

旋转右轮使编码盘的凹口对向红外对管,此时micro:bit显示0,即表明此时红外对管输出给P5引脚的是低电平信号

Q-car wheel 4.jpg

旋转右轮使编码盘的凸柱对向红外对管,此时micro:bit显示1,即表明此时红外对管输出给P5引脚的是高电平信号

这犹如一个物理开关的接通与关断两个状态,编码盘与红外对管构成了一个光电开关。

以右轮为例,参照micro:bit按钮计数器即可设计出Q-Car车轮上的编码盘与红外对管组合的光电计数器,例程如下图。

Q-Car Photoelectric counter.png

较比按钮计数器,我们可以加入一个间隔一段时间输出一次内容的功能。

"running time(ms)"积木会获取程序从启动或复位以来至读取这个积木为止的时间,单位为毫秒,即获取从开机到现在所经过的时间。

在"forever"积木中加入"if"条件积木,设置一个变量"A_was_pressed_times"用于储存每当条件满足时的时间数值,

判断条件为当前时间减去变量大于等于1000ms时,显示一次计数值,将此次满足条件的时间数值储存到变量中用于下次判断,即实现了间隔1s让micro:bit显示一次计数值。

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Photoelectric_counter.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。


利用光电计数器进行转速测量

学习目标:理解转速的定义,用MakeCode编程在光电计数器的基础上设计转速测量

先简单的陈述转速的定义,即物体在单位时间内旋转360°的次数。RPM是一个较常用的转速单位,表示设备每分钟的旋转次数。

我们从直觉上理解,通过计数器统计1分钟Q-Car车轮的编码盘计数值除以12即可得到RPM转速值,但这样显然得到的信息时效性滞后了太多。

如果将统计时间缩短到5秒甚至1秒,例如统计1秒Q-Car右轮的编码盘计数值除以12再乘以60,也可得到右轮RPM转速值。

例程如下图。

Q-Car RPM measurement 1.png

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-RPM_measurement_1.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。

条条道路通罗马,测速的方法当然不止这一种,稍微改变一下思路,记录下通过编码盘12个凸柱即车轮旋转一周所花费的时间,60秒(1分钟)除以这个时间,即为RPM转速值。

例程如下图,其中在给"Right_whell_speed"变量赋值时将计算所得值通过"round"积木取整,这样方便LED显示出整数而不会显示一长串小数。

Q-Car RPM measurement 2.png

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-RPM_measurement_2.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。


用if条件判断制作计数器并用于车轮转速测量

学习目标:用MakeCode编程实现读取Q-Car上用于车轮测速的红外对管的高低电平信号并用计数法算出车轮转速。

例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,此时旋转Q-Car左右轮,可以从USB串口中读取到左右轮转速。

Q-Car velocity measurement module.png

Q-Car velocity measurement module Serial port.png

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-Car_velocity_measurement_module.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。


电机控制-对PCA9685驱动芯片进行控制

学习目标:用MakeCode编程实现Q-Car左右电机正反转控制。

例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,按一次A按钮,左右电机将同时正转2s,同时反转2s,右电机单独正转2s,左电机单独正转2s,同时停转。

Q-Car Motor control module.png

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-Car_Motor_control_module.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。


详解超声波测距-应用原始积木

学习目标:

  1. 理解超声波测距原理
  2. 理解压电式超声波扩展模块工作原理
  3. 用MakeCode编程实现只使用原始积木来对Q-Car上HC-SR04超声波扩展模块的控制。

“声”在1个标准大气压和15℃的条件下传导速度约为340m/s。当一段声波从声源发出,到遇到障碍物被反射传回声源所在的位置,这段声波就经过了传播时间乘以声速乘以2的距离。

超声波具有指向性强,能量消耗缓慢,在介质中传播的距离较远的特点,在精度要求不是特别严苛且在非真空的条件下,很适合用于测量直线距离,设备成本也相对低廉。

压电式超声波发生器实际上是利用压电晶体的谐振来工作的,它有两个压电晶片和一个共振板。

当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。

反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。

在一个超声波测距模块上测得发射时与接收时的两段电信号之间的时间差,即为这个超声波测距模块此次发出的超声波的传播时间,进而可以计算出超声波发射源与障碍物之间的距离。

在Q-Car正面micro:bit插槽前方有一个2*4扩展槽,其中有“V,T,E,G”四个排针槽位对应从micro:bit的“3V,P13,P14,GND”引出。

Q-car front view2.png

可对应顺序连接HC-SR04超声波扩展模块的“VCC,Trig,Echo,GND”引脚。

HC-SR04.png

由micro:bit的P13引脚向HC-SR04的Trig引脚发送持续时间大于10us的高电平信号,其发射端将产生持续8个周期,频率为40khz的超声波并向前方发射,

当超声波反射回来被接收端检测到,HC-SR04的Echo引脚将产生一段持续时间与这段超声波的传播时间相同的高电平信号,micro:bit的P13引脚将采集到这段高电平信号,

我们可以通过已知的这段高电平信号持续时间,设计一个程序求解出距离。

例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,将HC-SR04超声波扩展模块与Q-Car连接,将5V电源与Q-Car连接。

Q-car Ultrasonic ranging.png

采集P13引脚的高电平持续时间并赋值给变量"Ultrasonic_time",此处时间单位是us微秒,经过换算在15℃标准大气压下声速为0.034cm/us,

而25℃标准大气压下声速为0.0346cm/us, 我们选择后者用于距离计算,变量"Ultrasonic_time"乘以0.0346除以2再赋值给变量"Distance",

用一个if条件判断进行消噪,小于等于0和大于500的值都做归零处理,

程序上设计间隔0.1s进行一次超声波测距用以防止发射信号对回响信号的干扰,Micro:Bit的USB串口间隔1s输出超声波传感器检测到的距离。

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-car_Ultrasonic_ranging.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。


自动控制-利用超声波测距使Q-Car自动保持距离

学习目标:

  1. 理解自动控制的基础概念
  2. 用MakeCode编程实现利用超声波测距使Q-Car自动与前方障碍物保持相对距离的程序

自动控制是相对人工控制概念而言的,例如为了保持车与障碍物之间的间距,人眼在看到车与障碍物的间距小于一个范围时,需要手动控制车后退拉开距离,

接收到"车与障碍物的间距小于一个范围"这个信息的是人,对收集的信息产生需要如何控制的想法的是人,最后去控制车改变状态的也是人,即是人工控制。

相对的,让设备列如超声波测距传感器接收信息,将信息转化为电讯号传递给处理器,处理器按照既定的程序将与收集到的信息对应该发出的控制信号发给电机驱动模块,

进而改变车的状态使车后退拉开距离,人除了编程和启动这套控制系统以外,再不参与接收信息并反馈控制,这套控制系统即为自动控制系统。

我们可以在MakeCode编程来实现一个保持Q-Car与障碍物的间距的程序,例程如下图。

Q-car Ultrasonic control demo.png

在例程中设计了一个while true循环,在循环中最开始读取一次超声波测距的数值并赋值给一个变量,然后进行关于这个变量的判断,大于30cm停车,小于等于30cm且大于10cm则以20%转速前进,

小于等于10cm且大于等于9cm则停车,小于9cm则以20%转速后退,这有些类似于“自动倒车系统”。

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Qcar-demo_ultrasonic1.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。


巡线行驶

学习目标:用MakeCode编程实现Q-Car巡线行驶,巡线红外对管模拟值校准,超声波测距及遇障停车。

例程如下图,将程序烧录进Micro:Bit,将Micro:Bit与Q-Car连接,打开电源开关。

待LED矩阵显示右箭头时,将Q-Car的底部前端两个巡线红外对管放置在线路周围白色路面上方。

按下A按钮,等待校准程序完成后LED矩阵将显示左箭头,此时将Q-Car车头对向线路行进方向。

按下B按钮,Q-Car将开始巡线行驶,行驶过程中如超声波测距模块检测到前方有小于等于10cm间距的物体将停车。

Q-car Line patrol.png

例程项目文件:https://github.com/Wind-stormger/Makecode/blob/master/microbit-Q-car_Line_tracking.hex

项目文件下载到本地后可导入MakeCode中查看和再编辑,也可直接通过USB烧录到Micro:Bit中直接运行。