Parkovací senzor so stavebnicou Sonic: Rozdiel medzi revíziami
Zo stránky SensorWiki
Vytvorená stránka „= Parkovací senzor s Arduino Nano - Konverzácia = == Úvod do projektu == '''Študent:''' Ahoj, dnes tu mám jednoduchý projekt s mikropočítačom Arduino Nano. Chceli by sme so študentmi strednej školy vytvoriť parkovací senzor. Na doske už máme zapojený ultrazvukový senzor HC-SR04 so signálom Trig1 na D6 a Echo1 na D7. Okrem toho je na doske bzučiak (pasívny, treba do neho poslať frekvenciu) na D16 (A2) a tri LED diody: zelena LED3 na D21 (A7),…“ |
dBez shrnutí editace |
||
| Riadok 1: | Riadok 1: | ||
== Úvod do projektu == | == Úvod do projektu == | ||
Toto je jednoduchý projekt s mikropočítačom Arduino Nano, ktorý má fungovať ako parkovací senzor. Na doske máme zapojený ultrazvukový senzor HC-SR04 so signálom Trig1 na D6 a Echo1 na D7. Okrem toho je na doske bzučiak (pasívny, treba do neho poslať frekvenciu) na D16 (A2) a tri LED diody: zelena LED3 na D21 (A7), žltá LED2 na D20 (A6) a červená LED1 na D19 (A5). Začať by sme mohli jednoduchou šablónou pre Arduino jazyk, v ktorom by boli zadefinované všetky pripojené obvody a v inicializačnej časti by boli správne nakonfigurované. Zatiaľ netreba žiaden aktívny kód. | |||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
| Riadok 56: | Riadok 53: | ||
} | } | ||
void loop() { | void loop() | ||
// Sem pride | { | ||
// Sem pride vas vlastny kod | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Riadok 67: | Riadok 64: | ||
* Správnu konfiguráciu vstupov/výstupov | * Správnu konfiguráciu vstupov/výstupov | ||
* Počiatočné vypnutie všetkých komponentov | * Počiatočné vypnutie všetkých komponentov | ||
== Test LED diód == | == Test LED diód == | ||
Teraz budeme postupne oživovať jednotlivé časti, aby sme si overili, či na dosku pripojili súčiastky správne. Najprv overíme, či sú LED zapojené správne a fungujú. | |||
Začneme s jednou LED diódou, napríklad so zelenou. | |||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
void loop() { | void loop() | ||
{ | |||
// Test zelenej LED | // Test zelenej LED | ||
digitalWrite(LED_GREEN, HIGH); // Zapni zelenú LED | digitalWrite(LED_GREEN, HIGH); // Zapni zelenú LED | ||
| Riadok 103: | Riadok 84: | ||
Tento kód spôsobí, že zelená LED bude blikať s frekvenciou 1 Hz (zapnutá 0,5 s, vypnutá 0,5 s). | Tento kód spôsobí, že zelená LED bude blikať s frekvenciou 1 Hz (zapnutá 0,5 s, vypnutá 0,5 s). | ||
Teraz pridáme žltú a červenú LED: | |||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
void loop() { | void loop() | ||
{ | |||
// Test všetkých troch LED - postupné rozsvietenie | // Test všetkých troch LED - postupné rozsvietenie | ||
digitalWrite(LED_GREEN, HIGH); // Zapni zelenú LED | digitalWrite(LED_GREEN, HIGH); // Zapni zelenú LED | ||
| Riadok 127: | Riadok 107: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Test bzučiaka == | == Test bzučiaka == | ||
Teraz otestujeme pasívny bzučiak. Pre pasívny bzučiak musíme generovať frekvenciu pomocou funkcie <code>tone()</code>. | |||
Tento program otestuje tri rozličné tóny. Z kódu by malo byť zrejmé, ako to funguje a ľahko si ho upravíte podľa svojich požiadaviek. | |||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
void loop() { | void loop() | ||
{ | |||
// Test bzučiaka - tri rôzne tóny | // Test bzučiaka - tri rôzne tóny | ||
| Riadok 163: | Riadok 137: | ||
* Potom nasleduje 1-sekundová pauza | * Potom nasleduje 1-sekundová pauza | ||
== Test ultrazvukového senzora == | == Test ultrazvukového senzora == | ||
Napokon otestujeme ten ultrazvukový senzor. Vytvoríme funkciu na meranie vzdialenosti a budeme výsledky vypisovať do sériového monitora. | |||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
void loop() { | void loop() | ||
{ | |||
// Test ultrazvukového senzora | // Test ultrazvukového senzora | ||
float vzdialenost = merajVzdialenost(); | float vzdialenost = merajVzdialenost(); | ||
| Riadok 183: | Riadok 155: | ||
delay(500); // Meranie každých 500 ms | delay(500); // Meranie každých 500 ms | ||
} | } | ||
// Funkcia na meranie vzdialenosti pomocou HC-SR04 | // Funkcia na meranie vzdialenosti pomocou HC-SR04 | ||
float merajVzdialenost() { | |||
float merajVzdialenost() | |||
{ | |||
// Vyčisti trigger pin | // Vyčisti trigger pin | ||
digitalWrite(TRIG_PIN, LOW); | digitalWrite(TRIG_PIN, LOW); | ||
| Riadok 213: | Riadok 188: | ||
* Výsledok sa vypíše do sériového monitora každých 0,5 sekundy | * Výsledok sa vypíše do sériového monitora každých 0,5 sekundy | ||
Otvorte sériový monitor (Tools → Serial Monitor alebo Ctrl+Shift+M) a nastavte baud rate na 9600. | |||
Vyskúšajte správnosť funkcie pre rozličné vzdialenosti a overte, či je meranie spoľahlivé. | |||
== Kompletný parkovací senzor == | == Kompletný parkovací senzor == | ||
No a na záver skúsme kompletný kód pre parkovací senzor, rozhodovacie úrovne pre LED diódy by mohli | |||
byť zadefinované v deklaračnej časti kódu aby sa dali potom ľahko pomeniť. Tu už nepredpokladáme trvalé | |||
pripojenie k USB, takže bez výpisov. Alebo ak chceme aj výpisy, tak ich zapnime/vypnime cez #define DEBUG 1 | |||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
| Riadok 378: | Riadok 354: | ||
Študenti môžu ľahko zmeniť prahové hodnoty v hornej časti kódu podľa potreby alebo experimentovať s rôznymi frekvenciami bzučiaka. | Študenti môžu ľahko zmeniť prahové hodnoty v hornej časti kódu podľa potreby alebo experimentovať s rôznymi frekvenciami bzučiaka. | ||
== Záver == | == Záver == | ||
Projekt bol úspešne vytvorený postupným testovaním jednotlivých komponentov a nakoniec integrovaný do funkčného parkovacieho senzora s konfigurovateľnými parametrami a voliteľným debug režimom. | Projekt bol úspešne vytvorený postupným testovaním jednotlivých komponentov a nakoniec integrovaný do funkčného parkovacieho senzora s konfigurovateľnými parametrami a voliteľným debug režimom. | ||
Tento text a ukážkové programy pomáhal vytvoriť Claude.AI | |||
[[Kategória:Arduino]] | [[Kategória:Arduino]] | ||
[[Kategória:Elektronika]] | [[Kategória:Elektronika]] | ||
[[Kategória:Vzdelávacie projekty]] | [[Kategória:Vzdelávacie projekty]] | ||
Aktuálna revízia z 18:23, 29. január 2026
Úvod do projektu
Toto je jednoduchý projekt s mikropočítačom Arduino Nano, ktorý má fungovať ako parkovací senzor. Na doske máme zapojený ultrazvukový senzor HC-SR04 so signálom Trig1 na D6 a Echo1 na D7. Okrem toho je na doske bzučiak (pasívny, treba do neho poslať frekvenciu) na D16 (A2) a tri LED diody: zelena LED3 na D21 (A7), žltá LED2 na D20 (A6) a červená LED1 na D19 (A5). Začať by sme mohli jednoduchou šablónou pre Arduino jazyk, v ktorom by boli zadefinované všetky pripojené obvody a v inicializačnej časti by boli správne nakonfigurované. Zatiaľ netreba žiaden aktívny kód.
/*
* Parkovací senzor pre Arduino Nano
* Komponenty:
* - Ultrazvukový senzor HC-SR04 (Trig1: D6, Echo1: D7)
* - Pasívny bzučiak (D16/A2)
* - Zelená LED (D21/A7)
* - Žltá LED (D20/A6)
* - Červená LED (D19/A5)
*/
// Definície pinov pre ultrazvukový senzor HC-SR04
#define TRIG_PIN 6 // D6 - Trigger pin
#define ECHO_PIN 7 // D7 - Echo pin
// Definície pinov pre bzučiak
#define BUZZER_PIN 16 // D16 (A2) - Pasívny bzučiak
// Definície pinov pre LED diody
#define LED_RED 19 // D19 (A5) - Červená LED
#define LED_YELLOW 20 // D20 (A6) - Žltá LED
#define LED_GREEN 21 // D21 (A7) - Zelená LED
void setup() {
// Inicializácia sériového portu pre ladenie
Serial.begin(9600);
// Konfigurácia pinov ultrazvukového senzora
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Konfigurácia pinu bzučiaka
pinMode(BUZZER_PIN, OUTPUT);
// Konfigurácia pinov LED diód
pinMode(LED_RED, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
// Úvodné vypnutie všetkých výstupov
digitalWrite(TRIG_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, LOW);
Serial.println("Parkovaci senzor inicializovany");
}
void loop()
{
// Sem pride vas vlastny kod
}
Šablóna obsahuje:
- Prehľadné definície všetkých pinov s komentármi
- Inicializáciu sériového portu (užitočné pre testovanie)
- Správnu konfiguráciu vstupov/výstupov
- Počiatočné vypnutie všetkých komponentov
Test LED diód
Teraz budeme postupne oživovať jednotlivé časti, aby sme si overili, či na dosku pripojili súčiastky správne. Najprv overíme, či sú LED zapojené správne a fungujú.
Začneme s jednou LED diódou, napríklad so zelenou.
void loop()
{
// Test zelenej LED
digitalWrite(LED_GREEN, HIGH); // Zapni zelenú LED
delay(500); // Čakaj 500 ms
digitalWrite(LED_GREEN, LOW); // Vypni zelenú LED
delay(500); // Čakaj 500 ms
}
Tento kód spôsobí, že zelená LED bude blikať s frekvenciou 1 Hz (zapnutá 0,5 s, vypnutá 0,5 s).
Teraz pridáme žltú a červenú LED:
void loop()
{
// Test všetkých troch LED - postupné rozsvietenie
digitalWrite(LED_GREEN, HIGH); // Zapni zelenú LED
delay(500); // Čakaj 500 ms
digitalWrite(LED_YELLOW, HIGH); // Zapni žltú LED
delay(500); // Čakaj 500 ms
digitalWrite(LED_RED, HIGH); // Zapni červenú LED
delay(500); // Čakaj 500 ms
// Vypni všetky LED naraz
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_RED, LOW);
delay(500); // Čakaj pred ďalším cyklom
}
Test bzučiaka
Teraz otestujeme pasívny bzučiak. Pre pasívny bzučiak musíme generovať frekvenciu pomocou funkcie tone().
Tento program otestuje tri rozličné tóny. Z kódu by malo byť zrejmé, ako to funguje a ľahko si ho upravíte podľa svojich požiadaviek.
void loop()
{
// Test bzučiaka - tri rôzne tóny
tone(BUZZER_PIN, 1000); // Nízky tón 1000 Hz
delay(500);
tone(BUZZER_PIN, 2000); // Stredný tón 2000 Hz
delay(500);
tone(BUZZER_PIN, 3000); // Vysoký tón 3000 Hz
delay(500);
noTone(BUZZER_PIN); // Vypni bzučiak
delay(1000); // Pauza pred ďalším cyklom
}
Tento test:
- Prehráva tri rôzne frekvencie (1000 Hz, 2000 Hz, 3000 Hz)
- Každý tón trvá 0,5 sekundy
- Potom nasleduje 1-sekundová pauza
Test ultrazvukového senzora
Napokon otestujeme ten ultrazvukový senzor. Vytvoríme funkciu na meranie vzdialenosti a budeme výsledky vypisovať do sériového monitora.
void loop()
{
// Test ultrazvukového senzora
float vzdialenost = merajVzdialenost();
// Výpis do sériového monitora
Serial.print("Vzdialenost: ");
Serial.print(vzdialenost);
Serial.println(" cm");
delay(500); // Meranie každých 500 ms
}
// Funkcia na meranie vzdialenosti pomocou HC-SR04
float merajVzdialenost()
{
// Vyčisti trigger pin
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
// Pošli 10us impulz na trigger
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Zmeraj dĺžku echo impulzu
long trvanie = pulseIn(ECHO_PIN, HIGH);
// Vypočítaj vzdialenosť v cm
// Vzorec: vzdialenost = (trvanie * rychlost zvuku) / 2
// Rychlosť zvuku je 343 m/s = 0.0343 cm/μs
float vzdialenost = (trvanie * 0.0343) / 2;
return vzdialenost;
}
Čo kód robí:
- Funkcia
merajVzdialenost()aktivuje ultrazvukový senzor - Meri čas, za ktorý sa zvuková vlna vráti späť
- Prepočíta čas na vzdialenosť v centimetroch
- Výsledok sa vypíše do sériového monitora každých 0,5 sekundy
Otvorte sériový monitor (Tools → Serial Monitor alebo Ctrl+Shift+M) a nastavte baud rate na 9600. Vyskúšajte správnosť funkcie pre rozličné vzdialenosti a overte, či je meranie spoľahlivé.
Kompletný parkovací senzor
No a na záver skúsme kompletný kód pre parkovací senzor, rozhodovacie úrovne pre LED diódy by mohli byť zadefinované v deklaračnej časti kódu aby sa dali potom ľahko pomeniť. Tu už nepredpokladáme trvalé pripojenie k USB, takže bez výpisov. Alebo ak chceme aj výpisy, tak ich zapnime/vypnime cez #define DEBUG 1
/*
* Parkovací senzor pre Arduino Nano
* Komponenty:
* - Ultrazvukový senzor HC-SR04 (Trig1: D6, Echo1: D7)
* - Pasívny bzučiak (D16/A2)
* - Zelená LED (D21/A7)
* - Žltá LED (D20/A6)
* - Červená LED (D19/A5)
*/
// Debug režim - nastaviť na 1 pre výpisy do sériového monitora
#define DEBUG 0
// Definície pinov pre ultrazvukový senzor HC-SR04
#define TRIG_PIN 6 // D6 - Trigger pin
#define ECHO_PIN 7 // D7 - Echo pin
// Definície pinov pre bzučiak
#define BUZZER_PIN 16 // D16 (A2) - Pasívny bzučiak
// Definície pinov pre LED diody
#define LED_RED 19 // D19 (A5) - Červená LED
#define LED_YELLOW 20 // D20 (A6) - Žltá LED
#define LED_GREEN 21 // D21 (A7) - Zelená LED
// Prahové vzdialenosti v centimetroch
#define VZDIALENOST_ZELENA 100 // Zelená LED - bezpečná vzdialenosť
#define VZDIALENOST_ZLTA 50 // Žltá LED - blížime sa
#define VZDIALENOST_CERVENA 20 // Červená LED - nebezpečne blízko
// Frekvencia bzučiaka v Hz
#define FREKVENCIA_BZUCIAK 2000
void setup() {
#if DEBUG
// Inicializácia sériového portu pre ladenie
Serial.begin(9600);
#endif
// Konfigurácia pinov ultrazvukového senzora
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Konfigurácia pinu bzučiaka
pinMode(BUZZER_PIN, OUTPUT);
// Konfigurácia pinov LED diód
pinMode(LED_RED, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
// Úvodné vypnutie všetkých výstupov
digitalWrite(TRIG_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, LOW);
#if DEBUG
Serial.println("Parkovaci senzor inicializovany");
Serial.println("Prahove hodnoty:");
Serial.print("Zelena: > ");
Serial.print(VZDIALENOST_ZELENA);
Serial.println(" cm");
Serial.print("Zlta: ");
Serial.print(VZDIALENOST_ZLTA);
Serial.print(" - ");
Serial.print(VZDIALENOST_ZELENA);
Serial.println(" cm");
Serial.print("Cervena: < ");
Serial.print(VZDIALENOST_CERVENA);
Serial.println(" cm");
#endif
}
void loop() {
// Zmeraj vzdialenosť
float vzdialenost = merajVzdialenost();
#if DEBUG
Serial.print("Vzdialenost: ");
Serial.print(vzdialenost);
Serial.println(" cm");
#endif
// Vypni všetky LED a bzučiak
digitalWrite(LED_RED, LOW);
digitalWrite(LED_YELLOW, LOW);
digitalWrite(LED_GREEN, LOW);
noTone(BUZZER_PIN);
// Rozhodovacia logika podľa vzdialenosti
if (vzdialenost > VZDIALENOST_ZELENA) {
// Bezpečná vzdialenosť - zelená LED
digitalWrite(LED_GREEN, HIGH);
} else if (vzdialenost > VZDIALENOST_ZLTA) {
// Stredná vzdialenosť - žltá LED
digitalWrite(LED_YELLOW, HIGH);
} else if (vzdialenost > VZDIALENOST_CERVENA) {
// Blízko - červená LED + prerušované pípanie
digitalWrite(LED_RED, HIGH);
tone(BUZZER_PIN, FREKVENCIA_BZUCIAK);
delay(200);
noTone(BUZZER_PIN);
delay(200);
} else {
// Nebezpečne blízko - červená LED + neprerušované pípanie
digitalWrite(LED_RED, HIGH);
tone(BUZZER_PIN, FREKVENCIA_BZUCIAK);
}
delay(100); // Krátka pauza medzi meraniami
}
// Funkcia na meranie vzdialenosti pomocou HC-SR04
float merajVzdialenost() {
// Vyčisti trigger pin
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
// Pošli 10us impulz na trigger
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Zmeraj dĺžku echo impulzu
long trvanie = pulseIn(ECHO_PIN, HIGH);
// Vypočítaj vzdialenosť v cm
// Vzorec: vzdialenost = (trvanie * rychlost zvuku) / 2
// Rychlosť zvuku je 343 m/s = 0.0343 cm/μs
float vzdialenost = (trvanie * 0.0343) / 2;
return vzdialenost;
}
Ako kód funguje:
- Zelená LED (> 100 cm): Bezpečná vzdialenosť, všetko v poriadku
- Žltá LED (50-100 cm): Blížime sa, treba byť opatrný
- Červená LED + prerušované pípanie (20-50 cm): Blízko prekážky
- Červená LED + neprerušované pípanie (< 20 cm): Nebezpečne blízko!
Nastavenie debug režimu:
#define DEBUG 0- bez výpisov (pre samostatnú prevádzku)#define DEBUG 1- s výpismi do sériového monitora (pre testovanie)
Prispôsobenie:
Študenti môžu ľahko zmeniť prahové hodnoty v hornej časti kódu podľa potreby alebo experimentovať s rôznymi frekvenciami bzučiaka.
Záver
Projekt bol úspešne vytvorený postupným testovaním jednotlivých komponentov a nakoniec integrovaný do funkčného parkovacieho senzora s konfigurovateľnými parametrami a voliteľným debug režimom. Tento text a ukážkové programy pomáhal vytvoriť Claude.AI