10

Začínáme s Arduinem – Semafor

Postavení semaforu s Arduinem je skvělé především pro začátečníky, jelikož zapojení i programování je lehké.

Potřebujeme:

Pokud součástky nemáte, koupíte je všechny dohromady zde.

Zapojení

Zdrojový kód

Začneme tím, že definujeme proměnné, pojmenujeme si je podle barev, abychom se následně v kódu dobře orientovali.

[sourcecode language=“plain“]int cervena = 13; int zluta= 12; int zelena = 11;[/sourcecode]

Dále přidáme funkce setup, nastavíme naše diody jako výstupní.

[sourcecode language=“plain“]
void setup ()
{
pinMode (cervena, OUTPUT);
pinMode (zluta, OUTPUT);
pinMode (zelena, OUTPUT);
}[/sourcecode]

To bylo snadné. Nyní k tomu nejtěžšímu – musíme naprogramovat logiku semaforu.

[sourcecode language=“plain“]
void loop()
{
zmenitSvetla();
delay(15000);
}
void zmenitSvetla()
{

digitalWrite(zelena,HIGH); // zapneme zelené světlo
delay(3000); // zelenou necháme 3 sekundy svítit
digitalWrite(zelena,LOW); //vypneme zelenou

digitalWrite(zluta,HIGH); //rozsvítíme žlutou
delay(2000); // žlutou necháme 2 sekundy svítit
digitalWrite(zluta,LOW); //vypneme žluté světlo

digitalWrite(cervena,HIGH); //červené světlo zapneme na 5 sekund
delay(5000); // počkáme těch 5 sekund
digitalWrite(cervena,LOW); //vypneme červenou

digitalWrite(zluta,HIGH); //zapneme žluté
delay(2000); // žlutou necháme 2 sekundy svítit
digitalWrite(zluta,LOW); //vypneme žluté světlo
}
[/sourcecode]

Nyní zkuste program nahrát do svého Arduina a pozorujte zapojené LED diody. Měly by se chovat jako semafor.

Verze s tlačítkem na přepínání

[sourcecode language=“plain“]
int tlacitko = 2; // tlačítko nastavíme na pin dva
int tlacitkoHodnota = 0; // výchozí bude hodnota 0 (nestisknuto)

[/sourcecode]

Do setup přípíšeme

[sourcecode language=“plain“]
pinMode(tlacitko,INPUT);
digitalWrite(zelena,HIGH);

[/sourcecode]

loop přepíšeme

[sourcecode language=“plain“]
tlacitkoHodnota = digitalRead(tlacitko); //stav tlačítka se nám uloží do pomocné proměnné tlacitkoHodnota

if (tlacitkoHodnota == HIGH) // když je tlačítko stisknuté, změní se světla
{
zmenitSvetla();
delay(15000); // počkáme 15 sekund
}
[/sourcecode]

Arduino Uno, Mega, Senzory, Moduly za

VÝHODNOU CENU

Adam Gajdečka

Vytvářím návody pro Arduino, skvěle se orientuji v IT a označuji se za geeka. Miluji nové technologie, protože jsou úžasné. Budu rád, když můj malý magazín o Arduinu podpoříte! Děkuji moc, jste skvělí

  1. Mám problém s nahráním programu do arduina i když ho zkopíruji tak mi to hlásí chybu. Můžete mi poradit jak na to?

    • Na webu je nějaký problém. V článku se zobrazují značky, které tu nemají být.

      Zkus z program odstranit [sourcecode language=“plain“] a [/sourcecode]

  2. Parádní web, kdyby ses tomu chtěl věnovat víc do hloubky existují online kurzy zdarma na edx.org, super je třeba electronic interfaces, ten jsem dělal – naučíš se tam postavit takovýhohle robota: https://youtu.be/2ruKKMmqk-A jsou tam i další… Jinak good job a hodne stesti 😉 Jo jediná drobná nevýhoda je, že to je anglicky.

  3. nevim kde dělám chybu, ale při zkopírování mi to svítí jak na diskotéce a ne jak semafor 😀 červená se zelenou, všechny najednou, zelená se žlutou…

    • Myslím že na uvedeném obrázku jsou led diody namalovány obráceně 😉
      Zkus jednoduchý prográmek bez tlačítka na kterém mimo jiné poznáš i to, zda jsou ledky obráceně nebo ne. Když ti bude fungovat, tak uvidíš, zda delší dobu ledky svítí a nebo jsou zhasnuté. Správně by měly 3s svítiti a jenom na 1s zhasnout. Pokud to máš naopak, otoč polaritu ledek (a nebo si uprav program což je typické řešení lenochů):

      /* Blikání 3 ledek naráz */

      const int cervena = 13; //const = konstanta, to znamená proměnná pouze pro čtení (nelze ji měnit)
      const int zluta = 12;
      const int zelena = 11;

      void setup ()
      {
      //uvedené piny nastavíme jako výstupní
      pinMode (cervena, OUTPUT);
      pinMode (zluta, OUTPUT);
      pinMode (zelena, OUTPUT);
      }

      void loop()
      {
      digitalWrite(zelena,HIGH); //rozsvítit zelenou led
      digitalWrite(zluta,HIGH); //rozsvítit žlutou
      digitalWrite(cervena,HIGH); //rozsvítit červenou

      delay(3000); // 3 vteřiny počkat (3s = 3000ms)

      digitalWrite(zelena,LOW); //vypneme zelenou
      digitalWrite(zluta,LOW); //vypneme žluté světlo
      digitalWrite(cervena,LOW); //vypneme červenou

      delay(1000); // počkat jenom 1 vteřinu

      }

  4. Jenom postřeh z reality – běžný semafor v ČR funguje tak, že po červené se rozsvítí oranžová, ale stále ještě svítí červená. To je pro to, aby se poznalo, zda po oranžové bude následovat zelená (pokud svítí oranžová + červená) a nebo červená (pokud svítí oranžová samostatně) 😉

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *