Súprava modulov a snímačov ovláda robot zo súpravy mBot Explorer Kit

Znovu zdravím kamarátov robotiky a programovania zamýšľajúcich sa nad praktickým využitím súpravy modulov a snímačov firmy Makeblock v kombinácii s robotom zo súpravy mBot Explorer Kit. Nechajte sa inšpirovať mojimi dvomi programami, o ktorých sa dočítate nižšie.

Programy som vytvoril v platforme Makeblock mBlock 5 (s pridaným zariadením mBot) rozšírenej o Platformu výrobcu. Umiestnenie modulov a snímačov sa zhodovalo s druhou hardvérovou zostavou z predošlého článku.

Náhodné správanie robota mBot

Program náhodného správania (pomenovanie pre prvý program) robota zo súpravy mBot Explorer Kit má demonštrovať určitú voľnosť, ktorú je možné docieliť zakomponovaním náhodného výberu čísel do programu. Na ovládanie spustenia tohto programu veľmi dobre poslúži pasívny infračervený snímač Me PIR Motion Sensor. Šetrí to nielen batériu, ale aj zabezpečí nečinnosť robota v prípade, keď je bez dozoru. Pod náhodným správaním si treba predstaviť nepredvídaný pohybový, svetelný a zvukový prejav spomenutého robota, pričom náhodne vybrané číslo sa zobrazí na červenom displeji Me 7-segment Display. V stave pokoja sa na displeji ukáže aktuálna teplota nameraná snímačom teploty Me Temperature Sensor.

Pre zmienený program je vhodný nasledovný ‚layout‘ portov konektorov RJ25 riadiacej dosky mCore (bez Bluetooth modulu):

  • Port 1 – displej Me 7-segment Display
  • Port 2 – diódy Me RGB LED
  • Port 3 – snímač teploty Me Temperature Sensor pripojený prostredníctvom adaptéru Me RJ25 Adapter
  • Port 4 – pasívny infračervený snímač Me PIR Motion Sensor

Po úspešnom otestovaní vytvoreného prvého programu som získal jeho finálnu verziu:

Program Arduino C – náhodné správanie robota mBot

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

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

MePIRMotionSensor pir_4(4);
MeRGBLed rgbled_2(2, 4);
MeRGBLed rgbled_7(7, 2);
Me7SegmentDisplay seg7_1(1);
MeDCMotor motor_9(9);
MeDCMotor motor_10(10);
MeBuzzer buzzer;
MeTemperature temperature_3_1(3, 1);

float n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo = 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() {
  rgbled_2.fillPixelsBak(0, 2, 1);
  rgbled_7.fillPixelsBak(0, 2, 1);
  while(1) {
      if(pir_4.isHumanDetected() == 1.000000){
          for(int count=0;count<4;count++){
              n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo = random(0, 255 +1);

              rgbled_2.setColor(1, n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo, (255 - n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo), round((n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo / 2)));
              rgbled_2.show();

              rgbled_2.setColor(2, round((n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo / 2)), n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo, (255 - n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo));
              rgbled_2.show();

              rgbled_2.setColor(3, (255 - n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo), round((n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo / 2)), n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo);
              rgbled_2.show();

              rgbled_2.setColor(4, n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo, round((n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo / 2)), (255 - n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo));
              rgbled_2.show();

              rgbled_7.setColor(2, (255 - n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo), n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo, round((n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo / 2)));
              rgbled_7.show();

              rgbled_7.setColor(1, round((n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo / 2)), (255 - n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo), n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo);
              rgbled_7.show();

              seg7_1.display(float(n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo));
              if(n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo < 64){

                  move(1, 40 / 100.0 * 255);

              }
              if((n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo > 63)  &&  (n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo < 128)){

                  move(2, 40 / 100.0 * 255);

              }
              if((n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo > 127)  &&  (n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo < 192)){

                  move(3, 40 / 100.0 * 255);

              }
              if(n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo > 191){

                  move(4, 40 / 100.0 * 255);

              }

              buzzer.tone((700 + n_C3_A1hodn_C3_A9__C4_8D_C3_ADslo), 0.5 * 1000);
          }

      }else{

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

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

          seg7_1.display(float(temperature_3_1.temperature()));
          motor_9.run(0);
          motor_10.run(0);
          _delay(1);

      }

      _loop();
  }

}

void _loop() {
}

void loop() {
  _loop();
}

Program mBlock 5 – náhodné správanie robota mBot

Video – náhodné správanie robota mBot

Nasledovanie zdroja svetla robotom mBot

Program nasledovania zdroja svetla (pomenovanie pre druhý program) robotom zo súpravy mBot Explorer Kit má predviesť snímač svetla Me Light Sensor a snímač svetla riadiacej dosky mCore. Prvý snímač je potrebné umiestniť do zadnej časti robota, lebo druhý snímač sa nachádza v jeho prednej časti. Pri zasvietení na niektorý z týchto snímačov, sa robot prejaví pohybom, rozsvietením diódy Me RGB LED, prehraním tónov a zobrazením nameranej hodnoty osvetleného snímača na displeji Me 7-segment Display. Pri detegovaní svetla nižšieho ako je hodnota 800, robot sa zastaví, dióda sa vypne, bzučiak stíchne a na displeji sa rozsvieti aktuálna teplota zistená snímačom teploty Me Temperature Sensor.

Pre spomínaný program prichádza do úvahy nižšie opísaný ‚layout‘ portov konektorov RJ25 riadiacej dosky mCore (bez Bluetooth modulu):

  • Port 1 – displej Me 7-segment Display
  • Port 2 – diódy Me RGB LED
  • Port 3 – snímač teploty Me Temperature Sensor pripojený prostredníctvom adaptéru Me RJ25 Adapter
  • Port 4 – snímač svetla Me Light Sensor

Bezproblémové testovanie zostaveného druhého programu ma doviedlo k jeho finálnej verzii:

Program Arduino C – nasledovanie zdroja svetla robotom mBot

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

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

MeLightSensor lightsensor_4(4);
MeRGBLed rgbled_2(2, 4);
Me7SegmentDisplay seg7_1(1);
MeDCMotor motor_9(9);
MeDCMotor motor_10(10);
MeBuzzer buzzer;
MeTemperature temperature_3_1(3, 1);
MeLightSensor lightsensor_6(6);

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() {
  rgbled_2.fillPixelsBak(0, 2, 1);
  while(1) {
      if(lightsensor_4.read() > 800){

          rgbled_2.setColor(1, 255, 0, 0);
          rgbled_2.show();

          seg7_1.display(float(lightsensor_4.read()));

          move(2, 40 / 100.0 * 255);

          buzzer.tone((700 + round((lightsensor_4.read() / 4))), 0.5 * 1000);

      }else{

          rgbled_2.setColor(1,  0,0,0);
          rgbled_2.show();

          seg7_1.display(float(temperature_3_1.temperature()));
          motor_9.run(0);
          motor_10.run(0);

      }
      if(lightsensor_6.read() > 800){

          rgbled_2.setColor(1, 255, 255, 255);
          rgbled_2.show();

          seg7_1.display(float(lightsensor_6.read()));

          move(1, 40 / 100.0 * 255);

          buzzer.tone((945 - round((lightsensor_6.read() / 4))), 0.5 * 1000);

      }else{

          rgbled_2.setColor(1,  0,0,0);
          rgbled_2.show();

          seg7_1.display(float(temperature_3_1.temperature()));
          motor_9.run(0);
          motor_10.run(0);

      }

      _loop();
  }

}

void _loop() {
}

void loop() {
  _loop();
}

Program mBlock 5 – nasledovanie zdroja svetla robotom mBot

Video – nasledovanie zdroja svetla robotom mBot

Záver

So záverom prichádza moje poďakovanie, že ste si našli čas prečítať tento článok, ktorý má poukázať na praktickosť súpravy modulov a snímačov firmy Makeblock. Netreba zabúdať, že výrazný podiel na tom má robot zo súpravy mBot Explorer Kit.

Nasledujúci článok otvorí novú tému, ktorá predstaví ďalší povšimnutia hodný produkt firmy Makeblock. Naskytla sa mi príležitosť vás prekvapiť, preto neprezradím jeho názov. Avšak máte sa na čo tešiť, lebo o zábavu bude postarané.

Eshop

E-shop

Makeblock Sada elektronických modulů a senzorů

Projektová sada pro Vaše roboty.




Makeblock Explorer Kit – mBot Bluetooth, modrý, verze 2

Modrý mBot Bluetooth vylepšený o LED matrix displej!


Doporučené příslušenství

Leave a Reply