blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
3
SLEDUJETE BLOG
PHP, Arduino programátor
deadawp



Bicyklovanie po Google mapách - Arduino 32u4
pridal deadawp 23.6. 2019 o 0:23



Viac o projekte: https://arduino.php5.sk/google-maps-bicyklovanie.php

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):

  • GeoGuessr
  • Earth Picker

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á):



Prístupov 383
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDUJETE
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Bicyklovanie po Google mapách - Arduino ...
[ 23.6.2019] (príspevkov 0)
Nerov (v)zostup v Caldárii
[ 3.6.2019] (príspevkov 0)
Prepočet atmosférického tlaku na hladinu...
[ 17.5.2019] (príspevkov 0)
Včelárska váha - Arduino + HX711
[ 6.5.2019] (príspevkov 0)
Hladinomer - Arduino, ESP32, ESP8266 + u...
[ 29.4.2019] (príspevkov 0)
Meteostanica - ESP32 - Webclient
[ 19.4.2019] (príspevkov 0)
Webportál - Vykurovanie cez internet - o...
[ 24.3.2019] (príspevkov 0)
Capture points (DOMINATION) - Arduino + ...
[ 23.2.2019] (príspevkov 0)
Notifikátor udalostí cez mikrokontróler
[ 22.2.2019] (príspevkov 0)
Ovládanie relé cez Arduino s webaplikáci...
[ 10.2.2019] (príspevkov 0)