Ovládání pomocí Bluetooth – pro PICAXE

Spojení přes Bluetooth v pásmu 2,4 GHz sice nemá velký dosah, ale v rámci místnosti většinou stačí, je poměrně spolehlivé, a od doby, kdy se stalo součástí téměř všech mobilních telefonů, je vždy po ruce. Jak to udělat, abychom byli schopni přes Bluetooth ovládat jednoduchá i složitější zařízení?

Jako vysílač povelů nám poslouží telefon, tablet, počítač vybavený Bluetooth (BT) nebo PC s levným USB adaptérem. Na druhé straně budeme potřebovat BT modul se sériovým výstupem a nějaký dekodér, který dokáže přicházející kódované povely převést na logický signál, následně přes silové obvody na zapnutí či vypnutí příslušných zařízení.

V první řadě si musíme uvědomit, že spojení je vždy obousměrné a je obvyklé, že přijetí dat je ověřeno jejich odesláním zpět. Nelze jednoduše říci, že jedna strana je vysílačem a druhá přijímačem jako je to obvyklé například při IR ovládání, obě strany vysílají i přijímají. Pro naše účely budeme jako vysílač označovat tu stranu, ze které přicházejí povely, jako přijímač stranu u ovládaného zařízení.

Spojení je typu master / slave mezi dvěma zařízeními, master navazuje spojení a v našem případě je to vždy vysílač (mobil, tablet, ..). Na druhé straně nám postačuje použít BT modul, který vždy zastává podřízenou funkci a nic jiného neumí, jako příklad si vezmeme rozšířený modul HC-06. Pokud bychom chtěli navázat spojení mezi dvěma zařízeními vlastní konstrukce, museli bychom použít nejméně jeden modul, který dovoluje provoz jak v nadřízeném, tak podřízeném režimu, například HC-05, jehoobsluha je ale trochu jiná.

IMGP9591b

Bluetooth modul HC-05

Strana vysílače

V PC se při instalaci modul většinou hlásí jako standardní sériový (COM) port. Předpokládejme, že BT modul na straně přijímače je zapnutý, stačí napájení, aby byl aktivní. Na straně masteru (PC) necháme vyhledat všechna dostupná BT zařízení, mělo by se mezi nimi objevit jedno s textovým označením HC-06. Pokud se ukazuje jeho adresa (12-ti místné číslo, někdy se zobrazuje a zadává po dvoučíslích oddělené dvojtečkami), opíšeme si ji, některé programy vyžadují toto číslo zadat ručně, jiné se spokojí s potvrzením názvu zařízení. Pokusíme se navázat spojení. Poprvé budeme vyzváni, abychom zadali heslo (PIN), bývá to čtyřmístné číslo, které musíme zjistit z dokumentace k BT modulu přijímače. Jestliže jsme heslo po zakoupení modulu nezměnili, je u HC-06 od výrobce nastaveno na hodnotu 1234. Pak už by měl modul trvalým svitem LED indikovat navázané spojení. V případě PC se toto dělá na úrovni systému (zařízení a tiskárny) a tady také zjistíme i číslo COM portu, které bylo zařízení přiděleno. Pod Androidem to je až součástí programu, který si vybereme ke komunikaci, většinou stačí jen klepnout na slovní označení dostupného BT zařízení.

blueset

Instalace BT modulu do PC

Potřebujeme nainstalovat nějaký program, pomocí něhož budeme povely zadávat a případně přijímat zpět odesílané informace. Nejuniverzálnější a současně nejméně pohodlné na ovládání jsou textové terminály, například Hercules setup utility (Windows XP a novější). Tento program umí komunikovat přes více rozhraní, pro nás bude podstatné spojení přes sériové porty. Musíme vybrat ten, který jsme zjistili v nastavení. Další zadání parametrů (rychlost komunikace) bývá zbytečné. Jakmile dostaneme potvrzení o otevření portu, měl by i BT modul (možná s malým zpožděním) signalizovat navázané spojení.

bluepc

Univerzální terminál Hercules

Každý napsaný znak je okamžitě odeslán, jestliže podržíme klávesu, je automaticky opakován. Toho můžeme i využít například při zvyšování nebo snižování hodnoty nějakého parametru, nicméně když potřebuje nějaké zařízení jen zapnout nebo vypnout, je vhodné přiřadit dva různé povely (jeden pro zapnutí, druhý pro vypnutí), ne prvním použitím povelu zapínat a druhým použitím stejného povelu vypínat. Spojení s BT modulem se ukončí uzavřením sériového kanálu.

V případě mobilu a tabletu je nutné nejprve povolit použití BT. Pro zařízení s Androidem je vhodným univerzálním terminálem například SENA BTerm. Po instalaci v menu Bluetooth Management zadáme adresu BT modulu přijímače nebo necháme vyhledat všechna dostupná zařízení, pak vybereme HC-06 a potvrdíme. Při prvním použití opět musíme zadat PIN. Příště, až se bude navazovat spojení, stačí už jen zvolit poslední připojené zařízení nebo vybrat ze seznamu, heslo už nebude třeba. Spojení se ukončí vypnutím programu přes volbu Exit. Ještě je dobré nastavit v terminálu, aby přechod na nový řádek (tlačítko Enter) generoval jak při odesílání dat tak při zobrazování přijímaných dat ASCII znaky (řídící kódy) CR i LF ($0D i $0A) a zapnout automatické scrollování pracovní plochy, jinak by byly výpisy nepřehledné.

IMGP9582b

Bluetooth terminál SENA BTerm na displeji telefonu

Příkladem jednoduchého specializovaného programu pro Android, který zobrazí na displeji tlačítka a při jejich použití vyšle příslušné kódy přes BT, je Robot Control (Wise Owl Apps, LLC) volně dostupný na https://play.google.com/store. Program je původně určený pro ovládání malých robotů, takže má tlačítka pro pohyby vpřed, vzad, vpravo, vlevo, obrat vpravo, obrat vlevo, stop a tři tlačítka f1 až f3. Robot Control vyžaduje ruční zadání adresy a generované kódy jsou pevně dané, to je nevýhoda, protože přizpůsobit se musí ovládané zařízení. Tento program se osvědčil zejména na starších verzích Androidu, na nových je v některých případech nestabilní. Přehled kódů je v PDF dokumentaci, kterou lze stáhnout na stejném místě jako program.

robot_control

Program Robot Control pro starší telefony

Druhým programem pro Android, který se osvědčil, je Robot Bluetooth Control od českého autora Ondřeje Peliše. Volba je snadná výběrem ze seznamu známých nebo vyhledaných zařízení. Program mimo jiné nabízí čtyři kurzorová tlačítka směru, jedno červené pro vypínání a devět funkčních tlačítek, která si uživatel může v nastavení sám pojmenovat. Výhodou je, že všechny kódy vysílané po stisku tlačítek se dají nastavit. Kromě tlačítek najdeme na displeji i zónu, do níž se vypisují přijaté zprávy, a to buď ve formě čísel (HEX), nebo textově s možností změny kódování znaků. Program tedy v sobě kombinuje pohodlnější zadávání povelů tlačítky a možnost zpětného hlášení od přístroje v textové formě.

rbt

Program Robot Bluetooth Control na tabletu

Modul HC-06 a jeho nastavení

Modul HC-06 respektive HC-06-D (se stabilizátorem 3,2 V na větší desce) má čtyři popsané vývody vyvedené na kolíkové kontakty (RxD, TxD, GND a VCC) na jedné straně, na druhé je anténa vytvořená meandrem na DPS. Napájecí napětí modulu může být v rozmezí 3,3 až 5 V a je pro obvody stabilizováno na desce, vstupní napětí vyšší než 7 V modul zničí. Úroveň vstupního i výstupního signálu je 3,2 V, při spolupráci s mikrokontrolérem napájeným napětím 5 V je třeba úrovně přizpůsobit. Výstupní signál jde brát jak z vývodu TxD, tak z vývodu RxD, což nahrává komunikaci s modulem po jediném vodiči, pokud by to bylo třeba.

IMGP0272b

Vývody BT modulu HC-06

LED na modulu signalizuje stav. Pokud bliká, není navázáno spojení a modul lze přes vývody TxD / RxD programovat příkazy AT. Jestliže LED svítí, je navázáno spojení a vše ze vstupu se považuje za přenášená data. Výchozí nastavená rychlost sériového přenosu je 9600 Bd (bez parity, 8 bit, 1 stopbit). V přehledu je výčet akceptovaných povelů a odezva na RxD.

Povel (na TxD) Odezva (na RxD) Význam
AT OK kontrola funkce
AT+BAUD1 OK1200 nastavení přenosové rychlosti 1200 Bd
AT+BAUD2 OK2400 nastavení přenosové rychlosti 2400 Bd
AT+BAUD3 OK4800 nastavení přenosové rychlosti 4800 Bd
AT+BAUD4 OK9600 nastavení přenosové rychlosti 9600 Bd
AT+BAUD5 OK19200 nastavení přenosové rychlosti 19200 Bd
AT+BAUD6 OK38400 nastavení přenosové rychlosti 38400 Bd
AT+BAUD7 OK57600 nastavení přenosové rychlosti 57600 Bd
AT+BAUD8 OK115200 nastavení přenosové rychlosti 115200 Bd
AT+NAMExxxx OKxxxx nastaví jméno modulu na xxxx (tovární HC-06)
AT+PINxxxx OKsetpin nastaví PIN na xxxx (tovární 1234) *
AT+PN Přenos bez parity (od verze firmware 1.5)
AT+PO Přenos s lichou paritou (od verze firmware 1.5)
AT+PE Přenos se sudou paritou (od verze firmware 1.5)

* nový PIN platí až po vypnutí a prodlevě cca 30 s na vybití

Mikrokontrolér může opakovat nastavení modulu třeba vždy po zapnutí, ale není to nutné, jednou vložené parametry zůstávají platné až do další změny povelem. Problém může být v tom, že při nastavené různé přenosové rychlosti v mikrokontroléru a v modulu se žádné srozumitelné povely nepřenesou. Dojde-li k situaci, kdy není jasné, jaká rychlost přenosu je v modulu zadaná, odešlete do modulu s určitými prodlevami (řekněme 1 s) potřebný povel změny rychlosti komunikace postupně ve všech možných rychlostech. Ty špatné se nepřečtou, při té správné se modul nastaví. Je to poněkud brutální způsob, ale nic nepoškodí a funguje.

Zapínáme jednu LED na dálku

Asi nejjednodušším možným příkladem je požadavek na zapnutí / vypnutí jednoho okruhu, který bude v našem případě reprezentovat LED. Výstup je možné samozřejmě libovolně posílit, opticky nebo pomocí relé oddělit a spínat libovolnou zátěž včetně síťových spotřebičů, tím se ale už nebudeme detailně zabývat.

prvni pokus A

Schema nejjednoduššího ovládání jedné LED

Využijeme PICAXE 08M2 a vyjdeme z toho, že nepotřebujeme vstup do modulu, úrovně výstupu jsou pro PICAXE i při napájení 5 V spolehlivě čitelné. Tím se vyřeší přizpůsobování úrovní. Schéma ani program (dlouhý 36 bytů) už snad jednodušší být nemůže. Výstup budeme ovládat telefonem s programem Robot Bluetooth Control tlačítky F1 a F3, u nich si nastavíme jména „zap“ a „vyp“ a kódy 112 ($70, znak p) a 113 ($71, znak q). Modul byl předem pouze pro tento případ nastaven na rychlost 1200Bd aby nebylo nutné zvyšovat základní takt mikrokontroléru 4 MHz.

Můžeme vyzkoušet i ovládání pomocí programu SENA BTerm, je to sice méně pohodlné a musíme si pamatovat, co který kód znamená, ale tlačítka p a q jsou „shodou okolností“ na protilehlých okrajích virtuální klávesnice a hledají se dobře, stisk jiných tlačítek nemá žádný účinek.

IMGP0260b

Zapojení pro jednu LED na kontaktním poli

REM Ovladani LED pres BT modul HC-06 - PICAXE
do                            ;začátek smyčky programu
  b0=0                        ;nulování paměti pro povely
  serin [2000],c.3,T1200,b0   ;čtení z bluetooth (čeká na znak 2s)
  select b0                   ;rozdělení podle přijatého znaku
    case "p" high c.4         ;zapnout LED 
    case "q" low c.4          ;vypnout LED
    endselect                 ;konec rozdělení povelů
loop                          ;konec smyčky

Tři LED se zpětným potvrzením

Komunikace mezi BT vysílačem (telefonem) a BT modulem HC-06 je vždy obousměrná, ale z komunikace mezi HC-06 a mikrokontrolérem jsme zatím využívali jen jeden směr, to nyní změníme. Rozšíříme ovládání na tři LED a současně necháme mikrokontrolér, aby provedení přijatého povelu potvrdil zpětným textovým hlášením. Příklad takového ověření při ovládání z terminálu SENA BTerm je na dalším obrázku.

IMGP9588b

Zpětné hlášení v programu SENA BTerm

Opět budeme k ovládání používat program Robot Bluetooth Control, upravíme popisy tlačítek F1, F4 a F7 na on1, on2 a on3 a popisy tlačítek F3, F6 a F9 na off1, off2 a off3, české popisy se zkratkami zap a vyp se bohužel nevejdou. Příslušné kódy pro zapínání jednotlivých LED budou 201, 203 a 205 a pro vypínání 202, 204 a 206 (vše dekadicky), později se ukáže, že ovládací kódy by neměly odpovídat znakům, které bude mikrokontrolér předávat v potvrzení. V programu vypneme automatické opakování povelu při delším stisku, vedlo by to k mnoha zpětným hlášením. V tomto případě se již budeme muset zabývat přizpůsobením úrovní signálů.

IMGP0279b

Zpětná hlášení v Robot Bluetooth Control

Stejně jako v předchozím pokusu stačí PICAXE 08M2. Využijeme toho, že PICAXE se velmi snadno programově přizpůsobí standardní i invertované polaritě pulzů sériové komunikace (součást příkazů serin / serout) a to dokonce odděleně pro vstupní a výstupní signál.

druhy pokus A

Schema ovládání tří LED se zpětným hlášením

IMGP0302b

Zapojení pro tři LED na kontaktním poli

REM Ovladáná 3 LED přes BT modul HC-06 s potvrzením - PICAXE
setfreq m32                       ;nastavení taktu 32 MHz
do                                ;začátek smyčky programu
  b0=0                            ;nulování paměti pro povely
  serin [2000],c.3,T9600_32,b0    ;čtení z bluetooth (čeká na znak 2s)
  select b0                       ;rozdělení podle přijatého znaku
    case 201 high c.0 serout c.4,N9600_32,("LED-1 zapnuta",13,10)
    case 202 low c.0 serout c.4,N9600_32,("LED-1 vypnuta",13,10)
    case 203 high c.1 serout c.4,N9600_32,("LED-2 zapnuta",13,10)
    case 204 low c.1 serout c.4,N9600_32,("LED-2 vypnuta",13,10)
    case 205 high c.2 serout c.4,N9600_32,("LED-3 zapnuta",13,10)
    case 206 low c.2 serout c.4,N9600_32,("LED-3 vypnuta",13,10)
    endselect                     ;konec rozdělení povelů
loop                              ;konec smyčky

Vozítko na BT dálkové ovládání

Poslední ukázkou využití BT modulu je malé vozítko (podvozek robota) navržené tak, aby demonstrovalo použití co nejméně součástek i co nejjednodušší program při co nejvyšším počtu ovládaných funkcí. Zpětné potvrzování požadovat nebudeme, kvůli zjednodušení neumí vozítko couvat ani se otáčet na místě, pohony jsou jen spínány. Vše je napájeno z jednoho starého vyřazeného článku Li-pol (původní kapacita 5 Ah) umístěného ze spodní strany, funkci vypínače zastane napájecí konektor na kontaktním poli. Na jedno nabití vydrží vozítko nepřetržitě jezdit asi 20 hodin. Z akumulátoru jsou napětím 4,2 až 3,4 V přímo napájeny pohony, mikrokontrolér i BT modul, jedinou podmínkou je, aby v blízkosti spínačů pohonu byl kvalitní Low ESR kondenzátor a druhý blokovací keramický kondenzátor.

IMGP9602b

Kompletní vozítko s PICAXE 08M2 ovládané přes BT

Ovládání programem Robot Bluetooth Control obsadí směrové kurzory, navíc na tlačítkách F7 a F9 je pomalé otáčení. Pohon jede až do přijetí dalšího povelu, zastaví na tlačítko vzad nebo na červené tlačítko stop. Pomalé otáčení využívá automatického opakování, při puštění těchto tlačítek vozítko znehybní. Tlačítka F1 a F3 vypínají a zapínají světlo (LED vpředu), tlačítko F2 krátce zahouká. Součástí zapojení nejsou rezistory a konektor pro programování PICAXE, mikrokontrolér se programuje mimo zapojení.

vozitko

Schema zapojení vozítka

REM Ovládání vozítka přes BT HC-06
setfreq m32                                         ;takt 32 MHz
do                                                  ;smyčka programu
  b0=0                                              ;nulování paměti na čtení
  serin [2000],c.3,T9600_32,b0                      ;čtení z bluetooth (čeká na znak)
  select b0                                         ;rozdělení podle přijatého znaku
    case 201 high c.4                               ;zapnout LED
    case 202 low c.4                                ;vypnout LED
    case 203 sound 0,(1,255)                        ;houkačka
    case 204 high c.1 high c.2                      ;vpřed
    case 205 low c.1 low c.2                        ;stop
    case 206 high c.1 low c.2                       ;točit vpravo
    case 207 low c.1 high c.2                       ;točit vlevo
    case 208 high c.1 low c.2 pause 150 low c.1     ;pootočit vpravo
    case 209 low c.1 high c.2 pause 150 low c.2     ;pootočit vlevo
    endselect                                       ;konec rozdělení povelu
loop                                                ;konec smyčky

Snažil jsem se ukázat, že ovládání pomocí Bluetooth není nijak složité ani drahé. Uvažovaný modul HC-06 lze koupit (při dovozu z Číny) už za cenu kolem 120 Kč včetně poštovného a vysílač většina z nás již beztak nosí v kapse. Dostatečná přenosová rychlost až 115 kBd dovoluje například i konstrukci bezdrátově připojených textových a jednoduchých grafických terminálů nebo přenos zvuku, ovládání je v podstatě velmi nenáročná činnost. Jediným skutečným omezením, které musíme brát v úvahu, je relativně malý dosah přibližně 10 m, v místnostech s mnoha kovovými předměty nebo vlhkem a vodou někdy i jen 5 m.