Bezdrátová komunikace pro Fretku

Rozšiřujeme robota Fretku o bezdrátovou komunikaci

S jednoduchým robůtkem ze stavebnice m-BITBEAM jsme vás seznámili již v článku 3D tisk + Arduino = (nejen) robotika zajímavě a levně. Jeho představení vyvolalo řadu vašich reakcí, a to jak kladných, tak záporných. Jedna z výtek byla směřována k omezené možnosti rozšíření o další moduly a čidla nějakým jednoduchým a „korektním“ způsobem. Tím, že jsme se snažili sestavit funkčního robota skutečně v minimalistické podobě, museli jsme také přistoupit na řadu omezení. Jednou takovou věcí bylo např. využití určitých netypických pinů, které se žákům „dobře zapojovaly“, ale tradičně se pro dané zařízení nepoužívají (např. pro zapojení kontinuálních servomotorů). Jako zásadní omezení se řadě z vás jevila také nevyřešená problematika napájení dalších rozšiřujících modulů, které bychom chtěli do budoucna k robotovi připojit, což v původním článku přiznáváme a vysvětlujeme (napájení modulů z digitálních pinů Arduina skutečně není optimální řešení).

Někteří stavitelé Fretky si problém s rozšiřováním vyřešili po svém pomocí páječky a několika drátků. Jiní se dali slyšet, že by chtěli nějaké řešení přímo od nás. Jedno vám tedy přinášíme a rovnou si k Fretce připojíme bluetooth modul tak, abychom mohli robota ovládat z chytrého telefonu či tabletu a zahrát si s ním třeba hokej.

zpět na začátek

1. Co budeme potřebovat?

K rozšíření o BT modul budeme mimo vlastní modul potřebovat ještě pár dalších věcí:

zpět na začátek
Název (a případně odkaz) Počet (ks)
Kolíková lišta 1×6 pinů (DuPont 2,54 mm) 2
Kabel napájecí (červený) 10 cm, průřez cca 0,75 mm2 1
Kabel napájecí (černý) 10 cm, průřez cca 0,75 mm2 1
Krimpovací DuPont konektor (samice) 2
Propojovací kablíky s konektory DuPont (samice-samice, F-F), délka 10 cm 4
Bluetooth modul HC-06 1
3D tištěná krabička na modul BT HC-06 (STL tělo + víčko), 1 + 1
Šroubek M4×30 + M4 matička 1
Aplikace Dabble v našem mobilním zařízení  
Páječka, pájka, krimpovací kleště/ploché kleště, vteřinové lepidlo, imbusový klíč (2,5 nebo 3 podle typu hlavy)  

2. Finální zapojení

Hned na úvod tu máme finální zapojení naší rozšířené Fretky (obr.1). V rámci rozšíření napájecí části nám zůstanou pro případný další modul/čidlo k dispozici ještě dvě dvojice rezervních pinů (5V, GND).

Obr. 1: Zapojení robota Fretky rozšířeného o bluetooth modul HC-06

zpět na začátek

3. Řešení napájení

Možností řešení napájení více modulů a čidel je samozřejmě celá řada. Protože neplánujeme navýšit odběr více než o několik desítek mA (použité RobotDyn Arduino NANO nám poskytne max. 800 mA, takže s dvěma malými servomotory a jedním IR čidlem pro sledování čáry máme ještě dostatečnou rezervu), zapojili jsme si napájení přímo z pinů Arduina (5V a GND). K tomu budeme potřebovat dva kusy hřebínkové/kolíkové DuPont lišty 1×6 pinů a dva kusy napájecího kablíku (je vhodné použít červený pro 5V a černý pro GND, obr. 2). Kablík odizolujeme tak, abychom ho mohli následně připájet po celé délce lišty (obr. 3). Správnou délku si zkontrolujeme přiložením (obr. 4).

Obr. 2: Připravené komponenty – dva hřebínky DuPont s roztečí 2,54 mm a dva kablíky  Obr. 3: Konec každého vodiče odizolujeme  Obr. 4: Odizolovaná část by měla být dostatečně dlouhá

Aby bylo připájení snazší, naneseme si nejdříve větší množství pájky na odizolovanou část (obr. 5). Poté si zarovnáme obě části (např. pomocí „třetí ruky“, obr. 6). Odizolovanou část připájíme tak, aby byl každý kolík dobře vodivě spojen s kablíkem (obr. 7).

Obr. 5: Na odizolovanou část naneseme pájku  Obr. 6: Oba díly si zarovnáme a připájíme…  Obr. 7: Všechny piny musí být dobře propájené s odizolovanou částí vodiče

Na druhou stranu kablíku chceme nakrimpovat odpovídající konektor. Opět si malý kousek odizolujeme (ponecháme odizolované 4–5 mm). Můžeme použít krimpovací kleště (obr. 8), nebo nouzově i obyčejné malé ploché kleště. Protože jsme pro rozvod napájení záměrně použili silnější průřez vodiče, bude celý konektor nakrimpován na odizolované části (obr. 9), i když by měl být správně uchycen také na izolaci vodiče. Po nasazení krytek nakrimpovaných konektorů (obr. 10) nám ještě zbývá poslední krok. Tím je přilepení napájecích lišt na bok krabičky pro Arduino NANO (obr. 11). K rychlému přilepení můžeme použít vteřinové lepidlo. Pak už jen připojíme odpovídající konektory k pinům 5V a GND (obr. 12).

Obr. 8: Dalším krokem je nakrimpování konektorů  Obr. 9: Nakrimpované konektory (vzhledem k průřezu vodiče nezasahují na izolaci, jak by měly)  Obr. 10: Finální podoba našich dvou rozšiřujících „prvků“ před zapojením

Obr. 11: Na bok krabičky s Arduinem je možné lištu přilepit vteřinovým lepidlem  Obr. 12: Zapojíme obě lišty k odpovídajícím pinům na Arduinu (červený kablík – pin 5V, černý kablík – pin GND)  Obr. 13: Boční pohled na napájecí lištu (GND) po přepojení vodičů napájení čidla a motorů

Možná si říkáte, proč jsme nepoužili namísto kolíků (M, samec) lištu s otvory (F, samice), když pro rozvod napájení by bylo bezpečnější právě použití otvorů. Svým způsobem je na vině původní set pro stavbu robota Fretky, který nyní rozšiřujeme. Tam jsou totiž pro připojení čidel kablíky F-F (samice-samice) a protože jsme je s žáky chtěli použít i po rozšíření Fretky, zvolili jsme pro rozvod napájení kolíkovou lištu. Pokud budete chtít, můžete použít lištu s otvory a namísto propojovacích kablíků F-F pak použít kablíky F-M.

V tuto chvíli si můžeme přepojit všechny napájecí vodiče IR čidla pro sledování čáry a motorů (5V, GND) do našich nových napájecích lišt (schéma obr. 1, obr. 13).

zpět na začátek

4. Bluetooth modul

Pro bezdrátovou komunikaci využijeme levný bluetooth modul prodávaný pod označením HC-06. Náš modul HC-06 (obr. 14) nemá zapojené piny EN a STATE, což nevadí, protože tyto piny stejně nevyužijeme.

Obr. 14: Bluetooth modul HC-06  Obr. 15: Připravené 3D vytisknuté díly k zakrytování a montáži BT modulu  Obr. 16: Finálně „zakrabičkovaný“ BT modul v m-BITBEAM krabičce

BT modul si sice můžeme konfigurovat pomocí AT příkazů, ale pro naše použití s robotem Fretka to není třeba. Přednastavená rychlost komunikace (baud rate), 9600 bps, je pro nás dostačující, stejně jako ostatní přednastavené parametry. Jediný parametr, který má smysl měnit, je jméno (NAME). V případě, že chcete jméno změnit, můžete použít následující kód (kód si zkopírujete tlačítkem Copy v pravém horním rohu):

// Nastaveni BT modulu HC-06 a HC- 05

// Potrebujeme knihovnu SoftwareSerial!
#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

String command = ""; // ulozeni "odpovedi" HC-06 bluetooth modulu

void setup() {
  // otevreni seriove komunikace
  Serial.begin(9600);
  Serial.println("Napis AT prikaz...");
  
  // SW serial s BT module - otevreni komunikace
    // modul HC-06 je podle dokumentace prednasatveny na 9600 (AT+BAUD4).
    mySerial.begin(9600); // seriovy monitor pro HC-06 - bez CR a LF (!)
    // modul HC-05 je podle dokumentace prednasatveny na 38400 (AT+BAUD4).
    //mySerial.begin(38400);  // seriovy monitor pro HC-05 - konec radku CR (! - oficialne potrebuje CR+LF)
  
  // Pro HC-06
  // AT+BAUD4 (nastaveni na 9600 – prednastavena hodnota)
  // AT+NAMEFRETKA01 (zmena jmena na FRETKA01)
  // AT+PIN1234 (kod/pin pro sparovani - 1234 - prednastavena hodnota)
    
  // Pro HC-05
  // AT+UART=9600,0,0\r\n (nastaveni na 9600)
  // AT+NAME=FRETKA01\r\n (zmena jmena na FRETKA01)
  // AT+PSWD="1234" (kod/pin pro sparovani - 1234)

  //AT prikaz muzeme poslat jiz zde v casti setup
  //delay(10); //chvili musime pockat!
  //mySerial.write("AT+NAMEFRETKA01"); //posleme prikaz pro HC-06
}

void loop() {
  // Kdyz je spojeni s BT modulem k dispozici, cteme jeho seriovy vystup...
  if (mySerial.available()) {
    while(mySerial.available()) { // Dokud mame co cist, tak cteme...
      command += (char)mySerial.read();
    }
    
    Serial.println(command); // vypiseme "odpoved" modulu - prikaz/hlaseni
    command = ""; // po vypsani nastavime prazdny retezec
  }
  
  // Kdyz je k dispozici seriove spojeni a nejaky vstup uzivatele (zadani AT prikazu pres seriovy monitor).
  if (Serial.available()){
    delay(10); //chvili musime pockat!
    mySerial.write(Serial.read()); //posleme BT modulu nas AT prikaz
  }
}

Uvedený kód si nahrajeme do Arduina s připojeným BT modulem (obr. 1) a buďto zadáme AT příkaz ze „Sériového monitoru“ v Arduino IDE (Dole v nastavení Serial monitoru je pro HC-06 třeba zvolit „No line ending“ [Jednoduchý test, zda vše funguje, je poslat ze sériového monitoru příkaz AT, na který by měla přijít odpověď OK.]. Pomocí AT příkazu AT+NAMEFRETKA-01 přejmenujeme modul tak, že se bude hlásit jako „FRETKA-01“ (obr. 17)), nebo si kód upravíme tak, aby se AT příkaz odeslal již při spuštění programu (odstraníme „zakomentování“ řádku 32 a 33, zaměníme textový řetězec FRETKA01 za námi požadovaný). Podobně můžeme změnit například pin (přednastavený je „1234“) pro spárování s naším mobilním zařízením.

Obr. 17: Arduino IDE: Konfigurace HC-06 bluetooth modulu pomocí AT příkazů

Abychom mohli k Fretce BT modul snadno přidělat, vytiskneme si krabičku. Modely ve formátu STL najdete v našem m-BITBEAM Ferretbot repozitáři na GitHubu (STL – tělo, víčko, obr. 15). Modul volně vložíme do těla krabičky a zacvakneme krycí víčko. Z jedné strany je dobře viditelný popis jednotlivých pinů (obr. 16).

Upozornění: Vzhledem k variabilitě čínské výroby je možné, že vámi zakoupený bluetooth HC-06 modul nemusí přesně sedět do našich 3D modelů a krabičku budete muset lehce upravit. I to je ale velice dobrá zkušenost a můžete jí ve výuce náležitě využít!

zpět na začátek

5. Montáž a připojení BT modulu

K montáži modulu potřebujeme pouze jeden šroubek M4×30 s matičkou (obr. 18). Jedno z vhodných míst pro montáž je pravý horní výstupek krabičky Arduina (obr. 19). Při přišroubování (obr. 20) na tomto místě je z vnější strany dobře vidět popis pinů BT modulu, což žákům usnadňuje zapojení a jeho kontrolu.

Obr. 18: A jsme připraveni na montáž BT modulu na robota Fretku  Obr. 19: K montáži BT modulu je vhodný pravý horní roh krabičky Arduina  Obr. 20: Při montáži do tohoto místa je dobře viditelný popis pinů BT modulu

Připojení vodičů k BT modulu a Arduinu provedeme podle schématu (obr. 1). Protože je potřeba BT modul někdy odpojit, osvědčilo se slepení 4 konektorů pomocí izolepy (obr. 21). Pak je odpojení a připojení možné bez přemýšlení, kam která „barva“ vede, stačí si zapamatovat orientaci konektoru (např. žlutá je nahoře, obr. 22). Pokud máte 4pinový konektor, můžete ho použít místo 4 1pinových, které jsou součástí kablíků (výměna je, především pro mladší žáky, dosti problematický úkon :-)). Tím je náš upgrade Fretky po hardwarové stránce hotov (obr. 23, obr. 24, obr. 25, obr. 26).

Obr. 21: Před připojením BT modulu je vhodné 4 1pinové konektory slepit izolepou  Obr. 21: Před připojením BT modulu je vhodné 4 1pinové konektory slepit izolepou  Obr. 23: Upgrade Fretky je po HW stránce hotový!

Obr. 24: Upgrade Fretky – rozšíření o bluetooth modul (modrá krabička)  Obr. 25: Upgrade Fretky – rozšíření o bluetooth modul (modrá krabička)  Obr. 26: Upgrade Fretky – rozšíření o bluetooth modul (modrá krabička)

zpět na začátek

6. Programujeme rozšířenou Fretku

Hlavním cílem rozšíření Fretky o bluetooth modul je možnost bezdrátové interakce s robotem. Jako první se nabízí dálkové ovládání Fretky s využitím mobilního zařízení. Co by měl náš nový „program“ pro Fretku poskytovat? Nejdříve si nadefinujeme určité stavové „módy“, které budou později určovat, jak se bude robot chovat. Určitě chceme zachovat možnost autonomního sledování čáry. V této části je totiž stále co vylepšovat. Dále bychom chtěli ovládat robota z mobilní aplikace a hrát s ním třeba týmový „robotický hokej“. Žáci posléze přišli ještě s dalšími stavovými módy, a to sice rychlá rotace na místě vlevo a vpravo. Asi tušíte, že to bylo právě z důvodu onoho hokeje. Tím pádem tu máme módy:

  1. Ovládání pohybu pomocí e-joysticku v mobilní aplikaci (stavový mód: 0)
  2. Autonomní sledování čáry (stavový mód: 1)
  3. Rychlá rotace vlevo (stavový mód: 2)
  4. Rychlá rotace vpravo (stavový mód: 3)

K přepínání jednotlivých módů budeme používat mobilní aplikaci. Otázkou je, kde vzít vhodnou mobilní aplikaci? Mohli bychom si ji naprogramovat, ale to by vydalo na další článek a současně by to zbytečně „brzdilo“ ty, kteří se z nějakého důvodu do programování aplikací pro mobilní zařízení zrovna nehrnou. Použijeme tedy osvědčenou aplikaci Dabble (od STEMpedia), která je k dispozici v GooglePlayApp Store. Dabble (Dabble: One App for Sensing & Control = Jedna aplikace pro snímání a ovládání) je zdarma a umožňuje celu řadu „hrátek“ a určitě se k ní ještě v nějakém dalším článku vrátíme. Tentokrát použijeme pouze jednu část, a to sice herní ovladač GamePad. Důležité pro nás je, že k Arduinu máme k dispozici přímo od tvůrců Dabble potřebné knihovny a jejich dokumentaci i s příklady (dokumentace části GamePad, příklady najdeme jak pro Arduino, tak pro ESP32).

Instalaci knihoven provedeme v Arduino IDE standardně pomocí Library Manageru (obr. 27, obr. 28). Pokud byste chtěli experimentovat, najdete po nainstalování knihovny také řadu příkladů (obr. 29).

Obr. 27: Arduino IDE: Instalaci knihoven Dabble provedeme přes Library Manager  Obr. 28: Arduino IDE: Instalace Dabble knihoven v Library Manageru  Obr. 29: Arduino IDE: Po instalaci Dabble knihoven je k dispozici také řada příkladů

Do robota si nyní můžeme nahrát následující kód (kód si zkopírujeme tlačítkem Copy v pravém horním rohu):

// ********* Ferretbot - Fretka *********
//    robot ze stavebnice m-BITBEAM 
//   https://www.e-mole.cz/diy/m-bitbeam 
// **************************************
//  Program pro sledování čáry pomocí
//  IR čidla sledování čáry (použitý 
//  digitální výstup čidla D0 - D7)
//  a použití aplikace Dabble 
//  https://play.google.com/store/apps/details?id=io.dabbleapp
//  https://apps.apple.com/us/app/dabble-bluetooth-controller/id1472734455?ls=1
//  pro kontrolu robota pomocí GamePadu (Joystick Mode)
// **************************************

// zahrneme knihovnu Servo
#include <Servo.h>

// zahrneme Dabble pro ovladani pres BT
/*  Arduino Uno/Nano knihovny používají SoftwareSerial,
 *  pin 2 a pin 3 jsou použity jako 
 *  RX and TX piny:
 *  UNO  - BLUETOOTH MODULE
 *  2    - TX
 *  3    - RX
 *  Pro Uno/Nano ponechte bluetooth Baudrate pod 38400!
*/
    
#define CUSTOM_SETTINGS
#define INCLUDE_GAMEPAD_MODULE
#include <Dabble.h>

//#define DEBUG_MODE // odkomentovat pro ladění (výpis do serial monitoru)

const int line_sensor_digital_pin = 7; // pin pro D0 výstup IR senzoru sledování čáry

int line_sensor_state = 0; // stav senzoru pro sledování čáry
int line_sensor_value = 0; // počáteční hodnota "sledování čáry"

const int black = 0;  // definice konstanty pro „stav“ čidla nad černou čárou

int GLOBAL_MODE = 0;  // definice pro „stavový mód“ robota (0 = joystick, 1 = sledovac cary, 2 = rotace vlevo, 3 = rotace vpravo)

const int left_wheel_pin = 5;  // piny řízení servomotorů
const int right_wheel_pin = 11;

Servo left_wheel; // připojení servomotorů
Servo right_wheel; 

// proměnné pro pohyb robota
const int servo_stop = 1500;         //zastaveni serva
const int servo_speed = 150;         //relativni rychlost
const int servo_brake_factor = 150;  //čím více se bude brzdit, tím menší oblouk bude robot dělat
const int servo_bt_joystick_factor = 5;  //čím větší, tím pomaleji se bude robot pohybovat (optimální mezi 5-10)

const int r_fast_speed = servo_stop + servo_speed; // vyšší rychlost pravého kola
const int r_slow_speed = servo_stop + (servo_speed/servo_brake_factor);  // nižší rychlost pravého kola

const int l_fast_speed = servo_stop - servo_speed; // vyšší rychlost levého kola
const int l_slow_speed = servo_stop - (servo_speed/servo_brake_factor);  // nižší rychlost levého kola

int l_servo_speed = servo_stop; // aktuální rychlost levého kola = zastavím
int r_servo_speed = servo_stop; // aktuální rychlost pravého kola = zastavím

void setup() {
  // nastavení, spustí se pouze jednou na začátku programu:
  
  pinMode(line_sensor_digital_pin, INPUT);
  
  left_wheel.attach(left_wheel_pin);  // připojíme levé kolo
  right_wheel.attach(right_wheel_pin);  // připojíme pravé kolo
   
  left_wheel.writeMicroseconds(servo_stop);  // zastavíme kola...
  right_wheel.writeMicroseconds(servo_stop);

  delay(1000);  // ...počkáme 1s  

#ifdef DEBUG_MODE // pouze při aktivním ladění

  Serial.begin(9600);       // pozor (!) na nastavení stejného baudrate v okne sériového monitoru

#endif
  
  Dabble.begin(9600);  // pozor (!) na to, jak je nastaven váš BT modul

  delay(1000);  // ...počkáme 1s
}

void loop() {
  // hlavní kód, probíhá stále dokola:
  
  Dabble.processInput();  // tato funkce se používá k aktualizaci dat získaných ze smartphonu. Proto je volání této funkce povinné, aby bylo možné správně získat data z vašeho mobilního telefonu.

#ifdef DEBUG_MODE
  debug_dabble();
#endif

  // následující kód je funkční pouze s GamePad v Joystick módu(!)
  // nastavení stavového módu robota:
  // ruční ovládání joystickem
  if (GamePad.isCrossPressed()) // stisknutí "křížku"
  {
    GLOBAL_MODE = 0;
  }
  // sledování čáry / linefollower mode
  if (GamePad.isTrianglePressed()) // stisknutí "trojúhelníku"
  {
    GLOBAL_MODE = 1;
  }
  // otáčka vlevo / rotate left
  if (GamePad.isSquarePressed()) // stisknutí "čtverečku"
  {
     GLOBAL_MODE = 2;
  }
  // otáčka vpravo / rotate right
  if (GamePad.isCirclePressed()) // stisknutí "kolečka"
  {
    GLOBAL_MODE = 3;
  }
  
  if (GLOBAL_MODE == 0) { //joystick
    // načtení hodnot joysticku
    int angle = GamePad.getAngle(); // 0 - 360
    int strength = GamePad.getRadius(); // 0 - 7   
      // ovládání pohybu robota
      
      if (angle < 180) { // jedu dopredu
        if (angle < 90) { // zatacim doprava
          l_servo_speed = strength * 255 / servo_bt_joystick_factor;
          r_servo_speed = strength * (angle * 255 / 90) / servo_bt_joystick_factor;
        } else if (angle > 90) { // zatacim doleva
          l_servo_speed = strength * ((180 - angle) * 255 / 90) / servo_bt_joystick_factor;
          r_servo_speed = strength * 255 / servo_bt_joystick_factor;
        } else { // jedu rovne
          l_servo_speed = strength * 255 / servo_bt_joystick_factor;
          r_servo_speed = strength * 255 / servo_bt_joystick_factor;
        }
    
        //nastavení rychlosti kol
        right_wheel.writeMicroseconds(servo_stop + r_servo_speed); 
        left_wheel.writeMicroseconds(servo_stop - l_servo_speed);
      
      } else if (angle > 180) { // jedu dozadu
        if (angle > 270){ // zatacim doprava
          l_servo_speed = strength * 255 / servo_bt_joystick_factor;
          r_servo_speed = strength * ((360 - angle) * 255 / 90) / servo_bt_joystick_factor;
        } else if (angle < 270) { // zatacim doleva
          l_servo_speed = strength * ((90 - (270 - angle)) * 255 / 90) / servo_bt_joystick_factor;
          r_servo_speed = strength * 255 / servo_bt_joystick_factor;
        } else { // jedu rovne
          l_servo_speed = strength * 255 / servo_bt_joystick_factor;
          r_servo_speed = strength * 255 / servo_bt_joystick_factor;
        }
        
        //nastavení rychlosti kol
        right_wheel.writeMicroseconds(servo_stop - r_servo_speed); 
        left_wheel.writeMicroseconds(servo_stop + l_servo_speed);
              
      }  
  } else if (GLOBAL_MODE == 1) { // sledování čáry / linefollower

      line_sensor_state = digitalRead(line_sensor_digital_pin); //  zjistíme hodnotu z čidla
      
      if (line_sensor_state == black)  //  pokud jsem nad černou čárou
      {
        left_wheel.writeMicroseconds(l_slow_speed); //  zatáčím doleva
        right_wheel.writeMicroseconds(r_fast_speed);
      }
      else                             //  pokud jsme nad bílou plochou papíru
      {
        left_wheel.writeMicroseconds(l_fast_speed); //  zatáčím doprava
        right_wheel.writeMicroseconds(r_slow_speed);     
      }    
      delay(20);
      
  } else if (GLOBAL_MODE == 2) { // rychlá otočka vlevo / rotate left
     
     right_wheel.writeMicroseconds(servo_stop + (2 * servo_speed)); 
     left_wheel.writeMicroseconds(servo_stop + (2 * servo_speed));
     
  } else if (GLOBAL_MODE == 3) { // rychlá otočka vpravo / rotate right
     
     right_wheel.writeMicroseconds(servo_stop - (2 * servo_speed)); 
     left_wheel.writeMicroseconds(servo_stop - (2 * servo_speed)); 
  }
}

#ifdef DEBUG_MODE // pouze při zapnutém ladění
void debug_dabble() {
   if (GamePad.isUpPressed())
  {
    Serial.print("UP");
  }

  if (GamePad.isDownPressed())
  {
    Serial.print("DOWN");
  }

  if (GamePad.isLeftPressed())
  {
    Serial.print("Left");
  }

  if (GamePad.isRightPressed())
  {
    Serial.print("Right");
  }

  if (GamePad.isSquarePressed())
  {
    Serial.print("Square");
  }

  if (GamePad.isCirclePressed())
  {
    Serial.print("Circle");
  }

  if (GamePad.isCrossPressed())
  {
    Serial.print("Cross");
  }

  if (GamePad.isTrianglePressed())
  {
    Serial.print("Triangle");
  }

  if (GamePad.isStartPressed())
  {
    Serial.print("Start");
  }

  if (GamePad.isSelectPressed())
  {
    Serial.print("Select");
  }
  Serial.print('\t');
  
  int a = GamePad.getAngle();
  Serial.print("Angle: ");
  Serial.print(a);
  Serial.print('\t');
  int b = GamePad.getRadius();
  Serial.print("Radius: ");
  Serial.print(b);
  Serial.print('\t');
  float c = GamePad.getx_axis();
  Serial.print("x_axis: ");
  Serial.print(c);
  Serial.print('\t');
  float d = GamePad.gety_axis();
  Serial.print("y_axis: ");
  Serial.println(d);
  Serial.println();
  Serial.print("r_speed");
  Serial.print(l_servo_speed);
  Serial.print('\t');
  Serial.print("l_speed");  
  Serial.print(r_servo_speed);  
  Serial.print('\t');  
  Serial.println();

  delay(150);      
}
#endif

Aplikaci Dabble a její nastavení si můžete prohlédnout na obr. 30, obr. 31obr. 32 . Předchozí kód kombinuje výše zmiňovanou funkčnost, a to tak, že pravá část ovladače se čtyřmi tlačítky aktivuje jednotlivé stavové módy robota:

  • Křížek = ovládání pohybu pomocí joysticku (vlevo)
  • Trojúhelník = autonomní sledování čáry
  • Čtvereček = rychlá rotace vlevo
  • Kolečko = rychlá rotace vpravo

Tlačítka SelectStart nejsou použita a jsou vám k dispozici k vlastním rozšířením a úpravám.

Obr. 30: Dabble: Aplikace po spuštění – vybereme si Gamepad  Obr. 31: Dabble: V rámci Gamepadu přepneme na mód Joystick  Obr. 32: Dabble: Posledním krokem je připojení našeho robota…

Indikace připojení k Fretce je na BT modulu HC-06 typicky viditelná pomocí červené stavové diody (ta běžně bliká, po připojení svítí nepřetržitě). Po zdárném připojení Fretky k mobilnímu telefonu/tabletu jako buetooth zařízení již můžeme s Fretkou jezdit a testovat různé „stavové módy“. Ovládání z mobilního telefonu zvládáme a jízda nám nějaký čas s žáky určitě vydrží. A co dál? Můžeme začít pracovat na dalších vylepšeních? Jistě! Nabízí se hned několik směrů. Co třeba použít analogový výstup z IR čidla po sledování čáry a jízdu „po čáře“ výrazně urychlit?

zpět na začátek

7. Možné problémy

V průběhu používání Fretek s žáky se nám objevilo několik problémů, které mají pravděpodobně společné vysvětlení, a to nestálé napájení. K napájení používáme levnou válcovou powerbanku s jedním Li-Ion 18650 článkem (ceně odpovídá i elektronika step-up měniče pro výstupních 5 V). Bohužel, čas od času se stane (elektronika zapínající výstup v powerbance, špatně zasunutý konektor, značně vybitá „baterie“, …, důležitý je i kvalitní USB kabel!), že patrně zakolísá napětí a začnou se dít nepředvídatelné věci. Je to s podivem, protože klidový odběr Fretky je cca 80 mA, při roztočení obou kol maximální rychlostí jen 180 mA (nárazová špička je pak cca 250 mA). Naše powerbanka má přitom na výstupu teoreticky 1 A (ve skutečnosti 800 mA), takže problém s napájením by tu teoreticky neměl být, ale patrně je. Typickým příkladem je, že po zapnutí (zasunutí USB kabelu) se jedno kolo roztočí, a druhé stojí. V takovém případě stačí kabel vypojit a znovu zapojit. U některých BT HC-06 modulů se nám stává, že je sice možné se k modulu připojit, ale komunikace mezi modulem a Arduinem neprobíhá a robot na ovládání z mobilního telefonu nereaguje. V tomto případě se osvědčilo odpojit BT modul (vytáhnout z něj vodiče) a po pár sekundách je opět připojit. Následně již komunikace funguje tak, jak má. Uvedené problémy jsou hodně závislé na konkrétní Fretce (patrně spíše na konkrétní powerbance), takže u některých se prakticky nevyskytují, u jiných je výskyt problémů sporadický a u některých častější. Dobrá zpráva je, že když se podaří vše „spustit“ a připojit, není pak problém s Fretkou jezdit i několik hodin v kuse. Pro úplnost, při napájení ze stabilizovaného zdroje jsme popsané chování nikdy nepozorovali. Pokud by někdo z vás čtenářů věděl, jak tyto problémy jednoduše eliminovat, dejte nám vědět, budeme rádi za každý tip.

zpět na začátek

8. Využití ve výuce

Po rozšíření Fretky o bluetooth komunikaci se nám v rámci výuky otevírají nové možnosti. Něco z nich jsme nastínili výše. Významným rozšířením pro žáky je již samotný fakt, že pracují s novým modulem pro bezdrátovou komunikaci. I bezdrátová komunikace si totiž nese svá specifika, takže můžeme testovat dosah signálu a co ho ovlivní (vzdálenost, zdi, nastavený baudrate, stínění alobalem, …). Zpestření výuky může být pro žáky i zmiňovaný hokejový zápas, nejlépe družstev. U hokeje můžeme zapojit i konstrukční dovednosti a soutěžit o vylepšení Fretky pro snazší vedení a manipulaci s pukem (víčkem od minerálky). Podobně se dá řešit robotický fotbal (zvládat kutálející se míček je pro žáky obtížnější úkol). Další věcí, která se přímo nabízí, je „robotická překážková dráha“. Dráha může zahrnovat např. úkol s dopravou předmětu z místa na místo, automatické sledování čáry a na závěr „jízdu do vrchu“, kdy je potřeba vymyslet, jak vyjet co nejvýše na strmou nakloněnou rovinu (nemusí jít pouze o styl a směr jízdy, ale také o různé dovyvážení robota). Protože zde máme 5 hlavní oblastí, kde se mohou žáci uplatnit, nabízí se rozdělení různých rolí, a to i napříč ročníky. Žáci vyšších ročníků mohou být v roli konstruktérů, programátorůherních stratégů. Žáci nižších ročníků pak hrají roli „pilotů“ a kreativců (týmovému robotovi vtisknou určité nezaměnitelné „stájové“ rysy díky různým doplňkům, mohou také navrhnout a umístit na robota týmové logo apod.). Možností je celá řada a jistě vás už napadají další…

A na závěr pár fotografií z několika akcí, kde jsme Fretky s našimi žáky prezentovali (obr. 3338).

Obr. 33: Naši studenti staví Fretky na Maker Faire 2019 (stánek YSoft)  Obr. 34: Naši studenti staví Fretky na Maker Faire 2019 (stánek YSoft)  Obr. 35: Hrátky s Fretkami na Maker Faire 2019 (stánek YSoft)

Obr. 36: Dráha pro Fretky na „Dnech otevřených dveří“ 2019 (Gymnázium Polička)  Obr. 37: Hrátky s Fretkami na „Dnech otevřených dveří“ 2019 (Gymnázium Polička)  Obr. 38: Hrátky s Fretkami 2020 (Centrum technického vzdělávání při Městské knihovně Polička)

Autor: Tomáš Feltl, Gymnázium Polička & Časopis e-Mole.cz & Centrum technického vzdělávání při Městské knihovně Polička, 25. 2. 2021

Jak citovat tento článek:

FELTL, Tomáš. Bezdrátová komunikace pro Fretku. e-Mole: časopis o výuce nejen s digitálními technologiemi [online]. 2021 (2/25). Vydáno: 25. 2. 2021. vyd. Tomáš Feltl – TFSoft, 2021. [cit. datum citování]. ISSN 2336-5714. Dostupné z: https://www.e-mole.cz/clanek/bezdratova-komunikace-pro-fretku

Všechny obrázky v článku: 
Obr. 1: Zapojení robota Fretky rozšířeného o bluetooth modul HC-06
Obr. 2: Připravené komponenty – dva hřebínky DuPont s roztečí 2,54 mm a dva kablíky
Obr. 3: Konec každého vodiče odizolujeme
Obr. 4: Odizolovaná část by měla být dostatečně dlouhá
Obr. 5: Na odizolovanou část naneseme pájku
Obr. 6: Oba díly si zarovnáme a připájíme…
Obr. 7: Všechny piny musí být dobře propájené s odizolovanou částí vodiče
Obr. 8: Dalším krokem je nakrimpování konektorů
Obr. 9: Nakrimpované konektory (vzhledem k průřezu vodiče nezasahují na izolaci, jak by měly)
Obr. 10: Finální podoba našich dvou rozšiřujících „prvků“ před zapojením
Obr. 11: Na bok krabičky s Arduinem je možné lištu přilepit vteřinovým lepidlem
Obr. 12: Zapojíme obě lišty k odpovídajícím pinům na Arduinu (červený kablík – pin 5V, černý kablík – pin GND)
Obr. 13: Boční pohled na napájecí lištu (GND) po přepojení vodičů napájení čidla a motorů
Obr. 14: Bluetooth modul HC-06
Obr. 15: Připravené 3D vytisknuté díly k zakrytování a montáži BT modulu
Obr. 16: Finálně „zakrabičkovaný“ BT modul v m-BITBEAM krabičce
Obr. 17: Arduino IDE: Konfigurace HC-06 bluetooth modulu pomocí AT příkazů
Obr. 18: A jsme připraveni na montáž BT modulu na robota Fretku
Obr. 19: K montáži BT modulu je vhodný pravý horní roh krabičky Arduina
Obr. 20: Při montáži do tohoto místa je dobře viditelný popis pinů BT modulu
Obr. 21: Před připojením BT modulu je vhodné 4 1pinové konektory slepit izolepou
Obr. 22: Finálně připojený BT modul
Obr. 23: Upgrade Fretky je po HW stránce hotový!
Obr. 24: Upgrade Fretky – rozšíření o bluetooth modul (modrá krabička)
Obr. 25: Upgrade Fretky – rozšíření o bluetooth modul (modrá krabička)
Obr. 26: Upgrade Fretky – rozšíření o bluetooth modul (modrá krabička)
Obr. 27: Arduino IDE: Instalaci knihoven Dabble provedeme přes Library Manager
Obr. 28: Arduino IDE: Instalace Dabble knihoven v Library Manageru
Obr. 29: Arduino IDE: Po instalaci Dabble knihoven je k dispozici také řada příkladů
Obr. 30: Dabble: Aplikace po spuštění – vybereme si Gamepad
Obr. 31: Dabble: V rámci Gamepadu přepneme na mód Joystick
Obr. 32: Dabble: Posledním krokem je připojení našeho robota…
Obr. 33: Naši studenti staví Fretky na Maker Faire 2019 (stánek YSoft)
Obr. 34: Naši studenti staví Fretky na Maker Faire 2019 (stánek YSoft)
Obr. 35: Hrátky s Fretkami na Maker Faire 2019 (stánek YSoft)
Obr. 36: Dráha pro Fretky na „Dnech otevřených dveří“ 2019 (Gymnázium Polička)
Obr. 37: Hrátky s Fretkami na „Dnech otevřených dveří“ 2019 (Gymnázium Polička)
Obr. 38: Hrátky s Fretkami 2020 (Centrum technického vzdělávání při Městské knihovně Polička)

Automatic translation

Můžete využít automatický překlad stránek do následujících jazyků. Výchozím jazykem je čeština. K automatickému překladu využíváme služeb GTranslate.
You can use automatic translation of the pages into the following languages. The default language is Czech. We use GTranslate services for automatic translation.

Czech English French German Italian Portuguese Russian Spanish

e-Mole zpravodaj

Objednejte si zasílání novinek e-mailem! Váš e-mail bude použit pouze k zasílání informací o novinkách na našem webu. Odebírání e-mailového zpravodaje můžete kdykoli zrušit (váš email bude z naší databáze trvale odstraněn).