FPGAfan
04.07.2020, 13:35
Hallo!
In diesem Beitrag möchte ich kurz meinen Eigenbau-Saugroboter vorstellen. Ich arbeite seit circa 6-7 Monate an diesem Projekt. Die Version aus diesem Beitrag basiert auf drei Prototypen. Mit der Saugleistung bin ich soweit ganz zu frieden.
Der Saugroboter besteht aus 3D-gedrucktem Kunststoff (PLA) und wird aus mehreren Teilen zusammengesetzt. Dadurch ist es auch möglich defekte Teile einfach auszutauschen. Die Profile der Räder bestehen aus dem flexiblen Kunststoff TPU. Die Mechanik bzw. die Konstruktion des Roboters habe ich in Fusion 360 erstellt und anschließend mit einem Prusa i3 mk3s ausgedruckt.
Der Roboter besitzt zwei Ultraschallsensoren vom Typ HC-SR04, die frontal am Fahrzeug befestigt sind. Mit diesen Sensoren soll das Fahrzeug einen Großteil der Hindernisse erkennen.
Falls Hindernisse nicht in den Messbereich der Ultraschallsensoren fallen, kann durch zwei selbstgebaute Drehzahlmesser, an den Antriebssträngen der Motoren, ein Stillstand der Räder erkannt werden. Auf den Antriebsachsen befindet sich jeweils eine Platte mit Neodym-Magneten. Die positiven Magnetfelder werden von einem omnipolaren Hallsensor erkannt woraufhin ein elektrisches Signal an das FPGA weitergegeben wird.
Um Treppenstufen oder Abgründe zu erkennen habe ich zwei Abgrundsensoren gebaut. Diese bestehen aus einer Infrarot-Leuchtdiode und einem Fototransistor, welcher die ausgesendeten Infrarotstrahlen wieder empfängt. Ragt der Roboter 2-3cm über eine Kante wird durch die fehlenden Infrarotstrahlen am Fototransistor das Ausgangssignal in einen leitenden Zustand versetzt. Ein BC337-Bipolartransistor formt das lineare Signal des Fototransistors dann in ein Rechtecksignal um. Da das von mir verwendete FPGA Eingangsspannungen mit maximal 3.7V verarbeiten kann, musste ein Spannungsteiler an den Ausgang der Schaltung eingesetzt werden.
Das Herz des Saugroboters bildet ein Cyclone 10 FPGA von Intel, welches sich auf einem TEI0003-Board von der Firma Trenz Electronic befindet. Das FPGA bzw. die in dieses IC geladene Schaltung steuert alle Prozesse im Roboter. Die Schaltung habe ich mit der Hardwarebeschreibungssprache VHDL entworfen. Das FPGA wertet die Sensoren aus und kann auf dieser Grundlage das Verhalten des Roboters an die äußeren Umstände (wie Hindernisse) anpassen.
Damit der Roboter nicht bei jedem erkanntem Hindernis das gleiche Manöver mit einem konstanten Drehwinkel ausführt, werden Daten von einer Zustandsmaschine aus einem Array geladen, indem mehrere mögliche Manöver gespeichert wurden. Die Zustandsmaschine des Navigationsalgorithmus beinhaltet einen Counter, der nach jedem Manöver die Adresse des Arrays um 1 erhöht, sodass unterschiedliche Rotationswinkel zum Ausweichen eines Hindernisses genutzt werden können.
Um Schmutz- und Staubpartikel einzusaugen wird ein Radialgebläse verwendet, welches durch Pulsweitenmodulation vom FPGA angesteuert wird.
Dabei werden Staub- und Schutzpartikel im vorderen Bereich des Roboters durch eine Öffnung angesaugt und gelangen in einen Behälter. Am Auffangbehälter befindet sich ein kleiner zweilagiger Filter, welcher die Staubpartikel von der Luft trennt. Die Luft wird vom Radialgebläse weiterhin angesaugt und anschließend am Heck des Roboters durch Lüftungsschlitze ausgestoßen. Die Staubpartikel bleiben im Auffangbehälter und können vom Nutzer entsorgt werden.
Die Platinen für den Bordcomputer, Abgrundsensoren, und Stromversorgung habe ich in Autodesk Eagle erstellt und dann herstellen lassen.
Die Steuerung des Roboters kann manuell über einen Taster am Roboter oder über eine Webapp erfolgen. Um die letztere Idee umzusetzen habe ich eine JavaScript basierte Webanwendung konzipiert, die über ein Bluetooth-low-energy-Modul und einer UART-Schnittstelle direkt mit dem FPGA kommuniziert.
Folgende Funktionen sind noch in der Entwicklung:
• Mapping Algorithmus
• Eigenes Ladegerät (ggf. auch als Ladestation)
Ich freue mich über Fragen oder Anmerkungen!:)
In diesem Beitrag möchte ich kurz meinen Eigenbau-Saugroboter vorstellen. Ich arbeite seit circa 6-7 Monate an diesem Projekt. Die Version aus diesem Beitrag basiert auf drei Prototypen. Mit der Saugleistung bin ich soweit ganz zu frieden.
Der Saugroboter besteht aus 3D-gedrucktem Kunststoff (PLA) und wird aus mehreren Teilen zusammengesetzt. Dadurch ist es auch möglich defekte Teile einfach auszutauschen. Die Profile der Räder bestehen aus dem flexiblen Kunststoff TPU. Die Mechanik bzw. die Konstruktion des Roboters habe ich in Fusion 360 erstellt und anschließend mit einem Prusa i3 mk3s ausgedruckt.
Der Roboter besitzt zwei Ultraschallsensoren vom Typ HC-SR04, die frontal am Fahrzeug befestigt sind. Mit diesen Sensoren soll das Fahrzeug einen Großteil der Hindernisse erkennen.
Falls Hindernisse nicht in den Messbereich der Ultraschallsensoren fallen, kann durch zwei selbstgebaute Drehzahlmesser, an den Antriebssträngen der Motoren, ein Stillstand der Räder erkannt werden. Auf den Antriebsachsen befindet sich jeweils eine Platte mit Neodym-Magneten. Die positiven Magnetfelder werden von einem omnipolaren Hallsensor erkannt woraufhin ein elektrisches Signal an das FPGA weitergegeben wird.
Um Treppenstufen oder Abgründe zu erkennen habe ich zwei Abgrundsensoren gebaut. Diese bestehen aus einer Infrarot-Leuchtdiode und einem Fototransistor, welcher die ausgesendeten Infrarotstrahlen wieder empfängt. Ragt der Roboter 2-3cm über eine Kante wird durch die fehlenden Infrarotstrahlen am Fototransistor das Ausgangssignal in einen leitenden Zustand versetzt. Ein BC337-Bipolartransistor formt das lineare Signal des Fototransistors dann in ein Rechtecksignal um. Da das von mir verwendete FPGA Eingangsspannungen mit maximal 3.7V verarbeiten kann, musste ein Spannungsteiler an den Ausgang der Schaltung eingesetzt werden.
Das Herz des Saugroboters bildet ein Cyclone 10 FPGA von Intel, welches sich auf einem TEI0003-Board von der Firma Trenz Electronic befindet. Das FPGA bzw. die in dieses IC geladene Schaltung steuert alle Prozesse im Roboter. Die Schaltung habe ich mit der Hardwarebeschreibungssprache VHDL entworfen. Das FPGA wertet die Sensoren aus und kann auf dieser Grundlage das Verhalten des Roboters an die äußeren Umstände (wie Hindernisse) anpassen.
Damit der Roboter nicht bei jedem erkanntem Hindernis das gleiche Manöver mit einem konstanten Drehwinkel ausführt, werden Daten von einer Zustandsmaschine aus einem Array geladen, indem mehrere mögliche Manöver gespeichert wurden. Die Zustandsmaschine des Navigationsalgorithmus beinhaltet einen Counter, der nach jedem Manöver die Adresse des Arrays um 1 erhöht, sodass unterschiedliche Rotationswinkel zum Ausweichen eines Hindernisses genutzt werden können.
Um Schmutz- und Staubpartikel einzusaugen wird ein Radialgebläse verwendet, welches durch Pulsweitenmodulation vom FPGA angesteuert wird.
Dabei werden Staub- und Schutzpartikel im vorderen Bereich des Roboters durch eine Öffnung angesaugt und gelangen in einen Behälter. Am Auffangbehälter befindet sich ein kleiner zweilagiger Filter, welcher die Staubpartikel von der Luft trennt. Die Luft wird vom Radialgebläse weiterhin angesaugt und anschließend am Heck des Roboters durch Lüftungsschlitze ausgestoßen. Die Staubpartikel bleiben im Auffangbehälter und können vom Nutzer entsorgt werden.
Die Platinen für den Bordcomputer, Abgrundsensoren, und Stromversorgung habe ich in Autodesk Eagle erstellt und dann herstellen lassen.
Die Steuerung des Roboters kann manuell über einen Taster am Roboter oder über eine Webapp erfolgen. Um die letztere Idee umzusetzen habe ich eine JavaScript basierte Webanwendung konzipiert, die über ein Bluetooth-low-energy-Modul und einer UART-Schnittstelle direkt mit dem FPGA kommuniziert.
Folgende Funktionen sind noch in der Entwicklung:
• Mapping Algorithmus
• Eigenes Ladegerät (ggf. auch als Ladestation)
Ich freue mich über Fragen oder Anmerkungen!:)