Auf facebook haben wir ein cooles Projekt gepostet:
https://www.facebook.com/AZDelivery.de/videos/421956858229574/
Wie ihr die Elektronik, bzw. den Sensor nachbauen könnt zeigen wir euch hier.
Was brauchen wir alles:
Mikrokontroller, kompatibel mit Arduino UNO R3
Ultraschall Sensor HC-SR04
Steckbrücken
Servo-Motor
Ultraschallsensor am Arduino
Software für den Arduino
long entfernung1 = 0; long entfernung2 = 0; long zeit=0; int anzahl = 15; int werte[16]; void setup() { #define trigger 3 // Arduino Pin 3 an HC-SR04 Trig #define echo 2 // Arduino Pin 2 an HC-SR04 Echo Serial.begin(115200); // Serial Baudrate pinMode(LED_BUILTIN, OUTPUT); } void loop() { for (int i=0; i <= anzahl-1; i++){ zeit=0; noInterrupts(); // Deaktivieren von Interrupts digitalWrite(trigger, LOW); delayMicroseconds(3); digitalWrite(trigger, HIGH); // Trigger Impuls 10 us delayMicroseconds(20); digitalWrite(trigger, LOW); zeit = pulseIn(echo, HIGH); // Echo-Zeit messen interrupts(); // Aktivieren von Interrupts werte[i] = zeit; //delay (1); } entfernung1 = 0; for (int i=0; i <= anzahl -1; i++){ entfernung1 = entfernung1 + werte[i]; } entfernung2 = entfernung1 / anzahl; Serial.println(entfernung2); if (entfernung2 > 9550){ digitalWrite(LED_BUILTIN, HIGH); Serial.println("open"); delay(3000); digitalWrite(LED_BUILTIN, LOW); delay(1000); } }
Jetzt erkennt unser Arduino mit dem Ultraschallsensor zumindest schon einmal wenn wir uns nähern und zeigt dies mit der eingebauten LED an.
Im nächsten Schritt steuern wir einen Servomotor an, der den Papierkorb öffnen soll.
Nun erweitern wir unsere Verdrahtung noch um einen Servomotor.
und passen die Software an:
#include <Servo.h> Servo servo1; long entfernung1 = 0; long entfernung2 = 0; long zeit=0; int anzahl = 15; int werte[16]; int zu = 5; int auf = 95; void setup() { #define trigger 3 // Arduino Pin 3 an HC-SR04 Trig #define echo 2 // Arduino Pin 2 an HC-SR04 Echo Serial.begin(115200); // Serial Baudrate pinMode(LED_BUILTIN, OUTPUT); servo1.attach(8); servo1.write(zu); } void loop() { for (int i=0; i <= anzahl-1; i++){ zeit=0; noInterrupts(); // Deaktivieren von Interrupts digitalWrite(trigger, LOW); delayMicroseconds(3); digitalWrite(trigger, HIGH); // Trigger Impuls 10 us delayMicroseconds(20); digitalWrite(trigger, LOW); zeit = pulseIn(echo, HIGH); // Echo-Zeit messen interrupts(); // Aktivieren von Interrupts werte[i] = zeit; //delay (1); } entfernung1 = 0; for (int i=0; i <= anzahl -1; i++){ entfernung1 = entfernung1 + werte[i]; } entfernung2 = entfernung1 / anzahl; Serial.println(entfernung2); if (entfernung2 > 9550){ digitalWrite(LED_BUILTIN, HIGH); Serial.println("open"); servo1.write(auf); delay(3000); digitalWrite(LED_BUILTIN, LOW); servo1.write(zu); delay(1000); } }
Ihr könnt nun den Sensor und Servo-Motor für diverse Ansteuerungen verwenden.
Wie in dem Facebookvideo zu sehen ist, könnte damit eine Iris geöffnet werden.
Wir wünschen euch viel Spass mit dem Näherungssensor und sind gespannt auf eure Einsatzzwecke.
3 Kommentare
Hartmut Zipper
Habe ich in mein Rasenroborter am Schleifenempfänger eingebaut. Jetzt stop er vor Hindernissen bei 10 cm. Bei mir Aldi Easy Mover ist es Pin 6 am Schleifenempfänger. Bei High Stop zurück (Pip,Pip,Pip) zurück drehen und weiter mähen.
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(LED, HIGH); // zum Schalten mit Vorwiderstand 100 Ohm oder Testen
Serial.println(“open”);
delay(300);
Serial.println(“LED”);
digitalWrite(LED, LOW);
digitalWrite(LED_BUILTIN, LOW);
delay(5000);
Rudolf Reiber
Guten Tag,
bei mir tat der erste Sketch erst zuverlässig nach dem Einfügen von:
pinMode(echo, INPUT);
pinMode(trigger, OUTPUT);
in der SetUp-Routine.
T.Geffe
Hallo,
ein schoenes Projekt aber wo bekommt man den so einen Papierkorb zu kaufen?
Gruss Toralf