Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektesose24:int_regal:projektdoku

Dies ist eine alte Version des Dokuments!




Projektdokumentation


Einleitung

Kennst du das, du findest mal wieder ein Buch in deinem Bücherregal nicht? Dann haben wir jetzt die Lösung für dich: Das intelligente Bücherregal.
Der Roboter hilft dabei, Bücher im eigenen Regal leicht zu finden. Du suchst das Buch in einer Datenbank und der Roboter zeigt dir visuell, wo es steht, indem eine LED an der Stelle des Buches aufleuchtet und das Buch leicht herausgeschoben wird.

Überblick über das Gesamtsystem

Um die Suche nach einem Buch zu starten wird das Programm auf dem Raspberry Pi gestartet. Daraufhin kann man über die URL, welche im Terminal angezeigt wird das User-Interface öffnen. Wenn dort nach einem bestimmten Buch gesucht wird, wird die Position dieses Buches aus der Datenbank an die LED-Funktion, sowie an die Motor-Funktion übermittelt. Diese Funktionen sorgen dafür, dass der LED-Strip an der entsprechenden Stelle aufleuchtet und der Schlitten auf der Schiene an die entsprechende Position fährt (Schienenkonstruktion). Der Schlitten wird mithilfe eines Stepper-Motors gesteuert. Anschließend fährt der Scherenmechanismus aus, um das gesuchte Buch nach vorne zu schieben. Dadurch wird das Buch erkenntlich gemacht.

Beschreibung der einzelnen Systembestandteile

User-Interface

Zu Beginn haben wir das User-Interface als Terminal-Anwendung implementiert, aber schlussendlich haben wir uns dazu entschieden es als Webapp zu programmieren, da wir dadurch die Möglichkeit hatten auch eine grafische und damit ansprechendere und leichter bedienbare Oberfläche zu designen. Außerdem bietet eine Webapp deutlich mehr Möglichkeiten, wie beispielsweise die Einbindung einer API (mehr dazu weiter unten). Diese Webapp haben wir mit dem Webframework „Flask“ programmiert, wodurch die App auf dem Raspberry Pi läuft und im lokalen Netzwerk erreichbar ist.

Wenn die URL der Webapp geöffnet wird, wird als Erstes die Startseite angezeigt, auf der der Benutzer wählen kann, ob er ein neues Buch hinzufügen, nach einem Buch suchen oder sich alle Bücher anzeigen lassen will.

Abbildung 1: Webapp Startseite

Wählt er eine der Optionen aus, wird eine URL aufgerufen, die die entsprechende Funktion der Anwendung aufruft. Jede dieser Optionen führt zu einer spezifischen Webroute innerhalb der Flask-Anwendung, welche dafür sorgt, dass ein passendes HTML-Template gerendert wird. Die HTML Dateien werden mit CSS gestyled.

# Route for the homepage
@app.route('/')
def index():
    clearLEDs_async()  # Turn off all LEDs when the homepage is accessed
    return render_template('index.html')


Der Button „Neues Buch hinzuzufügen“ führt zu der Route „/add_book“. Diese Seite bietet ein Formular, in das der Benutzer ISBN, Titel, Autor, Erscheinungsjahr, Genre, Regalreihe, Position und Breite des Buches eingeben kann.

Abbildung 2: Webapp-Seite um neues Buch hinzuzufügen

Nachdem die Daten eingetragen und bestätigt wurden, prüft die Anwendung, ob das Buch bereits in der Datenbank vorhanden ist. Wenn dies der Fall ist, wird der Benutzer mit einer Fehlermeldung benachrichtigt. Andernfalls wird das Buch zur Datenbank hinzugefügt, und der Benutzer wird zur Übersicht weitergeleitet.

Um das Eintragen neuer Bücher möglichst nutzerfreundlich zu machen, haben wir die Seite mit der Open Library Books API verbunden, über die die Buchinformationen anhand der ISBN abfragt werden (https://openlibrary.org/dev/docs/api/books). Open Library ist ein Projekt, welches eine offene Datenbank mit Buchinformationen zur Verfügung stellt. Laut eigenen Angaben umfasst ihre Datenbank ca. 20 Millionen frei zugängliche Datensätze. Außerdem stellt Open Library eine API zur Verfügung, welche Buchdaten suchen und abrufen kann. Wenn der Nutzer eine ISBN eingibt wird eine Anfrage mit dieser ISBN an die API gestellt. Ist das Buch in der Datenbank vorhanden, werden der Titel, der Autor, sowie das Erscheinungsjahr an das Programm zurückgegeben und in das Formular eingetragen.


Wählt der Nutzer „Nach Buch suchen“ aus, führt das zu der Route „/search_book“, welche wiederrum das HTML-Template rendert. Auf dieser Seite kann der Nutzer ein schon existierendes Buch in der Datenbank aufgrund des Titels, des Autors, der ISBN und/oder des Genres suchen.

Abbildung 3: Webapp-Seite um ein Buch zu suchen

Über die Route wird eine GET-Anfrage gesendet und die Datenbank wird nach dem entsprechenden Kriterium durchsucht. Ist die Suche erfolgreich wird der Nutzer auf die „show_books“ Seite weitergeleitet, auf welcher ihm die Ergebnisse angezeigt werden. Außerdem wird die LED-Funktion, sowie die Motor-Funktion mit der entsprechenden Position des Buches (bzw. den Positionen der Bücher) aufgerufen. Im Falle der LED-Funktion steht auch die Breite im Übergabe Argument. Wird kein passendes Buch in der Datenbank gefunden, erhält der Nutzer eine Fehlermeldung.


Der Button „Alle Bücher anzeigen“ auf der Startseite führt zu der Webroute „/show_books“. Diese Seite listet alle in der Datenbank gespeicherten Bücher auf. Die Liste kann nach verschiedenen Kriterien wie Titel, Autor, Erscheinungsjahr oder der Position im Regal sortiert werden. Dies ermöglicht es dem Benutzer, sich einen schnellen Überblick über die Bibliothek zu verschaffen. Auf dieser Seite hat man auch die Möglichkeit die einzelnen Bücher zu bearbeiten oder ein Buch zu löschen. Der jeweilige Button führt wieder zu einer eigenen Route, in der ein SQLite Befehl ausgeführt wird, um den Eintrag in der Datenbank zu aktualisieren oder zu löschen.

Abbildung 4: Webapp Buchübersicht


Datenbank

Um die Bücher, welche in unserem Regal stehen zu speichern, verwenden wir SQLite. Dafür wird zu Beginn des Programms eine lokale Datenbankdatei „books.db“ auf dem Raspberry Pi erstellt, sofern diese noch nicht existiert. In dieser Datenbank werden verschiedene Informationen über ein Buch gespeichert, wie der Titel, der Autor, die ISBN, usw.

Abbildung 5: Einträge in der Datenbank

Wenn nun über das User-Interface ein neues Buch hinzugefügt wird, werden die Informationen aus der Formular-Eingabe mithilfe des „INSERT INTO“ Befehls in der Datenbank gespeichert. Wenn nach einem bestimmten Buch (oder mehreren) gesucht wird, wird die gesuchte Information aus der Formular-Eingabe ausgelesen und in der Datenbank wird mithilfe des „WHERE“ Befehls diese Suche durchgeführt. Mithilfe des „LIKE“ Befehls, beispielsweise bei der Suche des Titels, können wir sicherstellen, dass auch Einträge gefunden werden, die nur einen Teil des Suchbegriffs enthalten. SQLite hilft mit dem „ORDER BY“ Befehl auch dabei die Einträge der Datenbank nach bestimmten Kriterien (wie z.B. der Position im Regal) zu sortieren. Außerdem können mit dem „DELETE FROM“ Befehl Bücher wieder aus der Datenbank gelöscht und mit dem „UPDATE“ Befehl können die Einträge verändert werden.


LED-Strip

Am Regalbrett, auf dem die Bücher stehen, ist vor den Büchern ein LED-Strip befestigt. Damit auch alle Bücher einzeln gesucht werden können, war es wichtig einen individually adressable LED-Strip zu verwenden. Dieser ist mit einem GND-, einem 5V- und einem Data-Anschluss direkt an den Raspberry Pi angeschlossen. Zur Ansteuerung des Strips verwenden wir die neopixel Bibliothek. Wenn nach einem Buch gesucht wird, wird vom Programm app.py sowohl die Position (in cm), als auch die Breite des Buches (in cm) an die Funktion übergeben. Diese Daten werden als Liste übergeben, da auch nach mehreren Büchern gleichzeitig gesucht werden kann.

# Calling the LED function with positions and widths of the books found
positions = np.array(list([book[6]] for book in books))  # Each position as a list
widths = np.array(list([book[7]] for book in books))     # Each width as a list
flashLED_async(positions, widths)

Um den LED-Strip nun an der richtigen Stelle aufleuchten zu lassen, war die Herausforderung die übergebene Position in den LED-Index umzurechen. Dies geschieht, indem die Position des Buches durch 0,625 geteilt wird. Dieser Faktor ergibt sich, wenn die Gesamtlänge des Strips (500cm) durch die Gesamtanzahl der LEDs geteilt wird (800). Der Index muss noch in einen Integer umgewandelt werden, da es nur ganze Inidizes gibt. Wenn nun die Position (beispielsweise 14cm) durch 0,625 geteilt wird ergibt sich ein Index von 22. In unserem Fall wird vor dieser Rechnung noch 26,5 auf die Position aufaddiert, da die Buchreihe erst nach 26,5 cm des Led-Strips anfängt. Damit nun nicht nur eine LED, sondern die gesamte Breite des Buches aufleuchtet, wird ein zweiter Index berechnet, welcher sich ergibt, indem zu der Position die Breite des Buches addiert wird. Anschließend werden mithilfe einer for-Schleife alle LEDs zwischen dem ersten und zweiten Index zum Leuchten gebracht.

for position, width in zip(positions, widths):
        # Calculate the start and end indices for the LEDs to flash
        index1 = (position[0]+26.5)/0.625   # Our bookrow beginns at 26.5 cm of the LED strip
        index1 = int(index1)
        index2 = (position[0]+26.5+width[0])/0.625
        index2 = int(index2)

Damit im Fall von mehreren gesuchten Büchern nicht jedes Buch in derselben Farbe aufleuchtet, haben wir am Anfang der LED-Datei eine Liste mit verschiedenen Farben definiert. Nach der Berechnung der Indizes wird eine for-Schleife durchlaufen, welche den verschiedenen LED-Abschnitten verschiedene Farben zuweist.

# Define a list of colors to use for the LEDs
COLORS = [(255, 0, 0), (255, 0, 50), (255, 0, 255), (128, 0, 255), (0, 0, 255)]
...
# Set the color for each range of LEDs
for i in range(index1, index2):
    pixels[i] = COLORS[color_idx]
color_idx += 1
if color_idx == len(COLORS):
    color_idx = 0

In unserem Fall benötigen wir nur einen LED-Strip, da wir nur eine Regalreihe haben. Möchte man Bücher in mehreren Regalreihen suchen können, kann man mehrere LED-Strips an den Raspberry Pi anschließen. Durch eine entsprechende Anpassung im Code könnte dann der jeweilige LED-Strip für die betreffende Reihe aktiviert werden, wenn nach einem Buch in dieser Reihe gesucht wird.

Außerdem war es wichtig, eine clearLEDs-Funktion zu implementieren, welche alle LEDs des Strips ausschalten kann. Diese wird aufgerufen, wenn im User-Interface von der „Gesuchte-Bücher“-Seite zu einer anderen Seite gewechselt wird.

# Turn off all the LEDs in the strip.
def clearLEDs():
    for i in range(len(pixels)):
        pixels[i] = (0, 0, 0)
        pixels.show()


Damit die Ansteuerung der LEDs den Programmablauf nicht blockiert, verwenden wir Threading. Dazu haben wir die Funktionen flashLED und clearLEDs als asynchrone Versionen implementiert. Diese asynchronen Funktionen laufen in separaten Threads, sodass das Hauptprogramm nicht blockiert wird und weiterhin auf Benutzerinteraktionen reagieren kann, während die LEDs gesteuert werden.


Motorsteuerung

Für die Motoren des Scherenmechanismus’ und des Schienenmechanismus’ verwenden wir zwei DRV8825 Stepper Treiber. Zur Versorgung nutzen wir eine 24V 2A Spannungsquelle. Beide Stepper Treiber bekommen jeweils die selben Signale vom Raspberry Pi. Damit die Motoren sich dennoch individuell bewegen können, wird immer maximal einer der beiden Treiber vom Pi aktiviert.

Abbildung 6: Motorsteuerung

Zur Steuerung des Schlittens haben wir die Funktion move(positions) geschrieben, welche eine Liste an Positionen übergeben bekommt. Diese Positionen werden berechnet als: Position + 1/2*Breite, um immer möglichst die mitte des Buches zu treffen. Die Ansteuerung der Stepper Treiber erfolgt durch das setzen des Richtungs-Pins auf HIGH oder LOW und anschließend wiederholtes ein und ausschalten des Step-Pins. Die Geschwindigkeit des Motors wird dabei durch die Wartezeit zwischen den Impulsen gesteuert.
Vor jedem Step signal, wird geprüft, ob der Limit-Switch in Fahrtrichtung des Schlittens gedrückt wurde. Ist dies der Fall, so wird die move() Funktion vorzeitig abgebrochen und die Variable, welche die Motorposition speichert, korrigiert.
Korrigieren bedeutet, dass die Variable motor_position entweder auf 0, oder auf 21304 gesetzt wird, jenachdem, ob der linke oder rechte Taster gedrückt wurde.
21304 ist hierbei die Anzahl an Schritten, die der Motor machen muss, um von dem einem Taster zum anderen Taster zu kommen.

Da der Schlitten sich recht schnell bewegen können soll, wird der Schlitten auf seinem Weg Be- und Entschleunigt. Hierzu wird die Wartezeit zur hälfte der zurückgelegten Strecke hin kürzer, und zum ende hin wieder länger. Die Formel, die wir hierfür verwenden ist:

sleeptime = max(0.000447, abs(sqrt(x) - sqrt(x+1))/speed) 

Wurzel(x) - Wurzel(x+1) ist eine Approximation der Ableitung der Wurzel funktion. Da diese anfangs einen großen anstieg besitzt, welcher mit der Zeit abflacht, haben wir anfangs eine längere Wartezeit, welche immer kleiner wird.
x ist hierbei entweder die Anzahl der zurückgelegten schritte (Zum beschleunigen) oder die länge der gesamten zurückzulegenden Strecke (in Motor-Schritten) minus die Anzahl der bisherigen Schritte. (Zum entschleunigen)
x zählt also bis zur hälfte der Strecke linear hoch, und ab der hälfte wieder linear runter.
max(0.000447, …) sorgt dafür, dass der Schlitten eine bestimmte Geschwindigkeit nicht überschreitet, da es ansonsten passieren kann, dass Schritte des Motors übersprungen werden. Der Wert 0.000447 ist durchs ausprobieren verschiedener Werte entstanden. Bei Wartezeiten unterhalb von diesem Wert, haben wir ungleichmäßiges Fahrverhalten des Schlittens und einen Genauigkeitsverlust feststellen können.

Wenn ein Buch gesucht wird, wird die Position in cm aus der Datenbank entnommen, durch multiplizieren mit einer Konstante in Motor Schritte umgerechnet, und an die Move funktion übergeben, welche dann den abstand der aktuellen Schlittenposition (in Motorschritten) von der Buchposition subtrahiert. Die Richtung der Bewegung wird dann durch das Vorzeichen bestimmt, der Abstand durch den Betrag der Berechnung.

Am Ende der move() Funktion, wird die push_book() Funktion aufgerufen. Diese deaktiviert den Stepper für die Schiene, und aktiviert den Stepper für den Schiebemechanismus. Anschließend wird der Schiebemechanismus eingefahren, ausgefahren und wieder eingefahren.
Das Einfahren wird jeweils durch das drücken des Limit-Switches gestoppt. Zum Ausfahren macht der Motor 1280 Schritte. Hier wäre es schwer gewesen einen Limit Switch zu verwednen, und da wir die Ausgangsposition des Motors kennen, und durch das Einfahren am Anfang sogar noch sicher stellen, ist hier auch kein weiterer Limit-Switch notwendig.

Scherengittermechanismus

Über einen Scherengittermechanismus wird das Buch herausgeschoben. Eine Scherengitterkonstruktion besteht aus mehreren Hebelarmen, die jeweils über ein zentrales Gelenk miteinander verbunden sind. Durch Krafteinwirkung an einem Ende der Hebelarme entsteht eine gleichmäßige Bewegung entlang der Gelenkpunkte, wodurch sich die Konstruktion in horizontaler oder vertikaler Richtung ausstreckt oder zusammenzieht. Durch die horizontale Längenveränderung kann man dann ein Buch herausschieben. Wir haben die Konstruktion mit Legotechnik umgesetzt. Die Hebelarme werden über die Rotation von zwei Zahnrädern nach oben und unten gedrückt, wodurch sich die Konstruktion zusammenzieht oder ausstreckt.

Abbildung 7: Scherengitterkonstruktion

Die Rotation der Zahnräder wird von einem Motor erzeugt, der über eine 3D-gedruckte Halterung an der Scherengitterkonstruktion befestigt ist. An den vorderen Enden der Hebelarme ist ein Schwamm angebracht, um eine größere Auflagefläche für die Kraftübertragung von den Hebelarmen auf das Buch zu schaffen und es gleichzeitig vor Beschädigungen zu schützen.

robotik_schiebemechanismus_neu3.jpg
Abbildung 8: Schiebemechanismus

Die Scherengitterkonstruktion ist auf einem Schlitten befestigt.

Schienenkonstruktion

Bei der Schienenkonstruktion wurden wir von dem großen 3D-Drucker im Labor inspiriert, der eine Schienen-Schlitten-Konstruktion zum Fahren an eine bestimmte Position nutzt. Bei der Schiene handelt es sich um eine V-Slot-Schiene auf der ein Schlitten mit entsprechenden V-Slot-Rädern fahren kann. Da der Schlitten nicht optimal auf der Schiene saß und wir einen größeren Abstand zwischen der Schiene und der Scherengitterkonstruktion benötigten, haben wir die originalen Achsen entfernt und durch Gewindeschrauben mit Muttern ersetzt. Diese wurden in alternative Löcher im Schlitten eingesetzt, um den Abstand zwischen den Rädern sowie zwischen der Schlittenplatte und der Schiene anzupassen. Dadurch konnte der Schlitten optimal auf der Schiene laufen.

Die Schiene wurde auf die Länge eines unserer Bücherregale zugeschnitten, und der verbleibende Teil der Schiene mithilfe von Winkeln erhöht auf einer Grundplatte befestigt, so dass der Schlitten seitlich angebracht werden konnte und der Schiebemechanismus relativ mittig am Buch angreifen kann.

Abbildung 9: Schienenkonstruktion

Um sicherzustellen, dass der Schlitten nicht über die Schiene hinausfährt, haben wir an der Grundplatte Endschalter (Limit Switches) angebracht. Doch wie fährt der Schlitten überhaupt auf der Schiene an die Stelle des gesuchten Buches? Dafür ist der Schlitten an zwei Stellen mit einem GT2-Zahnriemenband verbunden. Das GT2-Zahnriemenband ist an dem einen Ende der Schiene mithilfe einer GT2-Zahnriemenscheibe mit einem Motor verknüpft, der über Rotation des Zahnriemenbands den Schlitten nach links und rechts bewegen kann. Die Position des gesuchten Buches wird der Motorfunktion übermittelt. Die Funktion berechnet dann, wie weit und in welche Richtung der Motor rotieren muss, um den Schlitten präzise zur richtigen Position zu bringen, ausgehend von der aktuellen Position des Schlittens. Sobald der Schlitten die Zielposition erreicht hat, wird die Steuerung des Motors der Scherengitterkonstruktion aktiviert, wodurch die Hebelarme ausgefahren werden und das Buch herausgeschoben wird.

Abbildung 10: Roboter in Aktion

Bedienungsanleitung für die Roboter-Bewertung

1. Schließe den Raspberry Pi über ein USB-C Kabel an Strom an.

2. Verbinde den Pi über ein LAN Kabel mit einem Computer

3. Öffne am Computer die Eingabeaufforderung (CMD)

4. Führe den folgenden Befehl aus:

ssh pi@192.168.0.42

(Dieser Schritt kann ein paar Minuten dauern. Der Pi braucht sehr lange, bis er über das LAN kabel erreichbar ist. Den Befehl einfach so oft ausführen, bis kein Timeout error mehr auftaucht.)

5. Das ssh Passwort lautet:

!EcBR!


6. Zum starten des Roboters führe die folgenden Befehle aus:

sudo cd /Code/Buecherregal
sudo myenv/bin/python3 app.py


7. Nun kann auf das User Interface zugegriffen werden: http://127.0.0.1
(Achtung: Nur der Computer, der mit dem Pi verbunden ist, hat zugriff auf diese Seite)

Ergebnis

Von unseren Zielen aus der Planung konnten wir viele erfolgreich umsetzen: Über eine Benutzeroberfläche ist es möglich, Bücher in einer Datenbank zu suchen, hinzuzufügen und zu löschen. Die Datenbank kennt den Standort jedes Buches. Bei einer erfolgreichen Suche leuchtet der LED-Strip an der Stelle des Buches auf, und das Buch wird herausgeschoben. Zudem kann man nicht nur nach dem Titel, sondern auch nach Autor, Genre oder ISBN suchen. Der LED-Strip kann außerdem als Raumbeleuchtung verwendet werden. Ein Ziel, das wir nicht erreichen konnten, war die Verknüpfung der Datenbank mit einem Scanner, der die ISBN einscannt und die Daten des Buches automatisch in die Datenbank einfügt. Die Größe der Bücher, die herausgeschoben werden können, wird jedoch wahrscheinlich immer eingeschränkt bleiben. Der Schiebemechanismus und der Schwamm haben eine bestimmte Breite, die nicht wesentlich reduziert werden kann, da dies die Auflagefläche für sehr breite Bücher verringern würde. Außerdem ist der Motor zu schwach, um besonders dicke Bücher herauszuschieben. Auch die Höhe spielt eine Rolle, da der Mechanismus idealerweise im mittleren oder unteren Bereich des Buches ansetzen sollte. Andernfalls kippt das Buch auf der rauen Oberfläche, anstatt herausgeschoben zu werden. Daher ist eine eher homogene Auswahl an Büchern erforderlich, damit das System optimal funktioniert. Die Bücher sollten eine Mindesthöhe von 120 mm haben und ungefähr 10,5 bis 50 mm breit sein.

Ausblick

In der Weiterentwicklung des intelligenten Bücherregals soll die Verknüpfung der Datenbank mit einem Scanner realisiert werden, um den Eintragungsprozess zu automatisieren und die Benutzerfreundlichkeit zu steigern. Darüber hinaus könnte ein Leihsystem integriert werden, das es ermöglicht, die Datenbanken mehrerer Bücherregale, beispielsweise von Freunden, miteinander zu verknüpfen. Wenn ein gesuchtes Buch im eigenen Regal nicht vorhanden ist, aber bei jemand anderem, könnte man eine Leihanfrage stellen. Dadurch behält man gleichzeitig den Überblick darüber, wem man seine eigenen Bücher ausgeliehen hat.

Anhang

Code und Rohdaten

Die aktuellste Version des Codes: Das Intelligente Bücherregal - Github

(Alternativ, die Version vom 30.09.2024 als .zip): Das intelligente Bücherregal main.zip

Technische Daten und Bauteile

Schaltplan

Abbildung 11: Schaltplan des gesammten Roboters

Pinbelegung am Raspberry Pi

Pin # GPIO # Pin Bezeichnung Komponente [Pin]
01 3,3V Stepper Treiber [M0, M1, RST, SLP]
02 5V LED Strip [VCC]
06 GND Limit Switch (R) [COM]
09 GND Limit Switch (Schieber) [COM]
11 00 GPIO Limit Switch (Schieber) [NO]
20 GND Limit Switch (L) [COM]
24 10 GPIO Limit Switch (R) [NO]
32 26 GPIO LED Strip [Data]
33 23 GPIO Stepper Treiber (Schieber) [Enable]
34 GND LED Strip [GND]
36 27 GPIO Stepper Treiber (Schlitten) [Enable]
37 25 GPIO Limit Switch (L) [NO]
38 28 GPIO Stepper Treiber [Direction]
39 GND Stepper Treiber [GND]
40 29 GPIO Stepper Treiber [Step]

Verwendete Bauteile / Material

Schon vorhanden? Material Preis Link bezahlt von
Raspberry Pi 4 / https://lmy.de/iFYoF X
LED-Strip 34,99€ https://lmy.de/Vcnqp F
Jumper Kabel + andere Kabel ≈ 6€ https://lmy.de/lVdxc F
Schiene 13,92€ https://lmy.de/ksCPN X
Schlitten 10,34€ https://lmy.de/fqtzl X
GT2 Zahnriemen 6,99€ https://lmy.de/rEVqM X
GT2 Riemenscheibe 1,05€ https://lmy.de/ZXVeu X
Riemenspanner 10,12€ https://lmy.de/wMXVm X
2x Crimp Klammern 1,18€ https://lmy.de/NliFP X
Winkel für V-Slot Schiene 9,49€ https://lmy.de/YJGxe X
3x Limit Switch 3,00€ L
Winkel für Limit Switch / PL
Nema 17 Stepper Motor (17HS08-1004S) $11.92 https://lmy.de/kJVtX F
Nema 17 Stepper Motor (17HS10-0704S) $10,21 https://lmy.de/ekJdZ F
Stepppermotor Treiber (DRV8825) 10,98€ https://lmy.de/XOiyF F
Motorbefestigung (3D Druck) / PL
Scheerengitterkonstruktion (Lego) / PL
Holzbrett / PL
Breadboard / PL
Bücher zum Testen / L
Kondensator (100µF 50V) 0,22€ https://lmy.de/sofcA F
Stück Schwamm + Faden / X
24 V Spannungsquelle (Stepper) / PL
5V Spannungsquelle (Pi) / F

| ✔ | DC Motor | 7,20€ | https: lmy.de/nFWIR | L | | ✔ | Stück PCB | 4,19€ | https: lmy.de/leeoO | F | | ✔ | 6 NPN-Transistoren | ? | | F | | ✔ | 6 Widerstände | ? | | F | | ✔ | 4 Dioden | ? | | F |

Fortschritt

01.07.24 - 05.07.24

  • Material gekauft und bestellt
  • coole Idee für Scheerengitterkonstruktion gebaut → aus Lego
  • SD-Karte vom Raspberry Pi kaputt → System neu aufsetzen
projektesose24/int_regal/projektdoku.1727707224.txt.gz · Zuletzt geändert: 2024/09/30 16:40 von backhaus