- Erforderliche Materialien für den Bau eines Bodenreinigungsroboters auf Arduino-Basis
- Tragbarer Staubsauger
- Ultraschallsensormodul HC-SR04
- Bodensensor (IR-Sensor) zur Treppenerkennung
- Schaltplan eines Bodenreinigungsroboters auf Arduino-Basis
- Aufbau der Schaltung für einen Arduino-basierten Bodenreinigungsroboter
- Arduino
In einem heutigen Szenario sind wir alle so beschäftigt mit unserer Arbeit, dass wir nicht die Zeit haben, unser Haus richtig zu reinigen. Die Lösung des Problems ist sehr einfach. Sie müssen lediglich einen Haushaltsstaubsaugerroboter wie den Irobot Roomba kaufen, der Ihr Haus per Knopfdruck reinigt. Solche kommerziellen Produkte sind jedoch ein häufiges Problem, nämlich die Kosten. Deshalb haben wir uns heute für einen einfachen Bodenreinigungsroboter entschieden, der nicht nur einfach herzustellen ist, sondern im Vergleich zu kommerziellen Produkten, die auf dem Markt erhältlich sind, sehr viel weniger kostet. Häufige Leser erinnern sich vielleicht an unseren Arduino-Staubsaugerroboter, den wir vor langer Zeit gebaut haben, aber dieser war sehr sperrig und brauchte eine große Blei-Säure-Batterie, um sich zu bewegen. Der neue Arduino Staubsauger Wir werden hier bauen, wird kompakt und praktischer sein. Darüber hinaus verfügt dieser Roboter über Ultraschallsensoren und einen IR-Näherungssensor. Der Ultraschallsensor ermöglicht es dem Roboter, Hindernissen auszuweichen, so dass er sich frei bewegen kann, bis der Raum ordnungsgemäß gereinigt wurde, und der Näherungssensor hilft ihm, ein Herunterfallen von Treppen zu vermeiden. All diese Funktionen klingen interessant, oder? Also lasst uns anfangen.
In einem unserer vorherigen Artikel haben wir viele Bots wie den selbstausgleichenden Roboter, den automatisierten Flächendesinfektionsroboter und den Hindernisvermeidungsroboter erstellt. Überprüfen Sie diese, wenn das für Sie interessant klingt.
Erforderliche Materialien für den Bau eines Bodenreinigungsroboters auf Arduino-Basis
Da wir für den Aufbau des Hardwareabschnitts des Staubsaugerroboters sehr generische Komponenten verwendet haben, sollten Sie alle in Ihrem örtlichen Hobbygeschäft finden können. Hier finden Sie die vollständige Liste des erforderlichen Materials sowie das Bild aller Komponenten.
- Arduino Pro Mini - 1
- Ultraschallmodul HC-SR04 - 3
- L293D Motortreiber - 1
- 5 Volt N20 Motoren und Montagewinkel - 2
- N20 Motorräder - 2
- Schalter - 1
- Spannungsregler LM7805 - 1
- 7,4 V Lithium-Ionen-Akku - 1
- IR-Modul - 1
- Perfboard - 1
- Lenkrad - 1
- MDF
- Generischer tragbarer Staubsauger
Tragbarer Staubsauger
Im Abschnitt Komponentenanforderungen haben wir über einen tragbaren Staubsauger gesprochen. Die folgenden Bilder zeigen genau das. Es ist ein tragbarer Staubsauger von Amazon. Dies kommt mit einem sehr einfachen Mechanismus. Es hat drei Teile im Boden (eine kleine Kammer zur Aufbewahrung des Staubes, der mittlere Teil enthält den Motor, den Lüfter und die Batteriebuchse oben (es gibt eine Abdeckung oder Kappe für die Batterie). Es hat einen Gleichstrommotor und Ein Lüfter. Dieser Motor ist über einen einfachen Schalter direkt mit 3 V (2 * 1,5 Volt AA-Batterien) verbunden. Da wir unseren Roboter mit einer 7,4 V-Batterie versorgen, trennen wir die Verbindung von der internen Batterie und versorgen sie mit 5 V. Stromversorgung. Wir haben also alle unnötigen Teile entfernt und nur den Motor mit Zweidrahtstreben. Das sehen Sie in der Abbildung unten.
Ultraschallsensormodul HC-SR04
Um die Hindernisse zu erkennen, verwenden wir den beliebten Ultraschall-Abstandssensor HC-SR04 oder können ihn als Hindernisvermeidungssensoren bezeichnen. Die Arbeitsweise ist sehr einfach. Erstens sendet das Sendemodul eine Ultraschallwelle, die sich durch die Luft bewegt, auf ein Hindernis trifft und zurückprallt, und der Empfänger empfängt diese Welle. Durch Berechnung der Zeit mit Arduino können wir die Entfernung bestimmen. In einem früheren Artikel über das Projekt Arduino Based Ultrasonic Distance Sensor haben wir das Funktionsprinzip dieses Sensors sehr gründlich diskutiert. Sie können dies überprüfen, wenn Sie mehr über das Ultraschall-Abstandssensormodul HC-SR04 erfahren möchten.
Bodensensor (IR-Sensor) zur Treppenerkennung
Im Abschnitt "Funktionen" haben wir über eine Funktion gesprochen, mit der der Roboter Treppen erkennen und verhindern kann, dass er herunterfällt. Dazu verwenden wir einen IR-Sensor. Wir werden eine Schnittstelle zwischen dem IR-Sensor und Arduino herstellen. Die Funktionsweise des IR-Näherungssensors ist sehr einfach. Er verfügt über eine IR-LED und eine Fotodiode. Die IR-LED sendet IR-Licht aus. Wenn ein Hindernis vor dieses emittierte Licht tritt, wird es reflektiert und das reflektierte Licht wird erkannt durch die Fotodiode. Die durch die Reflexion erzeugte Spannung ist jedoch sehr niedrig. Um dies zu erhöhen, können wir einen Operationsverstärkerkomparator verwenden, wir können verstärken und Ausgabe erhalten. Ein IR-Modulhat drei Pins - Vcc, Masse und Ausgang. Normalerweise wird der Ausgang niedrig, wenn sich ein Hindernis vor dem Sensor befindet. Damit können wir den Boden erkennen. Wenn wir für den Bruchteil einer Sekunde ein Hoch vom Sensor erkennen, können wir den Roboter anhalten, ihn zurückdrehen oder alles tun, um zu verhindern, dass er von der Treppe fällt. In einem früheren Artikel haben wir eine Breadboard-Version des IR-Näherungssensormoduls erstellt und das Funktionsprinzip ausführlich erläutert. Sie können dies überprüfen, wenn Sie mehr über diesen Sensor erfahren möchten.
Schaltplan eines Bodenreinigungsroboters auf Arduino-Basis
Wir haben drei Ultraschallsensoren, die Hindernisse erkennen. Wir müssen also alle Erdungen der Ultraschallsensoren verbinden und sie mit der gemeinsamen Masse verbinden. Außerdem verbinden wir alle drei Vcc des Sensors und verbinden diese mit dem gemeinsamen VCC-Pin. Als nächstes verbinden wir die Trigger- und Echo-Pins mit den PWM-Pins des Arduino. Wir verbinden auch den VCC des IR-Moduls mit 5 V und Masse mit dem Erdungsstift von Arduino, der Ausgangspin des IR-Sensormoduls geht mit dem digitalen Pin D2 des Arduino. Für den Motortreiber verbinden wir die beiden Freigabestifte mit 5 V und den Treiberspannungsstift mit 5 V, da wir 5-Volt-Motoren verwenden. In einem früheren Artikel haben wir ein Arduino- Motortreiberschild hergestellt. Weitere Informationen zum L293D-Motortreiber-IC finden Sie hierund seine Operationen. Das Arduino, die Ultraschallmodule, der Motortreiber und die Motoren arbeiten mit 5 Volt, die höhere Spannung wird es töten und wir verwenden die 7,4-Volt-Batterie, um diese in 5 Volt umzuwandeln, wird der Spannungsregler LM7805 verwendet. Schließen Sie den Staubsauger direkt an den Hauptstromkreis an.
Aufbau der Schaltung für einen Arduino-basierten Bodenreinigungsroboter
Um einige Ideen über meinen Roboter zu bekommen, habe ich online nach Staubsaugerrobotern gesucht und einige Bilder von runden Robotern erhalten. Also beschloss ich, einen runden Roboter zu bauen. Um die Verfolgungsjagd und den Körper des Roboters zu bauen, habe ich viele Optionen wie Schaumstoff, MDF, Pappe usw. Aber ich wähle MDF, weil es hart ist und einige wasserbeständige Eigenschaften hat. Wenn Sie dies tun, können Sie entscheiden, welches Material Sie für Ihren Bot auswählen.
Um den Roboter zu bauen, habe ich das MDF-Blatt genommen und dann zwei Kreise mit einem Radius von 8 cm gezeichnet. Innerhalb dieses Kreises habe ich auch einen weiteren Kreis mit einem Radius von 4 cm gezeichnetzum Einbau des Staubsaugers. Dann schneide ich die Kreise aus. Außerdem habe ich geeignete Teile für den Radweg geschnitten und entfernt (siehe Bilder zum besseren Verständnis). Schließlich habe ich drei kleine Löcher für das Lenkrad gemacht. Der nächste Schritt besteht darin, die Motoren mit ihren Halterungen an der Basis anzubringen und das Lenkrad in seiner Position zu platzieren und zu befestigen. Platzieren Sie danach die Ultraschallsensoren links, rechts und in der Mitte des Roboters. Schließen Sie das IR-Modul auch an die Unterseite des Roboters an. Vergessen Sie nicht, den Schalter außen anzubringen. Hier dreht sich alles um den Bau des Roboters. Wenn Sie an dieser Stelle verwirrt sind, können Sie sich auf die folgenden Bilder beziehen.
Für den oberen Teil habe ich auch einen Kreis mit einem Radius von 11 cm auf die Schaumstoffplatte gezeichnet und geschnitten. Für den Abstand zwischen dem oberen und dem unteren Teil hatte ich drei 4 cm lange Stücke eines Kunststoffrohrs geschnitten. Danach habe ich die Kunststoffabstandshalter auf den unteren Teil und dann den oberen Teil geklebt. Wenn Sie möchten, können Sie die Seitenteile des Bots mit Kunststoff oder ähnlichen Materialien abdecken.
Arduino
Der vollständige Code für dieses Projekt ist am Ende des Dokuments angegeben. Dieser Arduino-Code ähnelt dem Arduino-basierten Ultraschall-Abstandssensor- Code. Die einzige Änderung betrifft die Bodenerkennung. In den folgenden Zeilen erkläre ich, wie der Code funktioniert. In diesem Fall verwenden wir keine zusätzlichen Bibliotheken. Im Folgenden haben wir den Code Schritt für Schritt beschrieben. Wir verwenden keine zusätzlichen Bibliotheken, um die Entfernungsdaten vom HC-SR04-Sensor zu dekodieren, da dies sehr einfach ist. In den folgenden Zeilen haben wir beschrieben, wie. Zuerst müssen wir den Trigger-Pin und den Echo-Pin für alle drei Ultraschall-Abstandssensoren definieren, die an die Arduino-Platine angeschlossen sind. In diesem Projekt haben wir drei Echo-Pins und drei Trigger-Pins. Beachten Sie, dass 1 der linke Sensor, 2 der vordere Sensor und 3 der rechte Sensor ist.
const int trigPin1 = 3; const int echoPin1 = 5; const int trigPin2 = 6; const int echoPin2 = 9; const int trigPin3 = 10; const int echoPin3 = 11; int irpin = 2;
Dann haben wir Variablen für die Entfernung definiert, die alle Variablen vom Typ (int) sind, und für die Dauer haben wir uns für die Verwendung von (long) entschieden. Wieder haben wir drei von jedem. Außerdem habe ich eine Ganzzahl zum Speichern des Status der Bewegung definiert. Wir werden später in diesem Abschnitt darauf eingehen.
lange Dauer1; lange Dauer2; lange Dauer3; int distanceleft; int distancefront; int distanceright; int a = 0;
Als nächstes müssen wir im Setup-Abschnitt alle perspektivischen Pins als Eingabe oder Ausgabe mit der Funktion pinModes () festlegen . Um Ultraschallwellen vom Modul zu senden, müssen wir den Trigger-Pin auf High setzen, dh alle Trigger-Pins sollten als OUTPUT definiert sein. Und um das Echo zu empfangen, müssen wir den Status der Echo-Pins lesen, damit alle Echo-Pins als INPUT definiert werden. Außerdem aktivieren wir den seriellen Monitor für die Fehlerbehebung. Um den Status der IR-Module zu lesen, habe ich den Irpin als Eingang definiert.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
Und diese digitalen Pins sind als OUTPUT für den Eingang des Motortreibers definiert.
PinMode (4, OUTPUT); PinMode (7, OUTPUT); PinMode (8, OUTPUT); PinMode (12, OUTPUT);
In der Hauptschleife haben wir drei Abschnitte für drei Sensoren. Alle Abschnitte funktionieren gleich, jedoch jeweils für unterschiedliche Sensoren. In diesem Abschnitt lesen wir den Hindernisabstand von jedem Sensor und speichern ihn in jeder definierten Ganzzahl. Um den Abstand abzulesen, müssen wir zuerst sicherstellen, dass die Triggerstifte frei sind. Dazu müssen wir den Triggerstift für 2 µs auf LOW setzen. Um die Ultraschallwelle zu erzeugen, müssen wir den Triggerstift für 10 µs auf HIGH drehen. Dadurch wird der Ultraschall gesendet, und mithilfe der Funktion pulsIn () können wir die Laufzeit ablesen und diesen Wert in der Variablen „ Dauer “ speichern. Diese Funktion hat 2 Parameter, der erste ist der Name des Echo-Pins und für den zweiten können Sie beide schreibenHOCH oder NIEDRIG. HIGH bedeutet, dass die Funktion pulsIn () darauf wartet, dass der Pin durch die zurückgeworfene Schallwelle auf HIGH geht, und mit dem Zählen beginnt. Dann wartet sie darauf, dass der Pin auf LOW geht, wenn die Schallwelle endet, wodurch die Zählung gestoppt wird. Diese Funktion gibt die Länge des Impulses in Mikrosekunden an. Zur Berechnung der Entfernung multiplizieren wir die Dauer mit 0,034 (Schallgeschwindigkeit in Luft beträgt 340 m / s) und dividieren sie durch 2 (dies ist auf das Hin- und Herbewegen der Schallwelle zurückzuführen). Schließlich speichern wir den Abstand jedes Sensors in entsprechenden Ganzzahlen.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); Dauer1 = PulsIn (echoPin1, HIGH); Distanz = Dauer1 * 0,034 / 2;
Nachdem wir den Abstand zu jedem Sensor ermittelt haben, können wir die Motoren mit Hilfe einer if-Anweisung steuern und so die Bewegung des Roboters steuern. Dies ist sehr einfach. Zuerst haben wir einen Wert für die Hindernisentfernung angegeben. In diesem Fall beträgt der Wert 15 cm (ändern Sie diesen Wert nach Ihren Wünschen). Dann gaben wir Bedingungen entsprechend diesem Wert an. Wenn sich beispielsweise ein Hindernis vor dem linken Sensor befindet (dh der Abstand des linken Sensors sollte unter oder gleich 15 cm liegen) und die beiden anderen Abstände hoch sind (dh, sich kein Hindernis vor dem Sensor befindet), dann können wir mit Hilfe der digitalen Schreibfunktion die Motoren nach rechts fahren. Später habe ich den Status des IR-Sensors überprüft. Wenn sich der Roboter auf dem Boden befindet, ist der Wert des IR-Pins NIEDRIG, und wenn nicht, ist der Wert niedrigHOCH. Dann habe ich diesen Wert in der Variablen int s gespeichert. Wir werden den Roboter gemäß diesem Status steuern.
Dieser Abschnitt des Codes wird verwendet, um den Roboter vorwärts und rückwärts zu bewegen :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, LOW); digitalWrite (12, HIGH); Verzögerung (1000); a = 1; }}
Bei dieser Methode gibt es jedoch ein Problem, wenn sich der Motor rückwärts bewegt, der Boden zurückkommt und sich der Bot vorwärts bewegt und wiederholt, dass der Bot stecken bleibt. Um dies zu überwinden, speichern wir einen Wert (1) in int, nachdem wir verstanden haben, dass der Boden nicht vorhanden ist. Wir überprüfen diesen Zustand auch auf andere Bewegungen.
Nachdem das Fehlen des Bodens festgestellt wurde, bewegt sich der Roboter nicht vorwärts. Stattdessen bewegt es sich nach links. Auf diese Weise können wir das Problem vermeiden.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright> 15))
Im obigen Zustand. Zunächst überprüft der Roboter den Bodenstatus und den ganzzahligen Wert. Der Bot bewegt sich nur vorwärts, wenn alle Bedingungen erfüllt sind.
Jetzt können wir die Befehle für den Motortreiber schreiben. Dadurch wird der rechte Motor rückwärts und der linke Motor vorwärts angetrieben, wodurch der Roboter nach rechts gedreht wird.
Dieser Abschnitt des Codes wird verwendet, um den Roboter nach rechts zu bewegen:
digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, HIGH); digitalWrite (12, LOW);
Wenn der Bot feststellt, dass der Boden nicht vorhanden ist, ändert sich der Wert auf 1 und der Bot bewegt sich nach links. Nach dem Abbiegen nach links ändert sich der Wert von 'a' von 1 auf 0.
if ((a == 1) && (s == LOW) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright> 15) - (distanceleft <= 15 && distancefront> 15 && distanceright> 15)) { digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (12, HIGH); Verzögerung (100); a = 0; }}
Dieser Abschnitt des Codes wird verwendet, um den Roboter nach links zu bewegen:
if ((s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, HIGH); digitalWrite (12, LOW); }}
Das war's für den Bau eines auf Arduino basierenden intelligenten Staubsaugerroboters. Die vollständige Arbeitsweise des Projekts finden Sie in dem Video, das unten auf dieser Seite verlinkt ist. Wenn Sie Fragen haben, kommentieren Sie unten.