Hardware | Programování | Pojďme programovat elektroniku

Pojďme programovat elektroniku: Vyzkoušíme IR, ovládneme světýlko přes Bluetooth a vyšleme zprávu na sto metrů

  • Budeme odposlouchávat IR ovladač klimatizace
  • Vyrobíme laciný rádiový vysílač
  • Vyzkoušíme komunikaci pomocí Bluetooth a v pásmu 433 MHz

Zatím jsme si hráli jen s nízkoúrovňovými IR/RF vysílači, to se ale s HC-05 mění. HC-05 je vysílač pro Bluetooth od čínské fabriky HC, který komunikuje pomocí rozhraní UART – tedy skrze sériovou linku. Tu už velmi dobře znáte, doposud jsem ji totiž používal pro výpis informací do připojeného PC skrze USB.

28645833
Bluetooth vysílač HC-05 připájený na obslužné desce pro snadnější připojení k Arduinu

HC-05 mi k experimentování poskytl Arduino-shop.cz

Mocná sériová linka

Arduino a jeho mikrokontroler Atmel rozhraní UART nativně podporuje, takže pro přenos dat nejsou zapotřebí žádné knihovny a tuny kódu.

Stačí na začátku programu nastartovat sériovou linku třeba na základní rychlost 9600 bps:

Serial.begin(9600);

No a poté do linky poslat třeba textový ASCII řádek:

Serial.println("Nazdar");

Pokud bude Arduino přes USB připojené k PC, zobrazí se v otevřeném terminálu pro sériovou komunikaci text „Nazdar“. A pokud bude přes UART připojené jako v našem případě k Bluetooth modulu HC-05, zpráva „Nazdar“ dorazí na jeho mikročip, ten jej zpracuje a vyšle protokolem Bluetooth do spárovaného zařízení.

Jednoduché jako facka, viďte!

Sériová komunikace je samozřejmě oboustranná, takže pokud druhé zařízení odpoví, HC-05 data opět zpracuje, a bude-li se jednat o textový řetězec, přečtu jej třeba tímto způsobem:

if(Serial.available()){
zprava = Serial.readString();
}

HC-05 má vedle napájecích a konfiguračních pinů dva klíčové UART vodiče: TX pro zápis a RX pro čtení. Ty mohu buď křížově připojit na totožné piny na Arduinu (RX patří do TX a naopak) a začít komunikovat pomocí zmíněných příkazů výše, anebo je připojím na libovolné digitální piny, které proměním v UART softwarovou cestou pomocí standardní knihovny SoftwareSerial.

To je velmi praktické, pokud je totiž Arduino připojené k PC, hardwarový UART je zpravidla obsazený právě tímto spojením. Základní modely Arduina přitom mají zpravidla jen jeden pár dedikovaných pinů pro TX/RX.

Suma sumárum, díky knihovně SoftwareSerial může být k Arduinu připojeno hned několik UART zařízení naráz.

Pojďme ovládat barevná LED světýlka

Dost ale bylo teoretické omáčky. Pojďme si to konečně vyzkoušet v praxi. Připojil jsem k Arduinu HC-05 a také jednu modrou a červenou LED diodu. Na mobilní telefon jsem nainstaloval BT Simple Terminal, který použije BT profil SPP – Serial Port Profile, jenž je v podstatě emulátorem sériové linky.

592220970
Barevné LED diody s dálkovým ovládáním přes Bluetooth

Jakmile bude Arduino pod napětím, připojený HC-05 se přepne do párovacího módu a na telefonu jej připojíte jako jakékoliv jiné BT zařízení. Ve výchozím stavu se jmenuje HC-05, pomocí sériové linky jej ale můžete libovolně nastavit, takže se může jmenovat jako váš finální produkt, který na něm postavíte.

304305707 77262952 800320524
Na straně telefonu komunikuji s Arduinem skrze emulátor sériové linky

Po spárování už mohu otevřít samotný mobilní terminál, kde se mi Arduino ohlásí uvítací zprávou s informací, že když napíšu slovo cervena, rozsvítí se červená dioda, no a když modra, rozsvítí se zase modrá.

751726240 953983733
Je libo červené, nebo modré světýlko sepnuté na dálku pomocí Bluetooth?

Namísto textového BT Simple Terminalu bych si samozřejmě mohl v dalším kroku napsat vlastní mobilní aplikaci a LED diody ovládat pomocí tlačítek. Ti bystří už tuší – právě jsem pomocí Arduina demonstroval, jak funguje ovládání chytrých RGB Bluetooth žárovek. Ta moje je jen o něco jednodušší.

Jednoduchý kód spínače by mohl vypadat třeba takto:

String zprava;
zprava.reserve(20);

void setup(){
  Serial.begin(9600);
  Serial.println("Ahoj, tady Arduino!");
  Serial.println("Napis 'cervena' nebo 'modra' pro aktivaci svetla");
  pinMode(8,OUTPUT); // modra LED
  pinMode(9,OUTPUT); // cervena LED
}

void loop(){
  if(Serial.available()){
    zprava = Serial.readString();
    if(zprava == "cervena"){  
      digitalWrite(8,LOW);
      digitalWrite(9,HIGH);
      Serial.println("Zapinam cervene svetlo!");
    }
    if(zprava == "modra"){
      digitalWrite(8,HIGH);
      digitalWrite(9,LOW);
      Serial.println("Zapinam modre svetlo!");
    }
  }
  delay(100);
}

Tak to bychom měli Bluetooth skrze sériovou linku, mně se ale UART prostě líbí, a tak se na něj podívám i v poslední kapitole. Vrátím se ke kmitočtu 433 MHz, tentokrát ale nepůjde o vysílačku s dosahem několika metrů, ale o mnohem robustnější signál, který si za ideálních podmínek poradí i se vzdáleností více než kilometr!

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , , ,