Snímače robota zo súpravy mBot Explorer Kit
Ná umocnenie výsledného efektu som zapojil do hry aj dve RGB LED diódy a bzučiak riadiacej dosky mCore bez Bluetooth modulu. Taktiež som nezabudol pripojiť displej Me LED Matrix na port 1 konektora RJ25 zmienenej dosky pomocou prepojovacieho kábla s konektormi RJ25 (6P6C).
Robot mBot sleduje čiaru
Snímač čiary Me Line Follower sa pripevňuje dvomi skrutkami M4 na prednú časť spodnej steny robota zo súpravy mBot Explorer Kit spolu so smerovým kolieskom, čo umožňuje optimálny pohyb robota pri sledovaní čiary. Na pripojenie tohto snímača k portu 2 konektora RJ25 riadiacej dosky mCore som zase použil prepojovací kábel s konektormi RJ25.
Skôr než som prešiel k samotnej tvorbe programu na sledovanie čiary, zistil som aké hodnoty vykazuje tento snímač na čiare a mimo nej. Ďalej mi už nič nebránilo vytvoriť požadovaný program v platforme Makeblock mBlock 5 (s pridaným zariadením mBot) a následne ho otestovať, čím som získal jeho finálnu verziu:
Program Arduino C – sledovanie čiary
// generated by mBlock5 for mBot
// codes make you happy
#include <MeMCore.h>
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
MeRGBLed rgbled_7(7, 2);
MeLEDMatrix ledMtx_1(1);
unsigned char drawBuffer[16];
unsigned char *drawTemp;
MeBuzzer buzzer;
MeLineFollower linefollower_2(2);
MeDCMotor motor_9(9);
MeDCMotor motor_10(10);
float tla_C4_8D_C3_ADtko = 0;
void move(int direction, int speed) {
int leftSpeed = 0;
int rightSpeed = 0;
if(direction == 1) {
leftSpeed = speed;
rightSpeed = speed;
} else if(direction == 2) {
leftSpeed = -speed;
rightSpeed = -speed;
} else if(direction == 3) {
leftSpeed = -speed;
rightSpeed = speed;
} else if(direction == 4) {
leftSpeed = speed;
rightSpeed = -speed;
}
motor_9.run((9) == M1 ? -(leftSpeed) : (leftSpeed));
motor_10.run((10) == M1 ? -(rightSpeed) : (rightSpeed));
}
void _delay(float seconds) {
long endTime = millis() + seconds * 1000;
while(millis() < endTime) _loop();
}
void setup() {
pinMode(A7, INPUT);
rgbled_7.fillPixelsBak(0, 2, 1);
ledMtx_1.setColorIndex(1);
ledMtx_1.setBrightness(6);
while(!((0 ^ (analogRead(A7) > 10 ? 0 : 1))))
{
_loop();
}
rgbled_7.setColor(0,255,0,0);
rgbled_7.show();
_delay(1);
rgbled_7.setColor(0,0,0,0);
rgbled_7.show();
drawTemp = new unsigned char[16]{0,24,36,66,129,129,66,36,24,24,36,66,66,36,24,0};
memcpy(drawBuffer, drawTemp, 16);
free(drawTemp);
ledMtx_1.drawBitmap(0, 0, 16, drawBuffer);
_delay(1);
ledMtx_1.clearScreen();
buzzer.tone(349, 0.2 * 1000);
_delay(0.02);
while(1) {
if(linefollower_2.readSensors() == 0.000000){
rgbled_7.setColor(0,0,0,0);
rgbled_7.show();
drawTemp = new unsigned char[16]{0,0,120,252,252,120,0,0,0,0,120,252,252,120,0,0};
memcpy(drawBuffer, drawTemp, 16);
free(drawTemp);
ledMtx_1.drawBitmap(0, 0, 16, drawBuffer);
move(1, 40 / 100.0 * 255);
}
if(linefollower_2.readSensors() == 1.000000){
rgbled_7.setColor(2,255,161,0);
rgbled_7.show();
drawTemp = new unsigned char[16]{0,0,120,252,252,120,0,0,0,0,120,132,132,120,0,0};
memcpy(drawBuffer, drawTemp, 16);
free(drawTemp);
ledMtx_1.drawBitmap(0, 0, 16, drawBuffer);
move(3, 40 / 100.0 * 255);
buzzer.tone(494, 0.2 * 1000);
_delay(0.02);
}
if(linefollower_2.readSensors() == 3.000000){
rgbled_7.setColor(1,255,161,0);
rgbled_7.show();
drawTemp = new unsigned char[16]{0,0,120,132,132,120,0,0,0,0,120,252,252,120,0,0};
memcpy(drawBuffer, drawTemp, 16);
free(drawTemp);
ledMtx_1.drawBitmap(0, 0, 16, drawBuffer);
move(4, 40 / 100.0 * 255);
buzzer.tone(262, 0.2 * 1000);
_delay(0.02);
}
_loop();
}
}
void _loop() {
}
void loop() {
_loop();
}
Program mBlock 5 – sledovanie čiary
Video – sledovanie čiary
Robot mBot sa vyhýba prekážkam
Vychádzajúc z vylepšeného umiestnenia snímača vzdialenosti Me Ultrasonic Sensor opísaného v predošlom článku, pustil som sa znovu do programovania za použitia platformy Makeblock mBlock 5. Musel som mať na zreteli pripojenie uvedeného snímača k portu 3 konektora RJ25 riadiacej dosky mCore.
Onedlho som disponoval programom na vyhýbanie sa prekážkam vhodným k testovaniu, ktoré prebehlo bez komplikácií a umožnilo mi dopracovať sa k jeho finálnej verzii:
Program Arduino C – vyhýbanie sa prekážkam
// generated by mBlock5 for mBot
// codes make you happy
#include <MeMCore.h>
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
MeRGBLed rgbled_7(7, 2);
MeLEDMatrix ledMtx_1(1);
unsigned char drawBuffer[16];
unsigned char *drawTemp;
MeBuzzer buzzer;
MeUltrasonicSensor ultrasonic_3(3);
MeDCMotor motor_9(9);
MeDCMotor motor_10(10);
float tla_C4_8D_C3_ADtko = 0;
void move(int direction, int speed) {
int leftSpeed = 0;
int rightSpeed = 0;
if(direction == 1) {
leftSpeed = speed;
rightSpeed = speed;
} else if(direction == 2) {
leftSpeed = -speed;
rightSpeed = -speed;
} else if(direction == 3) {
leftSpeed = -speed;
rightSpeed = speed;
} else if(direction == 4) {
leftSpeed = speed;
rightSpeed = -speed;
}
motor_9.run((9) == M1 ? -(leftSpeed) : (leftSpeed));
motor_10.run((10) == M1 ? -(rightSpeed) : (rightSpeed));
}
void _delay(float seconds) {
long endTime = millis() + seconds * 1000;
while(millis() < endTime) _loop();
}
void setup() {
pinMode(A7, INPUT);
rgbled_7.fillPixelsBak(0, 2, 1);
ledMtx_1.setColorIndex(1);
ledMtx_1.setBrightness(6);
while(!((0 ^ (analogRead(A7) > 10 ? 0 : 1))))
{
_loop();
}
rgbled_7.setColor(0,42,255,0);
rgbled_7.show();
_delay(1);
rgbled_7.setColor(0,0,0,0);
rgbled_7.show();
drawTemp = new unsigned char[16]{0,24,36,66,66,36,24,0,0,24,36,66,66,36,24,0};
memcpy(drawBuffer, drawTemp, 16);
free(drawTemp);
ledMtx_1.drawBitmap(0, 0, 16, drawBuffer);
_delay(1);
ledMtx_1.clearScreen();
buzzer.tone(262, 0.5 * 1000);
_delay(0.02);
while(1) {
if(ultrasonic_3.distanceCm() < 12){
rgbled_7.setColor(2,255,161,0);
rgbled_7.show();
drawTemp = new unsigned char[16]{0,0,120,252,252,120,0,0,0,0,120,132,132,120,0,0};
memcpy(drawBuffer, drawTemp, 16);
free(drawTemp);
ledMtx_1.drawBitmap(0, 0, 16, drawBuffer);
move(3, 70 / 100.0 * 255);
buzzer.tone(330, 0.5 * 1000);
_delay(0.02);
}else{
rgbled_7.setColor(2,0,0,0);
rgbled_7.show();
drawTemp = new unsigned char[16]{0,0,120,252,252,120,0,0,0,0,120,252,252,120,0,0};
memcpy(drawBuffer, drawTemp, 16);
free(drawTemp);
ledMtx_1.drawBitmap(0, 0, 16, drawBuffer);
move(1, 40 / 100.0 * 255);
}
_loop();
}
}
void _loop() {
}
void loop() {
_loop();
}
Program mBlock 5 – vyhýbanie sa prekážkam
Video – vyhýbanie sa prekážkam
Záver
K záveru patrí poďakovanie za prečítanie môjho článku slúžiaceho na oboznámenie sa so snímačmi robota zo súpravy mBot Explorer Kit. Podarilo sa mi bez náročného programovania do značnej miery využiť potenciál spomínaného robota, čo ma len utvrdilo v jeho praktickosti z pohľadu začiatočníka.
Téme o tomto robotovi zostanem verný aj v nasledujúcom článku, pričom sa zameriam na jeho diaľkové ovládanie.
E-shop
Makeblock Explorer Kit – mBot Bluetooth, modrý, verze 2
Modrý mBot Bluetooth vylepšený o LED matrix displej!
Makeblock mBot, 1800mAh Li-Pol baterie
Li-Pol baterie pro k napájení robota mBot nebo Vašich jiných projektů.
Jeden komentář