mBot是一款可编程、易操控和可扩展的小车,可以通过手机和红外遥控器进行操控。结合mBot萌萌的外形,加上LED点阵屏,mBot可以显示各种表情,并通过红外遥控器进行不同表情间的切换。
准备材料:
mBot + LED点阵屏 + 红外遥控器
搭建步骤:
1 组装mBot和LED点阵屏
按照说明书组装mBot和LED点阵屏,注意连线,其中巡线模块接Port 2,超声波传感器接Port 3,LED点阵屏接Port 4。
2 用mBlock编程
mBlock是一款基于Scratch 2.0的图形化编程软件,通过拖动不同的图形化模块就能完成编程,没有任何编程基础也可以很快上手。
2.1 首先创建一个变量,通过点击位于数据和指令部分的建立一个变量的按钮,创建一个名为num的变量,如下图所示,后面将会用到这个变量。
2.2 设定在LED点阵屏上超声波模块的两种工作模式,一种是直接显示超声波模块检测到的距离数据,另一种是根据不同的距离段显示不同的表情,通过红外遥控器上的按钮进行不同模式间的切换。
mBlock里面有一个非常方便的表情制作面板,点击下图的红圈部分即可弹出表情制作面板。
2.3 设定红外遥控器上的不同按钮来切换显示不同的表情。
最终mBlock程序见附件。
mBotwithLedMatrix源程序下载
3 测试
先用USB连接mBot和电脑,选择合适的串口,控制板选择mBot,并安装固件。
固件安装完成后断开串口连接,切换到蓝牙或2.4G无线连接模式,点击程序,就可以开始测试了。
通过红外遥控器上的不同按钮,可以切换到不同的表情模式。
4 进阶,使用Arduino IDE编程
使用mBlock可以输出Arduino代码,如果你更习惯于在Arduino IDE里面编程,可以先用mBlock搭出程序的框架,然后输出Arduino代码,再做一些修改,这样省时省力。首先将mBlock里的程序开头部分替换为mBot Program, 切换到Arduino mode模式,选择Edit with Arduino IDE,然后就可以在Arduino IDE里面编辑代码了。
在Arduino代码里面,通过使用for循环改变LED的亮度,能够实现图案一闪一闪的效果,效果见下图。
Arduino源代码如下:
mBotwithLedMatrix源程序下载
[C++] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
#include <Arduino.h> #include <Wire.h> #include <Servo.h> #include <SoftwareSerial.h> #include "mBot.h" #include "MePort.h" MeBoard myBoard(mBot); #include "MeIR.h" #include "MeUltrasonic.h" #include "MeLEDMatrix.h" #include "MeDCMotor.h" double angle_rad = PI/180.0; double angle_deg = 180.0/PI; double num; MeIR ir; MeUltrasonic ultrasonic_3(3); MeLEDMatrix ledMtx_4(4); unsigned char drawBuffer[16]; unsigned char *drawTemp; MeDCMotor motor(0); char tempString[10]; void setup(){ ir.begin(); num = 2; Serial.begin(9600); } void loop(){ if (ir.keyPressed(82)){ // key 8 num = 2; } if (ir.keyPressed(74)){ // key 9 num = 1; } if (((num)==( 1 ))){ ledMtx_4.clearScreen(); ledMtx_4.setColorIndex(1); ledMtx_4.setBrightness(3); dtostrf(ultrasonic_3.distanceCm(),2,2,tempString); Serial.print(tempString); Serial.println( "cm" ); ledMtx_4.drawStr(0,7,tempString); delay(100); } if (((num)==(2))){ if ((ultrasonic_3.distanceCm()) < (15)){ ledMtx_4.clearScreen(); ledMtx_4.setColorIndex(1); ledMtx_4.setBrightness(6); drawTemp = new unsigned char [16]{0,0,0,0,32,34,36,8,4,34,32,32,0,0,0,0}; memcpy (drawBuffer,drawTemp,16); free (drawTemp); ledMtx_4.drawBitmap(0,0,16,drawBuffer); delay(1000*0.2); } else { if ((ultrasonic_3.distanceCm()) > (30)){ ledMtx_4.clearScreen(); ledMtx_4.setColorIndex(1); ledMtx_4.setBrightness(6); drawTemp = new unsigned char [16]{0,62,65,93,85,77,61,0,61,77,85,93,65,62,0,0}; memcpy (drawBuffer,drawTemp,16); free (drawTemp); ledMtx_4.drawBitmap(0,0,16,drawBuffer); delay(1000*0.2); } else { ledMtx_4.clearScreen(); ledMtx_4.setColorIndex(1); ledMtx_4.setBrightness(6); drawTemp = new unsigned char [16]{0,0,0,32,64,128,76,18,18,76,128,64,32,0,0,0}; memcpy (drawBuffer,drawTemp,16); free (drawTemp); ledMtx_4.drawBitmap(0,0,16,drawBuffer); delay(1000*0.2); } } } if (ir.keyPressed(69)){ // key A Serial.println( "got it" ); num = 0; ledMtx_4.clearScreen(); ledMtx_4.setColorIndex(1); ledMtx_4.setBrightness(3); for (int16_t i=0; i<84; i++){ ledMtx_4.drawStr(15-i,7, "Hello World" ); delay(100); } ledMtx_4.drawStr(3,7, "Hi" ); } if (ir.keyPressed(70)){ // key B num = 0; ledMtx_4.clearScreen(); ledMtx_4.setColorIndex(1); drawTemp = new unsigned char [16]{0,0,0,0,48,72,68,34,68,72,48,0,0,0,0,0}; memcpy (drawBuffer,drawTemp,16); free (drawTemp); // blink Bitmap ledMtx_4.drawBitmap(0,0,16,drawBuffer); for (uint8_t k=0; k<5; k++){ for (uint8_t i=7;i>0;i--){ ledMtx_4.setBrightness(i); delay(50); } for (uint8_t i=0;i<8;i++){ ledMtx_4.setBrightness(i); delay(50); } } } if (ir.keyPressed(71)){ // key C num = 0; ledMtx_4.clearScreen(); ledMtx_4.setColorIndex(1); ledMtx_4.setBrightness(6); drawTemp = new unsigned char [16]{0,0,0,0,0,36,0,129,66,60,0,0,0,0,0,0}; memcpy (drawBuffer,drawTemp,16); free (drawTemp); ledMtx_4.drawBitmap(0,0,16,drawBuffer); delay(1000*1); } if (ir.keyPressed(68)){ // key D num = 0; ledMtx_4.clearScreen(); ledMtx_4.setColorIndex(1); ledMtx_4.setBrightness(6); drawTemp = new unsigned char [16]{0,0,0,0,48,0,2,4,4,2,0,48,0,0,0,0}; memcpy (drawBuffer,drawTemp,16); free (drawTemp); ledMtx_4.drawBitmap(0,0,16,drawBuffer); delay(1000*1); } if (ir.keyPressed(67)){ // key E num = 0; ledMtx_4.clearScreen(); ledMtx_4.setColorIndex(1); ledMtx_4.setBrightness(6); drawTemp = new unsigned char [16]{0,0,0,0,32,64,36,2,2,36,64,32,0,0,0,0}; memcpy (drawBuffer,drawTemp,16); free (drawTemp); ledMtx_4.drawBitmap(0,0,16,drawBuffer); delay(1000*1); } if (ir.keyPressed(13)){ // key F num = 0; ledMtx_4.clearScreen(); ledMtx_4.setColorIndex(1); ledMtx_4.setBrightness(6); drawTemp = new unsigned char [16]{0,0,0,62,0,24,36,18,18,36,24,0,60,2,60,0}; memcpy (drawBuffer,drawTemp,16); free (drawTemp); ledMtx_4.drawBitmap(0,0,16,drawBuffer); delay(1000*1); } if (ir.keyPressed(64)){ // key UP motor.move(1,100); } if (ir.keyPressed(25)){ // key DOWN motor.move(2,100); } if (ir.keyPressed(7)){ // key LEFT motor.move(3,100); } if (ir.keyPressed(9)){ // key RIGHT motor.move(4,100); } if (ir.keyPressed(24)){ // key 2 motor.move(1,0); } ir.loop(); } |
把Arduino代码上传到mBot,就可以开始玩了。
扩展玩法:表白神器什么的,或者利用mBot上的巡线模块,在表情面板上画个面包的图案,让它到达妹子那里,叫她一起吃饭,嘿嘿,想象力越大,玩法越多。
转自:bbs.makeblock.cc
未经允许不得转载:木果创客mbot机器人 » 超级好玩的mBot和mBot表情面板——Makeblock给您点爱的表情看看!
评论前必须登录!
注册