Arduino UNO výukový modul křižovatka

Pro výuku žáků zš a sš jsem vytvořil panel křižovatka, na kterém si lze odladit program napsaný v Arduino IDE. Na panelu se dá sestavit (programově) reálná křižovatka (auta a chodci s tlačítkem).

DONATE

  • 3D semafory, zdrojové programy pro Arduino, obrázek - maska pro zalaminování a nalepení (OpenScad, STL, Gcode, Arduino zdroj, Proficad)

Schéma zapojení

Schéma je vytvořené velice jednoduše - z daných pinů (uvedeny na obrázku křižovatky) Arduino desky jsou vedeny vodiče přímo do semaforu, kde je umístěn rezistor 220 Ohm a LED dioda (každá LED má svůj rezistor). Společný vývod (katody) je zapojen na pin GND. Tlačítka jsou připojeny jedním vývodem na GND a druhým vývodem přímo na piny Arduino desky (využívají se vnitřní PULL UP rezistory přímo v procesoru).

3D semafory

Semafory jsou vytvořeny v programu OpenScad a jsou vytištěné z PETG materiálu na 3D tiskárně Průša MKII. Do každého semaforu je vložena LED dioda průměr 5mm (rudá, žlutá, zelená).

sem1

sem2

DSC 1509

DSC 1510

DSC 1511

DSC 1512

DSC 1514

DSC 1515

Všechny 3D díly jsou slepeny vteřinovým lepidlem...

Panel křižovatky

DSC 1566

DSC 1567

DSC 1568

DSC 1569

DSC 1570

DSC 1572

DSC 1574

Video - křižovatka v provozu

V příloze (donate přístup) jsou zdrojové programy pro Arduino IDE

  • Semafor 1

přiřazení vstupů a výstupů

// semafor auta 1
#define SA1_ruda 12
#define SA1_zlut 8
#define SA1_zele 4
// semafor auta 2
#define SA2_ruda 13
#define SA2_zlut 9
#define SA2_zele 5
// semafor chodci 1
#define SCH1_ruda 11
#define SCH1_zele 3
// semafor chodci 2
#define SCH2_ruda 10
#define SCH2_zele 2
// tlacitko chodci 1
#define TLCH1 0
// tlacitko chodci 2
#define TLCH2 1

  • Semafor 2

nastavení vstupů a výstupů

pinMode(SA1_ruda,OUTPUT);
pinMode(SA1_zlut,OUTPUT);
pinMode(SA1_zele,OUTPUT);
pinMode(SA2_ruda,OUTPUT);
pinMode(SA2_zlut,OUTPUT);
pinMode(SA2_zele,OUTPUT);
pinMode(SCH1_ruda,OUTPUT);
pinMode(SCH1_zele,OUTPUT);
pinMode(SCH2_ruda,OUTPUT);
pinMode(SCH2_zele,OUTPUT);
pinMode(TLCH1,INPUT_PULLUP);
pinMode(TLCH2,INPUT_PULLUP);

  • Semafor 3

zastaveni provozu a zklidnění provozu po zapnutí napájení

// zastavit veskery provoz
digitalWrite(SA1_ruda,HIGH);
digitalWrite(SA2_ruda,HIGH);
digitalWrite(SCH1_ruda,HIGH);
digitalWrite(SCH2_ruda,HIGH);
// ostatni svetla opravdu vypnout
digitalWrite(SA1_zlut,LOW);digitalWrite(SA2_zlut,LOW);
digitalWrite(SA1_zele,LOW);digitalWrite(SA2_zele,LOW);digitalWrite(SCH1_zele,LOW);digitalWrite(SCH2_zele,LOW);

  • Semafor 4

fáze světel všech semaforů (funkce switch)

  • Semafor 5

test přepínání světel křižovatky (ovládání funkce switch)

  • Semafor 6

přepínání světel dle zadaných časů (časovač a funkce millis)

  • Semafor 7

finální verze křižovatky, tlačítka pro chodce (pokud svítí autům zelená a chodec stiskne tlačítko dojde k přechodu cyklu volno pro chodce)

Ve zdrojovém kódu si lze snadno editovat časy křižovatky pro vlastní potřebu

// nastaveni intervalu semaforu
// auta ruda v sec
#define auta_ruda 20
// auta ruda+zluta v sec
#define auta_ruda_zluta 2
// auta zluta v sec
#define auta_zluta 3
// auta zelena v sec
#define auta_zelena 20
// chodci zelena v sec
#define chodci_zelena 5
// bezpecnostni prodleva auta/chodci
#define bezp_prodleva 2

Nikde v kódu není použita funkce delay()! vše je řešeno čistě pomocí časovačů.