Von der Natur lernen kann man auch in der Elektronik, heute verwenden wir die Fähigkeiten der Fledermaus um mit Hilfe des HC-SR04 Entfernungssensors per Ultraschall Hindernisse zu erkennen oder einfach nur um die Entfernung eines Objektes zu messen.
Wir verbinden den HC-SR04 mit dem Arduino wie folgt:
Schaltplan (Arduino-Verdrahtung des HC-SR04 Entfernungssensors):
Schaltplangröße:
Für weitere Informationen (z.B. Pinbelegungen von Bauteilen oder genaue Kabelverbindungen)
mit der Maus über Elemente fahren (oder im Touch-Modus: Elemente antippen)...
mit der Maus über Elemente fahren (oder im Touch-Modus: Elemente antippen)...
Arduino | HC-SR04 |
D2 | Pin Echo |
D3 | Pin Trig |
5V (VCC) | Pin VCC |
GND | Pin GND |
… und schliessen danach noch das Display an. Für die Verdrahtung des Displays bitte diesen Link klicken, hier gibt es auch noch weitere Informationen zum Display und die benötigten Bibliotheken.
Anschließend laden wir noch das folgende Programm auf den Arduino…
Programmcode:
// HC-SR04 und 1.8 Zoll TFT-Farb-Display (HY-1.8 SPI) #define cs 10 // Arduino-Pin an Display CS #define dc 9 // Arduino-Pin an Display A0 #define rst 8 // Arduino Reset-Pin #define trigger 3 // Arduino Pin an HC-SR04 Trig #define echo 2 // Arduino Pin an HC-SR04 Echo #include <Adafruit_GFX.h> // Adafruit Grafik-Bibliothek #include <Adafruit_ST7735.h> // Adafruit ST7735-Bibliothek #include <SPI.h> Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst); // Display-Bibliothek Setup void setup(void) { pinMode(trigger, OUTPUT); pinMode(echo, INPUT); tft.initR(INITR_BLACKTAB); // ST7735-Chip initialisieren tft.fillScreen(ST7735_BLACK); // Display schwarz tft.setTextWrap(true); tft.setTextSize(2); tft.setTextColor(ST7735_BLUE); tft.setCursor(5,4); tft.print("Entfernung"); tft.setTextSize(1); tft.setTextColor(ST7735_GREEN); tft.setCursor(14,147); tft.print("blog.simtronyx.de"); tft.setTextSize(3); } long duration=0; long distance=0; long distance_old=0; void loop() { digitalWrite(trigger, LOW); delayMicroseconds(2); digitalWrite(trigger, HIGH); delayMicroseconds(10); digitalWrite(trigger, LOW); duration = pulseIn(echo, HIGH); // Echo-Zeit messen // Echo-Zeit halbieren (weil hin und zurück, der doppelte Weg ist) duration = (duration/2); // Zeit des Schalls durch Luft in Zentimeter umrechnen distance = duration / 29.1; // Anzeige nur ändern wenn neue Entfernung if(distance!=distance_old){ // Alten Werten mit schwarz überschreiben, also vom Display löschen show_distance(distance_old,ST7735_BLACK); // Neuen Wert anzeigen show_distance(distance,ST7735_WHITE); } distance_old=distance; // letze Entfernung speichern (Displayausgabe) delay(1000); } void show_distance(long distance,int color){ int x; if(distance<10)x=41; else if((distance<100)||(distance>=1000))x=28; else x=19; tft.setCursor(x,60); tft.setTextColor(color); if(distance<1000){ tft.print(distance); tft.print("cm"); } else tft.print("----"); }
… und schon:
können wir mit unserem Arduino Hindernisse auch in der Nacht erkennen.
Bauteile (Bezugsquellen):
eBay: | 1.8 Zoll TFT SPI Display Arduino Nano Breadboard Breadboard Kabel Breadboard Power Modul HC-SR04 |
Amazon: | 1.8 Zoll TFT SPI Display Arduino Nano Breadboard Breadboard Kabel Breadboard Power Modul HC-SR04 |
Gut?