Pro jeden projekt jsem potřeboval měřit hladinu vody a rozhodl jsem se že měření zrealizuji pomocí ultrazvuku. Objednal jsem si ultrazvukový modul jehož cena je okolo 200 Kč. Jakmile mi modul dorazil začal jsem s jeho zapojením, ale po složení a nahrání kódů do Arduina modul nefungoval. Po chvíli laborování jsem usoudil, že mi přišel vadný modul a tak jsem objednal ještě jeden. Jakmile dorazil druhy zjistil jsem, že ani ten není funkční a tak jsem hledal, co dělám špatně.
Narazil jsem na zajímavý problém a to je napájecí napětí, které do Arduina pošlete. Modul Arduino je totiž možné napájet jen pomocí USB zařízení které má 5 voltů a pomocí tohoto rozhraní se Arduino zároveň i programuje. I když na stránkách arduino.cc se uvádí, jako doporučené napětí 9 voltu zůstával jsem u připojení pouze s USB kabelu, abych nemusel řešit další zdroj. Tento postup se ale ukázal jako špatný, protože byl právě příčinou, proč ultrazvukový modul nefungoval.
Ano je to divné ale skutečně pokud modul Arduina není napájen pomocí většího napětí některé další moduly nemusejí fungovat tak jak mají. Právě to byl důvod proč mi ultrazvukový modul nefungoval i když byly oba moduly naprosto v pořádku. Je tedy nutné při připojení dalších modulu zajistit napájení arduina alespoň 7 V.
Pokud tedy zajistíte větší napájení pak již stačí použít na internetu dostupnou funkci NewPing, která ve spojení s tímto modulem vrací vzdálenost přímo v CM.
Zdrojový kód
// include the library code:
#include <NewPing.h> // knihovna ultrazvuku
#define TRIGGER_PIN 2 // Arduino pin tied to trigger pin on ping sensor.
#define ECHO_PIN 3 // Arduino pin tied to echo pin on ping sensor.
#define MAX_DISTANCE 500 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
unsigned int pingSpeed = 50; // How frequently are we going to send out a ping (in milliseconds). 50ms would be 20 times a second.
unsigned long pingTimer = 75; // Holds the next ping time, start at 75ms to give time for the Arduino pins to stabilize.
// initialize the library with the numbers of the interface pins
void setup() {
// set up the LCD's number of columns and rows:
Serial.begin(9600);
}
void loop() {
if (millis() >= pingTimer) { // pingSpeed milliseconds since last ping, do another ping.
pingTimer += pingSpeed; // Set the next ping time.
// Serial.print("Ping: ");
int cm = sonar.ping_cm(); // Send out the ping, get the results in centimeters.
Serial.print(cm);
Serial.println(" cm");
}
}
Program jednoduše zjistí pomocí čidla připojeného k digitálním vstupům / výstupům 2 a 3 vzdálenost od nejbližší překážky a vrátí hodnotu v centimetrech na sériový port.
Zajímavé odkazy
Vložit komentář
* - vyžadované údaje. RSS kanál s komentáři