Inhaltsverzeichnis:

Filamentzähler für intelligenten 3D-Drucker - Gunook
Filamentzähler für intelligenten 3D-Drucker - Gunook

Video: Filamentzähler für intelligenten 3D-Drucker - Gunook

Video: Filamentzähler für intelligenten 3D-Drucker - Gunook
Video: CAD für 3D Drucker | Als ANFÄNGER einfach lernen! (Onshape Tutorial) 2024, November
Anonim
Filamentzähler für intelligenten 3D-Drucker
Filamentzähler für intelligenten 3D-Drucker

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

Wählen Sie einen Drehgeber
Wählen Sie einen Drehgeber
Wählen Sie einen Drehgeber
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

Fügen Sie eine Riemenscheibe und eine Umlenkrolle hinzu
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

Image
Image

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

Verdrahtung
Verdrahtung

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

Drucken Sie die Teile aus
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: