Inhaltsverzeichnis:
- Lieferungen
- Schritt 1: Wählen Sie einen Drehgeber
- Schritt 2: Fügen Sie eine Riemenscheibe und eine Umlenkrolle hinzu
- Schritt 3: Codierung
- Schritt 4: Verkabelung
- Schritt 5: Drucken Sie die Teile aus
Video: Filamentzähler für intelligenten 3D-Drucker - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:16
Warum sich die Mühe machen, Filament zu zählen? Ein paar Gründe:
Erfolgreiche Drucke erfordern einen richtig kalibrierten Extruder: Wenn der gcode dem Extruder sagt, dass er das Filament um 2 mm bewegen soll, muss er sich genau 2 mm bewegen. Schlimme Dinge passieren, wenn es über- oder unterextrudiert wird. Ein gut kalibrierter Zähler kann einen Extruder ehrlich halten
Slicer schätzen, wie viel Filament insgesamt ein bestimmter Druck benötigt (sowohl in Länge als auch Gewicht), und ich möchte diese Werte überprüfen
Die Messung der Filamentbewegung lässt mich auch wissen, wann der Druck begonnen hat und wann er aufgehört hat
Ich brauchte etwas, um den Platz abzudecken, der durch das Entfernen des hässlichen Riesenlogos auf der Vorderseite meines Druckers übrig blieb
Es ist cool
Ich wurde von diesem anweisbaren inspiriert, das eine alte PS/2-Maus als Filamentzähler für einen 3D-Drucker umfunktionierte. Es fügte nicht nur einem 3D-Drucker eine nützliche Funktion hinzu, sondern diente auch einem alten Gerät, das sonst auf einer Mülldeponie gelandet wäre. Aber dieses Projekt wurde um die PS/2-Schnittstelle der Maus herum gebaut, die unnötig umständlich erschien. Also habe ich dies zum Anlass genommen, das einzig wesentliche Bauteil kennenzulernen: den Drehgeber.
Lieferungen
Drehcodierer
ESP32-basiertes Entwicklungsboard
I2C-OLED-Display (zweifarbige Einheit sieht besonders cool aus)
Winziger Taster
Entfettetes 608ZZ-Lager
Zwei O-Ringe aus dem Baumarkt (~33mm ID x ~1,5mm Profildurchmesser - siehe Kommentare)
Zwei 2,5 mm Blechschrauben für das Gehäuse
Zwei 4-mm-Schrauben, Muttern und Unterlegscheiben zur Befestigung der Halterung an Ihrem Drucker
Bündel Drähte
3D-Drucker und etwas Filament
Schritt 1: Wählen Sie einen Drehgeber
Drehgeber übersetzen Drehbewegungen in elektrische Impulse. Alle Mäuse der alten Schule verwendeten sie, um die Bewegung des rollenden Balls zu messen, und modernere (ha ha) optische Mäuse verwendeten sie immer noch für das Scrollrad, das ich herumgelegt und für erste Experimente verwendet hatte. Leider bot meiner keine offensichtlichen Mount-Punkte und seine Auflösung war schlecht.
Wenn es sich lohnt, es zu tun, lohnt es sich, es zu übertreiben. Also kaufte ich einen großen, freundlichen Encoder mit 360 Impulsen pro Umdrehung und baute mein Projekt darauf auf. Ich wählte einen optischen Inkremental-Drehgeber von Signswise, Typ LPD3806-360BM-G5-24C. Aber jeder anständige Encoder wird es tun.
Schritt 2: Fügen Sie eine Riemenscheibe und eine Umlenkrolle hinzu
Die lineare Bewegung des Filaments wird durch eine Riemenscheibe in eine Drehbewegung des Encoders übersetzt. Und das Filament wird durch eine Spannrolle gegen die Riemenscheibe gehalten.
Die Riemenscheibe hat zwei Rillen, die jeweils einen gedehnten O-Ring halten, damit kein Verrutschen entsteht.
Die Leitrolle hat eine einzelne V-Nut, um das Filament auf der Encoder-Riemenscheibe zentriert zu halten. Es sitzt auf einem 608ZZ-Lager, das ich herumgelegt hatte, und das auf einer Spiralfeder montiert ist, die direkt im Hauptkörper meines Projekts gedruckt ist. (STL-Dateien unten angehängt.)
Dies erforderte einige Versuche, um richtig zu liegen, aber mein Design sollte eine Vielzahl von Winkeln und Spulenradien berücksichtigen, damit sich das Filament von jedem Teil der Spule vom Anfang bis zum Ende eines Drucks abwickeln kann. Und die bedruckte Feder erleichtert das Ein- oder Ausschieben des Filaments beim Spulenwechsel.
Schritt 3: Codierung
Um nur das Filament zu zählen, reicht jedes Entwicklungsboard mit zwei digitalen Eingängen. Der von mir gewählte Encoder hat vier Pins: Vcc, Masse und zwei Encoder-Pins. Hier ist eine wirklich schöne Beschreibung, die erklärt, wie Drehgeber funktionieren und wie man sie mit Arduino verbindet. (Auch: dieser Artikel über 3-Pin-Encoder.)
Die grundlegende Zählung ist einfach: zwei Eingänge – so eingestellt, dass sie intern hochgezogen werden, damit externe Widerstände nicht an Vcc gelötet werden müssen – und ein Interrupt. Ich habe auch eine Null-/Reset-Taste hinzugefügt, die eine weitere Eingabe und Unterbrechung erfordert:
void setUpPins() {
pinMode (ENCODER_PIN_1, INPUT_PULLUP); pinMode (ENCODER_PIN_2, INPUT_PULLUP); pinMode (ZERO_BTN_PIN, INPUT_PULLUP); attachInterrupt(ENCODER_PIN_1, encoderPinDidChange, CHANGE); attachInterrupt(ZERO_BTN_PIN, zeroButtonPressed, CHANGE); aufrechtzuerhalten. Void IRAM_ATTR EncoderPinDidChange () { if (digitalRead (ENCODER_PIN_1) == digitalRead (ENCODER_PIN_2)) { Position + = 1; aufrechtzuerhalten. Sonst { Position -= 1; } } void IRAM_ATTR zeroButtonPressed() {//handle null & reset }
Aber ich wollte mehr als nur eine dumme Theke. Mit einem ESP32 (oder ESP8266) und seinem eingebauten WiFi kann ich tatsächlich etwas mit den Daten machen, die ich sammle. Mit einem einfachen Timeout-Code (unten erklärt) kann ich bestimmen, wann der Druck beginnt und endet, und diese Ereignisse als Benachrichtigungen an mein Telefon senden. In Zukunft kann ich einen Rundlaufsensor hinzufügen und mich selbst benachrichtigen (und meinen Drucker anhalten), wenn meine Aufmerksamkeit erforderlich ist.
Der vollständige Code ist auf Github.
Ein paar Anmerkungen zum Code:
Um dies an Ihren Build anzupassen, benötigen Sie nur die Auflösung (encoderPPR) - in Impulsen pro Umdrehung, die normalerweise das Doppelte der angegebenen Spezifikation ist - und den Radius der Riemenscheibe (wheelRadius). Diese Werte sowie die ssid und das Passwort Ihres WLANs und die spezifischen Pins, die mit der Taste, dem Encoder und dem OLED-Bildschirm verbunden sind, werden alle in config.h gespeichert
Die Null-Taste dient auch als Reset - halten Sie sie gedrückt, um das Board neu zu starten, was für das Debugging nützlich ist
Interrupts sind mächtig – manchmal zu mächtig. Ein einziges Antippen der Null-Schaltfläche könnte dazu führen, dass die zeroButtonPressed()-Funktion 10-20 Mal aufgerufen wird, also habe ich etwas Entprellungslogik hinzugefügt. Mein optischer Encoder brauchte es nicht, aber YMMV
Während sich die Interrupts asynchron um die Eingaben kümmern, übernimmt die loop()-Routine die Buchhaltung. Der EncoderState – eine Aufzählung, die vorgeschoben, zurückgezogen oder gestoppt werden kann – wird mit der Positionsänderung des Encoders aktualisiert. Timeouts bestimmen dann, wann der Drucker mit dem Drucken begonnen und beendet hat. Der knifflige Teil ist jedoch, dass 3D-Drucker häufig Bewegungen starten und stoppen. Daher war es am besten, das Ereignis "Drucken abgeschlossen" zu definieren, das für mindestens 5 Sekunden kontinuierlich gestoppt wurde. Jede Bewegung löst nur dann einen zweiten Timer aus, der das Ereignis "Drucken gestartet" definiert, wenn in einem Zeitrahmen von 15 Sekunden kein Ereignis "Drucken abgeschlossen" auftritt. In der Praxis funktioniert das wunderbar
Damit der Hauptcode loop() unbelastet ausgeführt werden kann, läuft der Debounce-Code in einer RTOS-Aufgabenschleife. Ebenso sind HTTP-Anfragen zum Senden von Benachrichtigungen synchron und daher im Hintergrund. Somit laufen Animationen flüssig und das Zählen hört nie auf
In meinem Beispiel gibt es eine Reihe von zusätzlichem Code, um (A) eine Netzwerkverbindung mit WiFi und mDNS herzustellen und aufrechtzuerhalten, (B) die Zeit von einem NTC-Server abzurufen, damit ich meine Start- und Endbenachrichtigungen mit einem Zeitstempel versehen und eine flotte Uhr anzeigen kann auf meinem OLED und (C) handhabe OTA-Updates, damit ich mein Board für Code-Updates nicht physisch mit meinem Mac verbinden muss. Im Moment befindet sich alles in einer monolithischen C++-Datei, nur weil ich mir nicht die Zeit genommen habe, es besser zu organisieren
Ich habe die wunderbare (und kostenlose) Prowl iOS-App verwendet, um Push-Benachrichtigungen mit nichts anderem als HTTP-Get-Methoden an mein Telefon zu senden
Um den Code zu entwickeln und das Board zu flashen, habe ich das spektakuläre PlatformIO verwendet, das auf Visual Studio Code läuft, beide kostenlos
Für mein Projekt habe ich diese Bibliotheken verwendet: u8g2 von Oliver, elapsedMillis von Paul Stoffregen und HTTPClient von Markus Sattler, der mit der Espressif ESP32-Plattform geliefert wird. Alles andere kommt entweder mit der Arduino-Bibliothek oder der ESP32-Plattform in PlatformIO
Schließlich habe ich sechs einfache Bitmaps meiner Hauptrolle in verschiedenen Winkeln erstellt, damit ich eine nette kleine Spinnrad-Animation auf dem OLED hinter der Theke zeigen konnte. Es bewegt sich mit dem Encoder in die entsprechende Richtung, wenn auch viel schneller, um einen dramatischeren Effekt zu erzielen
Schritt 4: Verkabelung
Ich habe dies so entworfen, dass die Verkabelung ganz einfach ist, hauptsächlich, damit mein Gehäuse klein sein kann, aber auch so, dass das Debuggen unkompliziert ist. Beachten Sie die beengten Verhältnisse in meiner kleinen Kiste.:)
Die erste Voraussetzung war die 5V Versorgungsspannung meines Drehgebers. Von den verschiedenen ESP32-Entwicklungsboards, die ich in meinem Stash hatte, lieferten nur wenige echte 5V am Vcc-Pin, wenn sie über USB betrieben wurden. (Die anderen haben 4,5-4,8 V gemessen, was, falls Ihre Mathematik schlecht ist, niedriger als 5 V ist.) Das Board, das ich verwendet habe, war ein Wemos Lolin32.
Als nächstes kommen die beiden Drehgeber-Signalpins. Da ich Interrupts verwende, ist das Hauptanliegen, dass die von mir verwendeten Pins nichts stören. Die ESP32-Dokumentation besagt, dass ADC2 nicht gleichzeitig mit WiFi verwendet werden kann, was leider bedeutet, dass ich keinen der ADC2-GPIO-Pins verwenden kann: 0, 2, 4, 12, 13, 14, 15, 25, 26 oder 27. Ich habe 16 und 17 gewählt.
Profi-Tipp: Wenn Ihr Encoder nach dem Zusammensetzen scheinbar rückwärts zählt, können Sie einfach die beiden Pinbelegungen in config.h tauschen.
Schließlich verbinden Sie das Erdungskabel des Drehgebers mit… Trommelwirbel… dem Erdungsstift.
Als nächstes wird der Null- / Reset-Taster zwischen Masse und einem anderen freien Pin angeschlossen (ich habe GPIO 18 gewählt).
Die Taste, die ich verwendet habe, war ein winziger Momentschalter, den ich von der oben genannten Computermaus gerettet habe, aber jede Taste, die Sie herumliegen, ist ausreichend. Sie können es in einer kleinen Halterung sehen, die ich direkt über dem Brett dafür gemacht habe.
Schließlich benötigt das OLED, wenn es nicht bereits mit Ihrem Board verbunden ist, nur vier Pins: 3V3, Masse, i2c-Takt und i2c-Daten. Auf meinem Entwicklungsboard sind Uhr und Daten 22 bzw. 21.
Schritt 5: Drucken Sie die Teile aus
Ich habe sieben Teile für diesen Build entworfen:
Die Riemenscheibe, die direkt auf der Welle des Drehgebers montiert ist
Die Leitrolle, die über ein 608ZZ-Lager passt (die Schilde entfernen und mit WD40 entfetten, damit sie sich frei dreht)
Der Halter, an dem die beiden Räder und der Encoder montiert sind - beachten Sie die Spiralfeder für die Leitrolle
Eine Halterung zur Stabilisierung des Halters. Das Foto in diesem Schritt zeigt, wie die Halterung am Halter befestigt wird
Das Gehäuse (unten) zum Halten meiner ESP32-Entwicklungsplatine, mit einem Platz für das USB-Kabel an der Seite und einem anderen oben für den Stecker, den ich meinen Encoderkabeln hinzugefügt habe. Dieses ist so konzipiert, dass es zum Wemos Lolin32 passt, daher müssen Sie dieses Design möglicherweise ein wenig modifizieren, um es auf ein anderes Board zu passen
Das Gehäuse (oben) zum Halten des OLED-Bildschirms, eine weitere Spirale für die Null- / Reset-Taste
Ein Knopfhalter, der für den winzigen Schalter, den ich hatte, angepasst wurde, um zwischen den beiden Regalen im unteren Gehäuse zu ruhen. Ich habe einen Lötkolben verwendet, um den Schalter an den Halter zu "kleben"; siehe den vorherigen Schritt für ein Foto
Alles ist darauf ausgelegt, ohne Stützen gedruckt zu werden. Normales PLA in deiner Wunschfarbe ist alles was du brauchst.
Alles zusammenfügen, an Ihren Drucker anschließen (hier ist vielleicht etwas Kreativität gefragt), und schon kann es losgehen.
Empfohlen:
Arduino Auto-Rückfahrwarnsystem - Schritt für Schritt: 4 Schritte
Arduino Auto-Rückfahrwarnsystem | Schritt für Schritt: In diesem Projekt entwerfe ich eine einfache Arduino-Auto-Rückwärts-Parksensorschaltung mit Arduino UNO und dem Ultraschallsensor HC-SR04. Dieses Arduino-basierte Car-Reverse-Warnsystem kann für eine autonome Navigation, Roboter-Ranging und andere Entfernungsr
Einen intelligenten Roboter mit Arduino bauen – wikiHow
Wie man einen intelligenten Roboter mit Arduino macht: Hallo, ich bin Arduino-Hersteller und in diesem Tutorial werde ich Ihnen zeigen, wie man einen intelligenten Roboter mit Arduino macht, wenn Ihnen mein Tutorial gefallen hat, dann überlegen Sie, meinen Youtube-Kanal namens Arduino-Hersteller zu unterstützen
Einen intelligenten DIY-Spiegel herstellen – wikiHow
Wie man einen intelligenten DIY-Spiegel herstellt: Ein "Smart Mirror" ist ein Zwei-Wege-Spiegel mit einem dahinterliegenden Display, das normalerweise verwendet wird, um nützliche Informationen wie Uhrzeit und Datum, das Wetter, Ihren Kalender und alle möglichen anderen Dinge anzuzeigen! Menschen verwenden sie für alle möglichen Zwecke
Einen intelligenten Blumentopf herstellen – wikiHow
Wie man einen intelligenten Blumentopf herstellt: Wissen Sie, was die Menschen dazu motiviert hat, die allererste Stadt zu erschaffen? Es ist Landwirtschaft. In diesem Projekt werden wir einen 3D-gedruckten Blumentopf herstellen, der eine kleine bis mittelgroße Pflanze mit einer LED-Anzeige an der Außenseite beherbergen könnte, um die Feuchtigkeit der S
Einen intelligenten Koffer mit einem Raspberry Pi herstellen – wikiHow
So bauen Sie einen intelligenten Koffer mit einem Raspberry Pi: In diesem Tutorial erkläre ich, wie Sie mit einem Raspberry Pi einen intelligenten Koffer herstellen können. Wenn Sie fertig sind, können Sie Ihren Koffer weltweit verfolgen und wiegen es ohne die Notwendigkeit einer Waage.Lass uns loslegen