匿名
未登录
登录
丢石头百科
搜索
查看“Micro:bit系列教程13:Rotation Sensor”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
Micro:bit系列教程13:Rotation Sensor
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
本章将介绍Micro:bit连接Rotation Sensor模块的使用,可用于计算顺时针和逆时针旋转的角度和旋转圈数。 <h1>1.基本介绍 </h1> <span lang="EN-US" style="font-size: 12.0pt;line-height:150%;font-family:宋体">Rotation Sensor是一款增量编码器,是一种将旋转位移转换为一连串数字脉冲信号的旋转式传感器。通过旋转可以计数正方向和反方向转动过程中输出脉冲的次数,旋转计数不像电位器,这种转动是没有限制的。配合旋转编码器上的按键,可以复位到初始状态,即从0开始计数,主要用于工业中的定位问题。 <h1>2.硬件连接 </h1> <span style="font-size:12.0pt; line-height:150%;font-family:宋体">在硬件上,采用Micro:bit的P0,P1,P2分别与Rotation Sensor的SIA,SIB,SW连接,具体连接示意图如下图所示: <table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt; mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt"> <tbody><tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes"> <td style="width:207.4pt;border:solid windowtext 1.0pt;mso-border-alt: solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt" width="277"> <a name="_Hlk527392968"><span lang="EN-US" style="font-size:12.0pt;line-height: 150%;font-family:宋体">Micro:bit </td> <td style="width:207.4pt;border:solid windowtext 1.0pt;border-left: none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt; padding:0cm 5.4pt 0cm 5.4pt" width="277"> <span lang="EN-US" style="font-size:12.0pt; line-height:150%;font-family:宋体">Rotation Sensor </td> </tr> <tr style="mso-yfti-irow:1"> <td style="width:207.4pt;border:solid windowtext 1.0pt;border-top: none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt; padding:0cm 5.4pt 0cm 5.4pt" width="277"> <span lang="EN-US" style="font-size:12.0pt; line-height:150%;font-family:宋体">VCC </td> <td style="width:207.4pt;border-top:none;border-left:none; border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt; mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt" width="277"> <span lang="EN-US" style="font-size:12.0pt; line-height:150%;font-family:宋体">VCC </td> </tr> <tr style="mso-yfti-irow:2"> <td style="width:207.4pt;border:solid windowtext 1.0pt;border-top: none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt; padding:0cm 5.4pt 0cm 5.4pt" width="277"> <span lang="EN-US" style="font-size:12.0pt; line-height:150%;font-family:宋体">GND </td> <td style="width:207.4pt;border-top:none;border-left:none; border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt; mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt" width="277"> <span lang="EN-US" style="font-size:12.0pt; line-height:150%;font-family:宋体">GND </td> </tr> <tr style="mso-yfti-irow:3"> <td style="width:207.4pt;border:solid windowtext 1.0pt;border-top: none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt; padding:0cm 5.4pt 0cm 5.4pt" width="277"> <span lang="EN-US" style="font-size:12.0pt; line-height:150%;font-family:宋体">SIA </td> <td style="width:207.4pt;border-top:none;border-left:none; border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt; mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt" width="277"> <span lang="EN-US" style="font-size:12.0pt; line-height:150%;font-family:宋体">P0 </td> </tr> <tr style="mso-yfti-irow:4"> <td style="width:207.4pt;border:solid windowtext 1.0pt;border-top: none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt; padding:0cm 5.4pt 0cm 5.4pt" width="277"> <span lang="EN-US" style="font-size:12.0pt; line-height:150%;font-family:宋体">SIB </td> <td style="width:207.4pt;border-top:none;border-left:none; border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt; mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt" width="277"> <span lang="EN-US" style="font-size:12.0pt; line-height:150%;font-family:宋体">P1 </td> </tr> <tr style="mso-yfti-irow:5;mso-yfti-lastrow:yes"> <td style="width:207.4pt;border:solid windowtext 1.0pt;border-top: none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt; padding:0cm 5.4pt 0cm 5.4pt" width="277"> <span lang="EN-US" style="font-size:12.0pt; line-height:150%;font-family:宋体">SW </td> <td style="width:207.4pt;border-top:none;border-left:none; border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt; mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt; mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt" width="277"> <span lang="EN-US" style="font-size:12.0pt; line-height:150%;font-family:宋体">P2 </td> </tr> </tbody></table> <span style="font-size:12.0pt; line-height:150%;font-family:宋体">具体硬件连接如下表所示: <span style="font-size:12.0pt; line-height:150%;font-family:宋体"> [[File:182004c5ngz8742vngx898.jpg]] <span lang="EN-US" style="font-size:12.0pt;line-height:150%;font-family:宋体;mso-no-proof: yes"><v:shapetype coordsize="21600,21600" filled="f" id="_x0000_t75" o:preferrelative="t" o:spt="75" path="m@4@5l@4@11@9@11@9@5xe" stroked="f"> <v:stroke joinstyle="miter"> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"> <v:f eqn="sum @0 1 0"> <v:f eqn="sum 0 0 @1"> <v:f eqn="prod @2 1 2"> <v:f eqn="prod @3 21600 pixelWidth"> <v:f eqn="prod @3 21600 pixelHeight"> <v:f eqn="sum @0 0 1"> <v:f eqn="prod @6 1 2"> <v:f eqn="prod @7 21600 pixelWidth"> <v:f eqn="sum @8 21600 0"> <v:f eqn="prod @7 21600 pixelHeight"> <v:f eqn="sum @10 21600 0"> </v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:formulas> <v:path gradientshapeok="t" o:connecttype="rect" o:extrusionok="f"> <o:lock aspectratio="t" v:ext="edit"> </o:lock></v:path></v:stroke></v:shapetype><v:shape id="图片_x0020_2" o:spid="_x0000_i1028" style="width:312pt;height:222pt;visibility:visible;mso-wrap-style:square" type="#_x0000_t75"> <v:imagedata cropleft="5615f" cropright="8116f" o:title="" src="file:///C:\Users\LINXINWU\AppData\Local\Temp\msohtmlclip1\01\clip_image001.jpg"> </v:imagedata></v:shape><span lang="EN-US" style="font-size:12.0pt;line-height:150%; font-family:宋体"> <h1>3.计数原理 </h1> <span style="font-size:12.0pt; line-height:150%;font-family:宋体">将Rotation Sensor的SIA,SIB,SW分别连接到逻辑分析仪的CH0,CH1,CH2,分别顺时针,逆时针,按下旋转编码器,同时采集波形,得到的波形如下图所示: <span style="font-size:12.0pt; line-height:150%;font-family:宋体"> [[File:182005r8ood42ceo7zdkns.png]] <span lang="EN-US" style="mso-no-proof: yes"><v:shape id="图片_x0020_1" o:spid="_x0000_i1027" style="width:414.75pt; height:1in;visibility:visible;mso-wrap-style:square" type="#_x0000_t75"> <v:imagedata o:title="" src="file:///C:\Users\LINXINWU\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png"> </v:imagedata></v:shape><span lang="EN-US" style="font-size:12.0pt;line-height:150%; font-family:宋体"> <span style="font-size:12.0pt; line-height:150%;font-family:宋体">由逻辑分析仪得出的波形可知,当顺时针旋转编码器时,SIB将先产生下降沿,约过了30ms之后(取决于旋转的速度),SIA将产生下降沿;当逆时针旋转编码器时,SIA将先产生下降沿,约过了30ms之后(取决于旋转的速度),SIB将产生下降沿,对SIA,SIAB共同产生的下降沿个数进行统计,即可得知此次旋转的角度,当按下按键时,SW将产生下降沿,此按键可用于清零旋转的角度。 <h1>4.软件设计 </h1> <span style="font-size:12.0pt; font-family:宋体">打开makecode,采用图形块编写以下程序(不用添加软件包): [[File:182006whhfskevrfr2hvzu.png]] <v:shape id="图片_x0020_4" o:spid="_x0000_i1026" style="width:394.5pt;height:697.5pt; visibility:visible;mso-wrap-style:square" type="#_x0000_t75"> <v:imagedata o:title="" src="file:///C:\Users\LINXINWU\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png"> </v:imagedata></v:shape> 该程序的JavaScript代码如下所示,可直接复制至makecode使用: === cpp代码: ===<syntaxhighlight lang="python"> let time = 0 let item = 0 let count = 0 pins.onPulsed(DigitalPin.P1, PulseValue.Low, () => { if (input.runningTime() - time > 50) { time = input.runningTime() count = count + 1 } time = input.runningTime() serial.writeValue("press", 0) }) pins.onPulsed(DigitalPin.P0, PulseValue.Low, () => { if (input.runningTime() - time > 50) { time = input.runningTime() count = count - 1 } time = input.runningTime() serial.writeValue("press", 0) }) pins.onPulsed(DigitalPin.P2, PulseValue.Low, () => { count = 0 serial.writeValue("press", 1) }) count = 0 item = 0 time = input.runningTime() pins.setPull(DigitalPin.P0, PinPullMode.PullUp) pins.setPull(DigitalPin.P1, PinPullMode.PullUp) pins.setPull(DigitalPin.P2, PinPullMode.PullUp) serial.redirectToUSB() basic.forever(() => { while (item != count) { item = count serial.writeValue("item", item) } basic.pause(500) }) </syntaxhighlight> <span style="font-size:12.0pt; line-height:150%;font-family:宋体">下载,等下载成功后,点击显示数据(设备),依次顺时针旋转Rotation Sensor,逆时针旋转Rotation Sensor,按下Rotation Sensor,可得如下波形的数据: <span style="font-size:12.0pt; line-height:150%;font-family:宋体"> [[File:182007z2bhvfhbmmy2hgqb.png]] <v:shape id="图片_x0020_6" o:spid="_x0000_i1025" style="width:415.5pt;height:205.5pt; visibility:visible;mso-wrap-style:square" type="#_x0000_t75"> <v:imagedata o:title="" src="file:///C:\Users\LINXINWU\AppData\Local\Temp\msohtmlclip1\01\clip_image004.png"> </v:imagedata></v:shape> <span style="font-size:12.0pt; line-height:150%;font-family:宋体">由makecode控制台显示的数据可知,当旋钮顺时针旋转时,每转一个刻度,item变量将加1,当旋钮逆时针旋转时,每转一个刻度,item变量将减1,当按下旋钮时,item数据将归零,符合预期。
返回至
Micro:bit系列教程13:Rotation Sensor
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志