Vylepšenie robota zo súpravy mBot Explorer Kit

Pozdravujem kamarátov robotiky a programovania uvažujúcich nad otázkou ako si vylepšiť robot zo súpravy mBot Explorer Kit využijúc zvyšné diely, ktoré sú súčasťou jej balenia. Taktiež sa spolu pozrieme na alternatívny zdroj energie tohto robota a do tretice vám predstavím program na jeho odskúšanie.

Umiestnenie displeja a snímača vzdialenosti na robotovi mBot

Návod zo súpravy mBot Explorer Kit neuvádza možnosť súčasného umiestnenia snímača vzdialenosti Me Ultrasonic Sensordispleja Me LED Matrix (8×16) v prednej časti robota mBot. Nezostávalo mi nič iné, len sa vydať vlastnou cestou zlepšujúcich nápadov, z ktorých som vybral jeden najpozoruhodnejší.

Najskôr som vyriešil uchytenie displeja prostredníctvom jeho akrylovej dosky, ktorú som otočil výstupkami (s podlhovastými otvormi) dole, aby som ju mohol pripevniť dvomi skrutkami M4 k čelnej stene robota. Následne som do otvoru v tvare úsmevu v tejto stene umiestnil dva mosadzné stĺpiky M4x25, ktoré som tam zafixoval maticami M4. Na zvyšné dva konce stĺpikov som namontoval pomocou skrutiek M4 snímač vzdialenosti s už pripojeným káblom s konektormi RJ25 (presnejšie 6P6C). Zmienený kábel som vsunul cez medzeru medzi čelnou a bočnou stenou robota a cez obdĺžnikový otvor vo vrchnej stene vyviedol k riadiacej doske mCore a následne aj pripojil do portu konektora RJ25. Docielil som tak plnohodnotné využitie snímača vzdialenosti pri minimálnom obmedzení čitateľnosti displeja vychádzajúc z bežného pozorovacieho uhla minimálne 30˚.

Alternatívny zdoj energie robota mBot

Súprava mBot Explorer Kit štandardne obsahuje držiakštyroch batérií typu AA. V dnešnej ekonomicky a ekologicky orientovanej dobe to považujem za nepraktické, čo ma doviedlo k myšlienke využitia alternatívneho zdroja energie pre spomínaný robot.

Sám výrobca opísanej súpravy (firma Makeblock) uviedol na trh dostupnú alternatívu v podobe nabíjacej batérie typu Li-Pol s káblovým vývodom zakončeným konektorom JST. Táto batéria je umiestnená v plastovom boxe, ktorý sa dá prakticky pripevniť na spodnú časť plastového boxu riadiacej dosky mCore. Nespornou výhodou je, že uvedená doska disponuje nabíjacím obvodom s napájacím konektorom USB (treba použiť dátový kábel USB zo súpravy) a kontrolnými LED diódami vypovedajúcimi o procese nabíjania.

Skúšobný program robota mBot

Skúšobný program robota zo súpravy mBot Explorer Kit som vytvoril preto, aby som sa presvedčil o funkčnosti zmieneného robota. Programoval som v platforme Makeblock mBlock 5, do ktorej som pridal zariadenie s názvom mBot. Mal som pritom na pamäti nasledovný ‚layout‘ portov konektorov RJ25 riadiacej dosky mCore (bez Bluetooth modulu):

  • Port 1 – displej Me LED Matrix
  • Port 2 – snímač čiary Me Line Follower
  • Port 3 – snímač vzdialenosti Me Ultrasonic Sensor

Za pár minút sa mi podarilo napísať program, ktorého bezproblémové otestovanie ma doviedlo k jeho finálnej verzii:

Program Arduino C

// generated by mBlock5 for mBot
// codes make you happy

#include <MeMCore.h>
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>

MeLEDMatrix ledMtx_1(1);
unsigned char drawBuffer[16];
unsigned char *drawTemp;
MeBuzzer buzzer;
MeLightSensor lightsensor_6(6);
MeUltrasonicSensor ultrasonic_3(3);
MeLineFollower linefollower_2(2);
MeRGBLed rgbled_7(7, 2);
MeDCMotor motor_9(9);
MeDCMotor motor_10(10);

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);
  ledMtx_1.setColorIndex(1);
  ledMtx_1.setBrightness(6);
  rgbled_7.fillPixelsBak(0, 2, 1);
  while(1) {
      while(!((0 ^ (analogRead(A7) > 10 ? 0 : 1))))
      {
        _loop();
      }

      drawTemp = new unsigned char[16]{96,126,96,0,126,90,90,0,36,82,74,36,0,96,126,96};
      memcpy(drawBuffer, drawTemp, 16);
      free(drawTemp);
      ledMtx_1.drawBitmap(0, 0, 16, drawBuffer);
      _delay(2);

      buzzer.tone(262, 0.5 * 1000);
      _delay(0.02);

      ledMtx_1.showNum(lightsensor_6.read(), 3);
      _delay(2);
      ledMtx_1.drawStr(0, 0 + 7, String("lx").c_str());
      _delay(2);

      ledMtx_1.showNum(round(ultrasonic_3.distanceCm()), 3);
      _delay(2);
      ledMtx_1.drawStr(0, 0 + 7, String("cm").c_str());
      _delay(2);

      ledMtx_1.showNum(linefollower_2.readSensors(), 3);
      _delay(2);
      ledMtx_1.clearScreen();

      buzzer.tone(330, 0.5 * 1000);
      _delay(0.02);

      rgbled_7.setColor(0,255,0,0);
      rgbled_7.show();
      _delay(1);
      rgbled_7.setColor(0,0,0,0);
      rgbled_7.show();

      rgbled_7.setColor(0,255,233,0);
      rgbled_7.show();
      _delay(1);
      rgbled_7.setColor(0,0,0,0);
      rgbled_7.show();

      rgbled_7.setColor(0,42,255,0);
      rgbled_7.show();
      _delay(1);
      rgbled_7.setColor(0,0,0,0);
      rgbled_7.show();

      rgbled_7.setColor(0,0,255,255);
      rgbled_7.show();
      _delay(1);
      rgbled_7.setColor(0,0,0,0);
      rgbled_7.show();

      rgbled_7.setColor(0,63,0,255);
      rgbled_7.show();
      _delay(1);
      rgbled_7.setColor(0,0,0,0);
      rgbled_7.show();

      rgbled_7.setColor(0,255,0,220);
      rgbled_7.show();
      _delay(1);
      rgbled_7.setColor(0,0,0,0);
      rgbled_7.show();

      rgbled_7.setColor(0,0,0,0);
      rgbled_7.show();

      buzzer.tone(392, 0.5 * 1000);
      _delay(0.02);

      move(1, 50 / 100.0 * 255);
      _delay(1);
      move(1, 0);

      move(2, 50 / 100.0 * 255);
      _delay(1);
      move(2, 0);

      move(3, 50 / 100.0 * 255);
      _delay(1);
      move(3, 0);

      move(4, 50 / 100.0 * 255);
      _delay(1);
      move(4, 0);

      buzzer.tone(494, 0.5 * 1000);
      _delay(0.02);

      _loop();
  }

}

void _loop() {
}

void loop() {
  _loop();
}

Program mBlock 5

Video

Záver

So záverom prichádza moje uznanie za to, že ste si prečítali tento článok až do konca. Nesnažil som sa v ňom iba o dizajnový a výkonnostný ‚update‘ robota zo súpravy mBot Explorer Kit, ale aj o jeho predvedenie.

S radosťou vám môžem oznámiť, že v najbližších mesiacoch bude témou mojich článkov nielen uvedený robot ale aj ďalšie produkty firmy Makeblock. Verím, že môj netradičný prístup k téme z pohľadu začiatočníka, bude pre vás prvým krokom k tomu, aby sa robotika stala aj vaše hobby.

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ů.




Leave a Reply