Viac o projekte: https://martinius96.github.io/Google-maps-cycling-Arduino/
Bicyklovanie je veľmi obľúbený šport, aj vďaka úspešnému športovcovi Petrovi Saganovi. Vášniví cyklisti brázdia naše cesty a chodníky. Nakoľko ale počasie vždy nepraje, nejeden fanúšik bicykla by uvítal bicyklovať z pohodlia domova. Preto dnes prinášam spôsob, ako to docieliť povedzme rozšírenou realitou v podobe Google máp. Na úvod si prejdeme potrebné hardvérové prostriedky pre projekt a v ďalšom kroku si rozoberieme ich funkčnosť.
Hardvérové komponenty:
- Arduino (32u4 CPU) Leonardo
- Magnetický kontakt
- 2x tlačidlá, spínacie, pushbuttony
- 2x 10kohm rezistory
Pre použitie systému používateľ musí zapnúť Google mapy, zvoliť si akúkoľvek lokalitu na svete a prepnúť sa do Street View módu. To zaručí pripravené rozhranie pre interakciu s bicyklom (Arduinom). Čo sa týka bicykla, je možné použiť akýkoľvek typ. Klasický, cestný, horský, rotopéd. Na pedál a konštrukciu je nutné napasovať magnetický kontakt.
Hlavným prvkom systému je použitie vývojovej dosky Arduino Leonardo, ktorá obsahuje mikroprocesor ATmega32u4. Tento typ procesora dokáže okrem ovládania GPIO pinov (ako klasické Uno) ovládať aj klávesnicu a myš, je HID zariadením (Human Interface device). Vďaka tomu máme úplne iné možnosti využitia nielen pre našu myšlienku. Magnetický kontakt slúži na záznam otočenia pedálov o celú otáčku. Programovo je implementovaný jednoduchý counter (počítadlo), ktoré sa inkrementuje pri každom otočení pedálov o 360°. Možno použiť aj optozávoru.
Pri pretečení počítadla sa vykoná podmienka a do počítača sa odošle znak šípka hore, čo používateľa posunie o krok vpred na Google mape. Tlačidlá slúžia na otáčanie pohľadu do strán, sú aktívne pokým ich používateľ drží. Programová implementácia využíva pullup a pulldown zapojenie tlačidiel. Pri pullup nie sú nutné rezistory, sú zapnuté interné pullup rezistory Arduina. Funkčnosť oboch variant je totožná.
Bicyklovanie je možné obohatiť aj o využitie VR headsetu pri Google mape. Okrem Google Maps využíva Street View aj niekoľko ďalších zaujímavých webaplikácii, ktoré je možné vyskúšať, sú to predovšetkým zaujímavé hádacie stránky (možno zapojiť celú rodinu):
Objavujte Google mapy, hľadajte kuriozity na mapách sveta, navštívte lokality, kde ste vždy chceli ísť. Arduino s 32u4 procesorom je možné využiť aj na ďalšie zaujímavé projekty v štýle: Volant, pedále k hre s analógovou podporou s pomerne dobrým rozlíšením, ručná brzda, ovládacie panely k simulátorom a hrám. Rovnaký procesor obsahuje aj Arduino Pro Micro, ktoré sa hodí do projektov s menším počtom vstupno-výstupných pinov.
Programová implementácia pre pullup rezistory:
#include
const int tlacidloVpred = 2;
int tlacidloStav;
int poslednetlacidloStav = HIGH;
unsigned long poslednezakmitCas = 0;
unsigned long zakmitDelay = 50;
int pocitadlo = 0;
const int tlacidloVlavo = 3;
const int tlacidloVpravo = 4;
void setup() {
Keyboard.begin();
Serial.begin(115200);
pinMode(tlacidloVpred, INPUT_PULLUP);
pinMode(tlacidloVlavo, INPUT_PULLUP);
pinMode(tlacidloVpravo, INPUT_PULLUP);
}
void loop() {
int citanie = digitalRead(tlacidloVpred);
while(!digitalRead(tlacidloVlavo)){
Keyboard.press('a');
delay(300);
Keyboard.releaseAll();
}
while(!digitalRead(tlacidloVpravo)){
Keyboard.press('d');
delay(300);
Keyboard.releaseAll();
}
if (citanie != poslednetlacidloStav) {
poslednezakmitCas = millis();
}
if ((millis() - poslednezakmitCas) > zakmitDelay) {
if (citanie != tlacidloStav) {
tlacidloStav = citanie;
if (tlacidloStav == LOW) {
pocitadlo++;
}
}
}
poslednetlacidloStav = citanie;
Serial.println("Hodnota counteru:");
Serial.println(pocitadlo);
if(pocitadlo>=5){
Keyboard.write(218);
pocitadlo = 0;
Serial.println("Pohyb vpred");
}
}
Programová implementácia pre pulldown zapojenie:
#include
const int tlacidloVpred = 2;
int tlacidloStav;
int poslednetlacidloStav = LOW;
unsigned long poslednezakmitCas = 0;
unsigned long zakmitDelay = 50;
int pocitadlo = 0;
const int tlacidloVlavo = 3;
const int tlacidloVpravo = 4;
void setup() {
Keyboard.begin();
Serial.begin(115200);
pinMode(tlacidloVpred, INPUT);
pinMode(tlacidloVlavo, INPUT);
pinMode(tlacidloVpravo, INPUT);
}
void loop() {
int citanie = digitalRead(tlacidloVpred);
while(digitalRead(tlacidloVlavo)){
Keyboard.press('a');
delay(300);
Keyboard.releaseAll();
}
while(digitalRead(tlacidloVpravo)){
Keyboard.press('d');
delay(300);
Keyboard.releaseAll();
}
if (citanie != poslednetlacidloStav) {
poslednezakmitCas = millis();
}
if ((millis() - poslednezakmitCas) > zakmitDelay) {
if (citanie != tlacidloStav) {
tlacidloStav = citanie;
if (tlacidloStav == HIGH) {
pocitadlo++;
}
}
}
poslednetlacidloStav = citanie;
Serial.println("Hodnota counteru:");
Serial.println(pocitadlo);
if(pocitadlo>=5){
Keyboard.write(218);
pocitadlo = 0;
Serial.println("Pohyb vpred");
}
}
Schéma zapojenia pre pullup program (pre pulldown invertovaná pre tlačidlá):