Inhaltsverzeichnis:

Raspberry Pi Laserscanner - Gunook
Raspberry Pi Laserscanner - Gunook

Video: Raspberry Pi Laserscanner - Gunook

Video: Raspberry Pi Laserscanner - Gunook
Video: OpenScan Raspberry Pi Controller for 3D Scanner 2024, Juli
Anonim
Image
Image
Raspberry Pi Laserscanner
Raspberry Pi Laserscanner

Der Laserscanner ist ein eingebettetes Raspberry Pi-System, das Objekte in.obj-Mesh-Dateien für die Reproduktion mittels 3D-Druck digitalisieren kann. Das Gerät tut dies, indem es einen Linienlaser und eine integrierte PiCam verwendet, um Computer Vision durchzuführen. Der Laser ist um 45 Grad schräg vom Laser positioniert und projiziert eine leuchtend rote Linie auf eine vertikale Schicht des Objekts. Die Kamera erkennt den Abstand des Slice von der Mitte, um ein Mesh-Slice zu erstellen. Das Objekt wird auf dem rotierenden Tablett geschleudert und der Vorgang wird wiederholt, bis das gesamte Objekt gescannt ist. Die generierte.obj-Datei wird schließlich per E-Mail an den Benutzer gesendet, wodurch das System vollständig eigenständig und eingebettet ist.

Dieses Instructable wird durchgehen, wie das Gerät gebaut wurde, einige Ergebnisse und zukünftige Schritte.

Schritt 1: Inspiration

Inspiration
Inspiration
Inspiration
Inspiration

Als begeisterter Hersteller beschäftige ich mich seit mehreren Jahren mit 3D-Druck und Volumenmodellierung. Ich habe mit vielen verschiedenen Prototyping-Tools gearbeitet, von CNC-Router über Laserschneider bis hin zu 3D-Druckern. Ein Gerät, das mein lokaler Makerspace noch kaufen muss, war ein 3D-Scanner - und ich kann Ihnen sagen, warum.

Die billigeren (einige hundert Dollar) waren unzuverlässig, erforderten perfekte Bedingungen und lieferten immer noch ziemlich schäbige Ergebnisse. Die teuren waren… nun ja, teuer, bis zu mehreren tausend Dollar, was ihre Funktion in vielen Fällen nicht wert war. Darüber hinaus entscheide ich mich meistens dafür, Messungen vorzunehmen und ein Modell von Grund auf neu zu entwerfen, als mich mit dem aus einem Scan generierten Oberflächennetz zu befassen.

Aus diesem Grund wollte ich einen preisgünstigen Standalone-Scanner bauen, um zu sehen, wie gut ich ein Objekt mit handelsüblichen Komponenten scannen kann.

Nach einigen Recherchen stellte ich fest, dass viele 3D-Scanner eine rotierende Plattform und dann eine Vielzahl verschiedener Sensoren verwendeten, um den Abstand vom Zentrum zu messen, um ein Rotationsmodell zu erstellen. Viele von ihnen verwendeten Dual-Kameras ähnlich der der Kinect. Ich stolperte schließlich über den Yscanner, einen Scanner mit niedriger Auflösung, der einen Laser verwendet. In Anbetracht der Einfachheit und Machbarkeit sah diese Lasertechnik, bei der ein Laser relativ zu einer Kamera versetzt gerichtet wird, um den Abstand vom Zentrum zu messen, wie ein klarer Weg nach vorne aus.

Schritt 2: Werkzeuge und Teile

Teile:

  • Himbeer-Pi $35.00
  • Raspberry Pi Kamera V2 $30.00
  • LEDs, Widerstände und Drähte
  • 3D-Druck-Filament
  • 12x12x0,125 Holzplatten
  • M3-Hardware
  • Schrittmotor - $14
  • Linienlaser - $8
  • LN298 Schrittmotortreiber - $2.65
  • Metalldruckknopf - $5

Werkzeuge:

  • Lötkolben
  • Laserschneider
  • 3D Drucker
  • Schraubenzieher
  • Zange

Schritt 3: High-Level-Design

High-Level-Design
High-Level-Design
High-Level-Design
High-Level-Design

Die zentrale Komponente in diesem Design ist der Linienlaser, der auf einen vertikalen Schnitt der Objekte projiziert. Diese Projektion könnte auf der Picamera erfasst, perspektivisch korrigiert und dann vor der Bildverarbeitung gefiltert werden. Bei der Bildverarbeitung könnte der Abstand zwischen jedem Segment der Linie vom Zentrum des Objekts erfasst werden. In radialen Koordinaten würde dieses Bild sowohl die r- als auch die z-Komponente ergeben. Die dritte Dimension,, wird dann durch Drehen des Objekts zu einer neuen Schicht erreicht. Dieses Konzept ist in der ersten Abbildung dargestellt.

Um die oben beschriebenen Aktionen durchzuführen, habe ich einen Raspberry Pi als zentrale Recheneinheit verwendet. Ich habe einen Schrittmotor und einen Motortreiber an den Pi angeschlossen, der von einer externen 5V-Versorgung gespeist und von den GPIO-Pins des Pi gesteuert wird. Auf die 3,3 V Leitung des Pi wurde ein Linienlaser gelegt und eine PiCam an den Kameraeingang des Pi angeschlossen. Zuletzt wurde ein einfacher heruntergezogener Knopf und eine Status-LED installiert, um dem Benutzer anzuzeigen, in welchem Zustand sich das System befindet. Das gesamte System ist in einem Systemblockdiagramm zusammengefasst.

Von Anfang an war geplant, die Elektronik in einer lasergeschnittenen Box zusammen mit T-Nuten und M3-Hardware unterzubringen. Die Elektronik wäre unsichtbar in einem unteren Fach versteckt und ein Deckel würde einen einfachen Zugriff auf die Objektplatzierung auf dem drehbaren Tablett ermöglichen. Dieser Deckel ist notwendig, um die Lichtmenge zu minimieren, die in das System eindringt, da dieses externe Licht beim abschließenden Scan Rauschen verursachen kann.

Schritt 4: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

Wie oben zu sehen war, habe ich, bevor ich mit dem Laserschneiden oder 3D-Drucken begann, Autodesk Fusion 360 verwendet, um ein detailliertes 3D-Modell unseres Designs zu erstellen. Zur Übersicht ist das Gerät eine einfache Box mit einem Deckel mit lasergeschnittenen Scharnieren. Es gibt zwei Hauptschichten des Geräts: das Elektronikbett und das Hauptbett, mit Löchern für Drähte, die zwischen den beiden Schichten verlaufen.

Der Großteil unserer Box wurde mit einem Laserschneider hergestellt, wobei die Designs in Fusion 360 hergestellt und auf einem Epilog Zing 40 W Laserschneider geschnitten wurden. Unsere Designs sind in den obigen Abbildungen dargestellt. Von oben links nach rechts sind die Teile das Hauptbett, das Elektronikbett, zwei Teile für den Deckel, das Rückenteil, das Vorderteil und die beiden Seitenteile. Im Hauptbett gibt es drei Hauptausschnitte: einen für die Montage des Schrittmotors, einen zum Verlegen der Kabel vom Laser und einen zum Verlegen des breiten Kabels der PiCam. Das Bettstück hat Befestigungslöcher zum Befestigen des Pi, des Steckbretts und des Motortreibers und einen größeren Ausschnitt für den Zugriff auf den Schrittmotor. Die Deckelteile rasten einfach zusammen, um das oben gezeigte dreieckige Teil zu bilden, und das Scharnier ist eine einfache Extrusion, die die Breite des Durchmessers des Lochs der Seitenbretter hat. Das Rückenteil und eines der Seitenteile haben seitliche Schlitze, so dass die Anschlüsse des Pi (HDMI, USB, Ethernet, Power) leicht zugänglich sind. Die Vorderseite ist ein einfaches Stück, in das ich schließlich mit einer Handbohrmaschine Löcher gemacht habe, um den Knopf und die LED zu montieren. Wie auf allen Teilen zu sehen, werden unsere Teile von M3-Hardware mit T-Joints und Schlitzen zusammengehalten. Dies ist eine Methode, um lasergeschnittene Teile orthogonal und sicher zu halten. Die Flossen der Stücke richten sich mit den Schlitzen anderer Stücke aus und der T-förmige Schnitt an den Kanten bietet Platz für eine M3-Mutter, die ohne Drehung darin eingeklemmt werden kann. Dies ermöglicht es uns, die Teile dann mit einer M3-Schraube mit sehr geringem Spielraum zu verriegeln, ohne dass die Montage vollständig dauerhaft ist.

Ich entschied mich, die meisten unserer Stücke aufgrund seiner Geschwindigkeit und Leichtigkeit mit einem Laserschneider zu machen. Einige Teile musste ich jedoch aufgrund ihrer 3D-Geometrie, die auf dem Cutter schwieriger zu erstellen wäre, noch 3D-drucken. Das erste Stück war der Linienlaserhalter. Dieses Teil sollte auf dem Hauptbett in einem Winkel von 45 Grad aus der Sicht der Kamera montiert werden und ein Loch haben, so dass der Laser eng anliegend Reibung hineinpassen konnte. Ich musste auch eine Motorhalterung erstellen, weil die Welle des Motors so lang war. Die Montagereibung passte in die lasergeschnittenen Teile und senkte die Ebene, an der der Motor befestigt war, so dass die rotierende Plattform bündig mit dem Hauptbett war.

Schritt 5: Elektronik

Elektronik
Elektronik

Die Verdrahtungshardware dieses Projekts war sehr einfach, da der 3D-Scanner nicht zu viele Peripheriegeräte benötigte. Ein Motor, eine Taste, eine LED, ein Laser und eine Kamera mussten an den Pi angeschlossen werden. Wie gezeigt, habe ich darauf geachtet, Widerstände in Reihe mit jedem verwendeten Pin zu schalten, um die Pins zu schützen. Ein GPIO-Pin war für die Steuerung der Status-LED bestimmt, die aufleuchtete, wenn das Gerät betriebsbereit war, und mit PWM pulsierte, wenn das Gerät in Betrieb war. Ein weiterer GPIO-Pin war mit einem hochgezogenen Knopf verbunden, der HIGH registrierte, wenn der Knopf nicht gedrückt wurde und LOW, wenn der Knopf gedrückt wurde. Schließlich habe ich vier GPIO-Pins zum Antrieb des Schrittmotors gewidmet.

Da unser Motor nur bis zu einem gewissen Grad ohne Geschwindigkeitsregelung schreiten musste, haben wir uns für einen einfacheren Schrittmotortreiber (L298N) entschieden, der einfach die Steuerleitungen hochschaltet, um in die Eingänge des Motors einzuspeisen. Um zu erfahren, wie man die Schrittmotoren auf sehr niedrigem Niveau betreibt, haben wir sowohl auf das L298N-Datenblatt als auch auf die Arduino-Bibliothek verwiesen. Schrittmotoren haben einen Magnetkern mit hervorstehenden Fingern abwechselnder Polarität. Die vier Drähte sind gewickelt, um zwei Elektromagnete zu steuern, die jeweils jeden anderen gegenüberliegenden Finger im Motor antreiben. So können wir den Stepper durch Umschalten der Polarität der Finger um einen Schritt schieben. Mit diesem Wissen über die Funktionsweise von Steppern auf Hardwareebene konnten wir die Stepper viel einfacher steuern. Wir haben uns dafür entschieden, unseren Schrittmotor im Labor über ein 5-V-Netzteil und nicht über den Pi zu betreiben, da er eine maximale Stromaufnahme von etwa 0,8 A aufweist, was mehr ist, als der Pi liefern konnte.

Schritt 6: Software

Software
Software
Software
Software
Software
Software
Software
Software

Die Software für dieses Projekt kann in vier Hauptkomponenten unterteilt werden, die zusammenwirken: Bildverarbeitung, Motorsteuerung, Netzerstellung und eingebettete Funktionen.

Als Zusammenfassung der Software können wir uns die erste Abbildung ansehen. Beim Booten des Systems meldet sich die.bashrc automatisch beim Pi an und beginnt mit der Ausführung unseres Python-Codes. Das System lässt die Statusleuchte aufleuchten, um dem Benutzer anzuzeigen, dass es korrekt gebootet wurde und auf den Tastendruck wartet. Der Benutzer kann dann das zu scannende Objekt platzieren und den Deckel schließen. Nach dem Drücken der Taste pulsiert die LED, um dem Benutzer mitzuteilen, dass das Gerät funktioniert. Das Gerät wechselt zwischen Bildverarbeitung und Motorsteuerung, bis die vollständige Drehung abgeschlossen ist und alle Objektdaten gesammelt wurden. Schließlich wird das Mesh erstellt und die Datei per E-Mail an eine vorausgewählte E-Mail gesendet. Dadurch wird der Zyklus neu gestartet und die Maschine ist bereit, auf Knopfdruck einen weiteren Scan durchzuführen.

Bildverarbeitung

Als erstes wurde ein aufgenommenes Bild verarbeitet, um die im Bild gespeicherten Informationen in eine Form zu extrahieren, die verwendet werden konnte, um ein Array von Punkten im Raum zu erstellen. Dazu machte ich zunächst ein Bild des Objekts auf der Plattform zusammen mit all den Hintergrundgeräuschen, die durch den Laser erzeugt wurden, der auf die Rückseite der Box strahlt und sich auflöst. Dieses Bild hatte in seiner Rohform zwei Hauptprobleme. Erstens wurde das Objekt schräg mit einer erhöhten Perspektive betrachtet und zweitens gab es viele Hintergrundgeräusche. Als erstes musste ich diesen Betrachtungswinkel berücksichtigen, da wir mit der Verwendung des Fotos keine konsistente Objekthöhe bestimmen können. Wie in der zweiten Abbildung zu sehen ist, ist die Höhe der umgedrehten „L“-Form konsistent; Da jedoch eine Seite länger ist als die andere, scheinen sie an der dem Betrachter am nächsten liegenden Kante unterschiedliche Höhen zu haben.

Um dies zu beheben, musste ich den Arbeitsbereich im Bild aus der Trapezform, die er zuvor hatte, in ein Rechteck umwandeln. Dazu habe ich den durch diesen Link bereitgestellten Code verwendet, der bei einem Bild und vier Punkten das Bild zwischen den vier Punkten beschneidet und das beschnittene Bild transformiert, um die Perspektive zu kompensieren. Diese Transformation verwendet die vier Punkte, um ein Rechteck anstelle einer trapezförmigen Form zu erstellen, wie in der dritten Abbildung zu sehen.

Das nächste Problem, das gelöst werden musste, war das Hintergrundrauschen in Form von Außenlicht und Licht, das vom Laser selbst reflektiert wird. Dazu habe ich das Licht mit der Funktion inRange() von OpenCV gefiltert. Ich habe den Schwellenwert so eingestellt, dass er nur rotes Licht ab einer bestimmten Stufe aufnimmt. Um den richtigen Wert zu erhalten, begann ich mit einem milden Schwellenwert und erhöhte den Schwellenwert so lange, bis das einzige Licht das aufgenommen wurde, das Laserlicht auf dem gescannten Objekt war. Als ich dieses Bild hatte, fand ich das hellste Pixel in jeder Reihe erhalten Sie eine Linie von einem Pixel pro Zeile, die die linke Seite der Laserlinie begrenzt. Jedes Pixel wurde dann in einen Scheitelpunkt im 3D-Raum umgewandelt und in einem Array gespeichert, wie im Abschnitt zur Netzerstellung beschrieben. Die Ergebnisse dieser Schritte sind in der vierten Abbildung zu sehen.

Motorsteuerung

Nachdem ich ein einzelnes Bild erfolgreich verarbeiten konnte, um die Scheibe des Objekts zu erhalten, musste ich das Objekt drehen können, um ein neues Bild mit einem anderen Winkel aufzunehmen. Dazu habe ich den Schrittmotor unter der Plattform gesteuert, auf der das zu scannende Objekt sitzt. Ich habe eine Grundlage für unsere Schrittfunktion geschaffen, indem ich eine Variable erstellt habe, um den Zustand des Motors zu verfolgen, und Mikroschritt durch Umschalten jedes der vier Motoreingänge.

NetzerstellungUm aus allen bearbeiteten Bildern ein Netz zu erstellen, musste ich zunächst jedes weiße Pixel im bearbeiteten Bild in einen Scheitelpunkt im 3D-Raum umwandeln. Da ich einzelne Schichten des Objekts mit Zylindersymmetrie sammle, war es sinnvoll, mit dem Sammeln von Zylinderkoordinaten zu beginnen. Dies war sinnvoll, da die Höhe des Bildes die Z-Achse darstellen könnte, der Abstand von der Mitte des Drehtisches die R-Achse darstellen könnte und die Drehung des Schrittmotors die Theta-Achse darstellen könnte. Da ich unsere Daten jedoch in Zylinderkoordinaten gespeichert habe, musste ich jeden dieser Scheitelpunkte in kartesische Koordinaten umwandeln.

Sobald diese Scheitelpunkte erzeugt wurden, wurden sie in einer Liste gespeichert und diese Liste wurde in einer anderen Liste gespeichert, die die Scheitelpunktlisten enthielt, die für jedes aufgenommene Bild erstellt wurden. Nachdem alle Bilder verarbeitet und in Scheitelpunkte umgewandelt waren, musste ich die Scheitelpunkte auswählen, die ich tatsächlich im endgültigen Netz darstellen wollte. Ich wollte, dass der obere Scheitelpunkt und der untere Scheitelpunkt enthalten sind, und dann habe ich basierend auf der Auflösung eine gleichmäßig verteilte Anzahl von Scheitelpunkten ausgewählt, die für jedes Bild verwendet werden sollen. Da nicht alle Scheitelpunktlisten die gleiche Länge hatten, musste ich sie ausgleichen, indem ich die Liste mit der kleinsten Anzahl von Scheitelpunkten suchte und Scheitelpunkte aus allen anderen Listen entfernte, bis alle gerade waren. Mit den erstellten Scheitelpunktlisten konnte ich nun ein Netz erstellen. Ich habe mich dafür entschieden, unser Mesh nach dem.obj-Dateistandard zu formatieren, da es einfach und 3D-druckbar ist.

Eingebettete Funktion

Nachdem das Gerät funktionsfähig war, habe ich es poliert, indem ich die vollständige eingebettete Funktionalität hinzugefügt habe. Dies bedeutete, dass Tastatur, Maus und Monitor entfernt und uns die.obj-Datei nach Abschluss der Verarbeitung drahtlos gesendet wurde. Um zu beginnen, habe ich den.bashrc-Code geändert, um sich automatisch anzumelden und das Python-Hauptprogramm beim Start zu starten. Dazu habe ich sudo raspi-config verwendet und „Console Autologin“ausgewählt und die Zeile „sudo python /home/pi/finalProject/FINAL.py“zu /home/pi/.bashrc hinzugefügt Taster und Status-LED für Benutzereingabe und -ausgabe hinzugefügt. Die Taste würde es dem Benutzer ermöglichen, dem Gerät mitzuteilen, wann mit dem Scannen begonnen werden soll, und die LED würde dem Benutzer den Zustand des Geräts mitteilen. Wenn die LED leuchtet, ist das Gerät bereit, einen neuen Scan zu starten. Wenn die LED pulsiert, scannt das Gerät gerade. Wenn die LED auf Büro steht, liegt ein Softwarefehler vor, der einen Systemneustart erfordert. Zuletzt habe ich das Gerät aktiviert, um die.obj-Datei per E-Mail zu senden. Dies geschah unter Verwendung der smtplib- und E-Mail-Bibliotheken. Diese Möglichkeit, E-Mails zu senden, gab uns eine sehr bequeme und drahtlose Möglichkeit, die erstellte Datei dem Benutzer zum Zugriff auf viele verschiedene Plattformen bereitzustellen.

Schritt 7: Integration

Integration
Integration

Nachdem ich die verschiedenen Teile des Geräts hergestellt hatte, baute ich es zusammen. Die obige Abbildung zeigt der Reihe nach:

(a) montierte Box außen

(b) zusammengebaute Box im Inneren mit Kamera und Laser

(c) Innenansicht des Elektronikbetts

(d) Rückseite des Pi mit Zugang zu den Pi-Ports und dem 5V-Motoreingang

(e) Taster mit LED-Ring und Statusleuchte in der Gerätevorderseite

Schritt 8: Ergebnisse

Ergebnisse
Ergebnisse
Ergebnisse
Ergebnisse
Ergebnisse
Ergebnisse
Ergebnisse
Ergebnisse

Der Laser-3D-Scanner konnte Objekte mit ordentlicher Präzision scannen. Die Merkmale der Objekte sind eindeutig und erkennbar und die Teile konnten mit einer Slicing-Software wie Repetier sehr einfach in 3D gedruckt werden. Die obigen Abbildungen zeigen einige Beispielscans von einem Stück Holz und einer Quietscheente.

Eine unserer größten Erkenntnisse und Erfolge, die ich beim Testen festgestellt habe, war die Konsistenz des Geräts. Während mehrerer Versuche mit demselben Objekt konnte der Scanner jedes Mal eine sehr ähnliche.obj-Datei erstellen, auch wenn wir die Platzierung des Objekts geringfügig veränderten. Wie in den drei separaten Scans zu sehen ist, sehen sie alle sehr ähnlich aus und erfassen die gleichen Details und die gleiche Menge an Details. Ich war insgesamt sehr beeindruckt von der Konsistenz und Robustheit unseres Systems.

Eine der Variablen, die ich wirklich einstellen konnte, ist die Auflösung der Scans. Da der Stepper 400 Schritte hat, kann ich wählen, wie groß jedes ΔΘ ist, um die Winkelauflösung zu bestimmen. Standardmäßig habe ich die Winkelauflösung auf 20 Iterationen eingestellt, was bedeutet, dass sich der Motor in jedem Frame um 20 Schritte dreht (400/20 = 20). Dies wurde hauptsächlich aus Zeitgründen gewählt - es dauert etwa 45 Sekunden, um einen Scan auf diese Weise abzuschließen. Wenn ich jedoch einen Scan mit viel höherer Qualität möchte, kann ich die Anzahl der Iterationen auf bis zu 400 erhöhen. Dies gibt viel mehr Punkte zum Konstruieren des Modells, was zu einem viel detaillierteren Scan führt. Neben der Winkelauflösung kann ich auch die vertikale Auflösung anpassen oder wie viele verschiedene Punkte ich entlang der Laserschicht abfragen möchte. Für ein ähnliches Interesse an Zeit habe ich diesen Standardwert auf 20 gesetzt, aber ich kann ihn für bessere Ergebnisse erhöhen. Indem ich mit diesen Parametern der Winkelauflösung und Ortsauflösung spielte, konnte ich die Ergebnisse verschiedener Scans unten in der letzten Abbildung zusammenstellen. Jedes Etikett ist so formatiert, dass es die Winkelauflösung x räumliche Auflösung ist. Wie in den Standard-Scaneinstellungen zu sehen, sind die Merkmale der Ente erkennbar, aber nicht detailliert. Wenn ich jedoch die Auflösung erhöhe, beginnen sich einzelne präzise Merkmale zu zeigen, einschließlich der Augen, des Schnabels, des Schwanzes und der Flügel der Ente. Das Scannen des Bildes mit der höchsten Auflösung dauerte etwa 5 Minuten. Diese hohe erreichbare Auflösung zu sehen, war ein sehr großer Erfolg.

Einschränkungen

Trotz der erfolgreichen Ergebnisse des Projekts gibt es noch einige Einschränkungen bei der Konzeption und Umsetzung. Bei der Verwendung des Lasers treten viele Probleme mit der Lichtstreuung auf. Viele Objekte, die ich zu scannen versuchte, die entweder durchscheinend, glänzend oder sehr dunkel waren, erwiesen sich als problematisch bei der Reflexion des Lichts von der Oberfläche. Wenn das Objekt durchscheinend wäre, würde das Licht absorbiert und gestreut, was zu einem sehr verrauschten Ablesen von Schnitten führte. Bei glänzenden und dunklen Objekten würde das Licht entweder reflektiert oder bis zu einem Punkt absorbiert, der schwer zu erfassen wäre. Da ich außerdem eine Kamera verwende, um die Merkmale von Objekten zu erfassen, ist ihre Wahrnehmung durch ihre Sichtlinie eingeschränkt, was bedeutet, dass konkave Objekte und scharfe Winkel oft von anderen Teilen des Objekts blockiert werden. Dies wird in unserem Gummiente-Beispiel gezeigt, da der Schwanz beim Scan manchmal seine Krümmung verliert. Außerdem kann die Kamera nur Oberflächenstrukturen erkennen, sodass Bohrungen oder Innengeometrien nicht erfasst werden können. Dies ist jedoch ein häufiges Problem, das auch viele andere Scanlösungen haben.

Nächste Schritte

Obwohl ich mit den Ergebnissen unseres Projekts zufrieden war, gab es ein paar Dinge, die umgesetzt werden könnten, um es besser zu machen. Zunächst einmal kann die Scanauflösung im aktuellen Zustand nur durch Ändern der hartcodierten Auflösungsvariablen in unserem Code geändert werden. Um das Projekt besser einzubetten, könnte ein Auflösungspotentiometer eingebaut werden, damit der Benutzer die Auflösung ändern kann, ohne einen Monitor und eine Tastatur an den Scanner anschließen zu müssen. Außerdem erstellt der Scanner Bilder, die manchmal gezackt aussehen können. Um dies zu beheben, könnten Netzglättungstechniken implementiert werden, um Unregelmäßigkeiten und raue Ecken zu glätten. Schließlich habe ich festgestellt, dass Pixelkoordinaten nicht gut in die reale Welt skalieren. Die von mir erstellten Netze waren 6 bis 7 Mal größer als das eigentliche Objekt. In Zukunft wäre es von Vorteil, Netze so zu skalieren, dass sie der tatsächlichen Größe des Objekts genauer entsprechen.

Schritt 9: Ressourcen

Ich habe den Code, STL-Dateien zum Drucken und DXF-Dateien zum Schneiden für das gesamte Projekt eingefügt.

Raspberry Pi-Wettbewerb 2020
Raspberry Pi-Wettbewerb 2020
Raspberry Pi-Wettbewerb 2020
Raspberry Pi-Wettbewerb 2020

Erster Preis beim Raspberry Pi Contest 2020

Empfohlen: