Inhoudsopgave:

De Robotic Filament Dispenser voor Arduino - Ajarnpa
De Robotic Filament Dispenser voor Arduino - Ajarnpa

Video: De Robotic Filament Dispenser voor Arduino - Ajarnpa

Video: De Robotic Filament Dispenser voor Arduino - Ajarnpa
Video: DIY delta robot with fancy motion controller 2024, November
Anonim
Image
Image

Waarom een gemotoriseerd gereedschap?

Het filament van 3D-printers - meestal bijna robuust - wordt door de extruder getrokken terwijl de rol dichtbij de printer wordt geplaatst, vrij om te draaien. Ik heb betekenisvolle verschillen waargenomen in het materiaalgedrag, afhankelijk van het gebruiksniveau, verwezen naar filamentrollen van 1 kg. Een nieuwe (volledige) filamentspoel stroomt bijna goed, maar de kracht die door de extruder wordt uitgeoefend, moet relatief relevant zijn: het gewicht is minimaal 1,5 kg.

De extrudermotor (meestal een Nema17 stepper) heeft voldoende vermogen om het werk te doen, maar de twee tandwielen van de extruder die het filament naar de hot-end kant duwen tijdens het werken, verzamelen deeltjes van het filament door de uitgeoefende krachten; dit vereist regelmatig onderhoud aan de extruder om verstopping van de spuitmond te voorkomen. Deze deeltjes hebben de neiging om los te laten en zich te vermengen met het schone filament terwijl het wordt gevoed, wat leidt tot meer problemen met de spuitmond en een frequentere slijtage van de spuitmond; dit komt vaker voor bij mondstukken met een diameter van 0,3 mm.

Wanneer de filamentrol voor de helft of meer wordt gebruikt, worden de spiralen kleiner en in sommige omgevingsomstandigheden heeft het filament de neiging om te vaak te breken. Lange printopdrachten worden minder betrouwbaar en stressvol; Ik kan de printer niet een hele nacht alleen laten werken zonder hem onder controle te houden. Zo wordt de filamenttoevoer gecontroleerd door motorfiguren die een reeks problemen oplossen.

De kit is beschikbaar op Tindie.com

Stap 1: De inhoud van de kit

De inhoud van de kit
De inhoud van de kit
De inhoud van de kit
De inhoud van de kit

De kit bevat alle 3D-geprinte onderdelen en mechanica om de gemotoriseerde filamentdispenser te monteren. Er zijn in plaats daarvan twee optionele onderdelen: de motor en de motorcontrollerkaart.

In mijn opstelling heb ik een 12 V McLennan borstelmotor met tandwieloverbrenging gebruikt, maar elke motor met een diameter van 37 mm kan goed in de motorsteun passen.

De beste prestaties worden bereikt met een TLE94112LE Arduino-shield van Infineon (volledige recensie hier); dit DC-motorbesturingsbord kan tot 6 verschillende robotdispenserkits tegelijkertijd ondersteunen.

Ik heb het hele systeem getest op zowel een Arduino UNO R3 als het Arduino-compatibele bord XMC1100 Boot-kit van Infineon en het systeem reageerde zeer goed op beide microcontrollerborden.

Het gebruik van het TLE94112LE-schild wordt aanbevolen, maar is niet essentieel. Elke DC-motorcontroller voor Arduino - inclusief uw eigen project! - kan prima werken met deze tool

De kit is verdeeld in twee sets componenten omdat twee delen zijn gebouwd om samen te werken. Het basisplatform ondersteunt de filamentrol die draait op de vier vrijlooplagers. De basis is bevestigd aan de gewichtssensor om het roterende mechanisme te regelen dat de activering activeert en om de filamentcondities te bewaken: gewicht, meters en percentage. Veel informatie en een complete commandoset zijn toegankelijk vanaf de Arduino via een seriële terminal.

Gereedschap dat je nodig hebt

Om de montage te voltooien heb je wat stevige plastic lijm nodig voor sommige onderdelen, een schroevendraaier en een set inbusbouten.

Stap 2: Het project en ontwerp

Het project en ontwerp
Het project en ontwerp
Het project en ontwerp
Het project en ontwerp
Het project en ontwerp
Het project en ontwerp

Dit project is de derde evolutie van de 3D-printerfilamentdispenserserie. Enige tijd geleden heb ik de roterende basis gemaakt om de stroom van het filament te optimaliseren wanneer deze door de 3D-printerextruder wordt getrokken.

Het tweede model bevatte een gewichtssensor voor realtime monitoring van het filamentgebruik met een Arduino-bord. Dit laatste project omvat het automatisch vrijgeven van het filament, afhankelijk van de behoeften van de 3D-printertaak. Het is gebaseerd op de virtuele gewichtsvariatie wanneer de extruder aan het filament begint te trekken. Deze gebeurtenis activeert de microcontroller via de gewichtssensor en de gemotoriseerde filamentrol begint enkele centimeters materiaal vrij te geven, vertraagt en stopt.

De componenten zijn geëxporteerd in STL-formaat en 3D geprint, vervolgens verfijnd en samengevoegd. Ik heb een aangepaste ondersteuning gemaakt om het bewegende deel uit te lijnen met de basis. De langere aluminium rail werd ook gebruikt om de Arduino en het motorschild te ondersteunen om het hele gereedschap compact en gemakkelijk te verplaatsen te maken.

Bij het maken van het ontwerp volgde ik een reeks aannames:

  • De geautomatiseerde engine bijna eenvoudig en gemakkelijk te reproduceren maken
  • Verminder zoveel mogelijk het aantal niet-3D-afdrukbare componenten om het te maken
  • Verminder zoveel mogelijk de spanning die op de extruder wordt uitgeoefend tijdens het afdrukken
  • Gebruik een goedkope en eenvoudig te programmeren microcontrollerkaart
  • Gebruik de gewichtsbelastingssensor om het filamentverbruik en de filamenttoevoer onder controle te houden Beheers het omgevingsgeluid dat de gewichtsmetingen van het filament verstoort

Dit is het resultaat dat ik heb bereikt.

Stap 3: Montage van de basis

De basis monteren
De basis monteren
De basis monteren
De basis monteren
De basis monteren
De basis monteren

De eerste stap is het monteren van de basis met de gewichtssensor.

  1. Steek de kleine lagerasbuis in het lagergat
  2. Plaats de twee scheidingsschijven aan de zijkanten van het lager
  3. Introduceer de componenten in de "U"-formaat lagersteun en lijn de gaten uit
  4. steek de inbusschroef naar de ene kant en de ring en de moer naar de andere kant en sluit de moer zonder al te veel moeite

Herhaal de handeling op alle vier de lagersteunen. Test vervolgens het geheel: de lagers moeten vrij kunnen draaien.

Bevestig nu met de inbusbouten de vier lagersteunen op de bovenste basis met de vier regelgaten. Lijn de lagersteunen uit om ze parallel te houden. Regel de afstand afhankelijk van de breedte van je filamentrollen.

De volgende stap is het monteren van de gewichtssensorbalk die de onderste en bovenste basis bij elkaar houdt. De gewichtssensor heeft aan beide zijden twee verschillende inbusschroeven en u moet deze zo plaatsen dat het label met het maximale gewicht leesbaar is wanneer de basis correct is geplaatst. De bodembasis heeft twee extra zijgaten om de A/D-versterker van de gewichtssensor te bevestigen. De versterker op basis van de HX711 IC wordt gevoed en aangesloten op het Arduino-bord via de vier draden, zoals weergegeven in het bijgevoegde sensorgegevensblad.

De laatste stap is het monteren van de complete bovenste basis over de gewichtssensor die al aan het onderste deel is bevestigd.

Het eerste onderdeel is geplaatst!

Stap 4: Assembleren van de Spool Motion Engine-onderdelen

De onderdelen van de spoelbewegingsmotor monteren
De onderdelen van de spoelbewegingsmotor monteren
De onderdelen van de spoelbewegingsmotor monteren
De onderdelen van de spoelbewegingsmotor monteren
De onderdelen van de spoelbewegingsmotor monteren
De onderdelen van de spoelbewegingsmotor monteren

De eenvoudigere procedure om de spoelbewegingsmotor te monteren, is door de vier belangrijkste componenten afzonderlijk te assembleren en vervolgens het uiteindelijke gebouw te voltooien:

De reductiemotor in de motortransmissiekast

De DC-motor moet in het centrale deel van de structuursteun worden gemonteerd; voordat u de motor vastschroeft, moet u beslissen wat uw voorkeurszijde is waar u de tandwielen wilt plaatsen om de twee armen die de motor en het aangedreven grote tandwiel vasthouden correct uit te lijnen.

De aangedreven grote versnelling

Het grote tandwiel moet worden vastgeschroefd met het afgeknotte conische blok met de vier inbusbouten. Dit tandwiel wordt op de roterende as geblokkeerd door moeren; het conische deel houdt de filamentspoel vast die aan de andere kant is vergrendeld door een vergelijkbare borgmoer in een ander afgeknot conisch blok. Deze oplossing houdt niet alleen het bewegende mechanisme op zijn plaats, maar leidt ook al het gewicht naar de basis en het is het tarragewicht van het systeem.

De spoelslothouder

Dit is het afgeknotte conische blok dat samen met de aangedreven tandwielachtige vergrendelingszijde het bewegingsmechanisme op de filamentspoel zal houden. Als een kwestie van tact is het de filamentrol die het gebouw compleet maakt terwijl de beweging met twee armen vrij kan bewegen aan de andere kant.

Zoals op de afbeeldingen te zien is, is de spoelslothouder in twee delen gebouwd. Steek eerst de M4-moer in het grootste deel van het blok en lijm vervolgens het tweede deel (het deksel) dat de blokken bij elkaar houdt. De moer blijft opgesloten in de slothouder die op de van schroefdraad voorziene aangedreven as wordt geschroefd.

De lagers doos

De lagerkast heeft twee functies: een goede ondersteuning van de transmissietandwielen en een soepele en stille beweging. Volg deze eenvoudige stappen om de lagerkast te monteren:

  1. Schroef de eerste M4-moer op een van de twee uiteinden van de aangedreven as van de spoelhouder met schroefdraad
  2. Plaats het eerste lager
  3. Plaats het scheidingsteken
  4. Plaats het tweede lager
  5. Draai de tweede moer vast en zet deze matig vast. De interne plastic scheider zal voldoende kracht bieden om de dingen op hun plaats te houden, ook voor langdurig gebruik.
  6. Plaats de gemonteerde lagers in de lagerkast. Het moet met geweld worden gedaan om de betere resultaten te verkrijgen, dus breid de binnenkant van de doos niet te veel uit bij het verfijnen van de plastic onderdelen.

We zijn klaar voor de montage van de laatste componenten!

Stap 5: De montage van de Motion Engine voltooien

De montage van de bewegingsengine voltooien
De montage van de bewegingsengine voltooien
De montage van de bewegingsengine voltooien
De montage van de bewegingsengine voltooien
De montage van de bewegingsengine voltooien
De montage van de bewegingsengine voltooien

We staan op het punt om de constructie af te ronden, dan kunnen we de beweging testen. Nu heb je weer wat lijm nodig. De lagerkast - gemonteerd in de vorige stap - moet in het bakhoudergat van de tweearmige motorsteun worden gestoken en eventueel worden vastgelijmd voordat het deksel van de kast wordt vastgeschroefd.

Opgelet: het deksel van de doos niet lijmen, enkel vastschroeven. De hoes is belangrijk voor bescherming tegen stof en moet verwijderbaar zijn voor toekomstige onderhoudswerkzaamheden.

Wanneer deze opstelling is voltooid voordat het aangedreven tandwiel (hoe groter) wordt toegevoegd, voegt u de kleine scheidingsring toe: het houdt het grote tandwiel uitgelijnd met het motortandwiel en fungeert als een ring om het aangedreven bewegende samenstel te bevestigen.

Steek vervolgens het aandrijftandwiel (de kleine) in de motoras. Merk op dat er zowel in de motor als in het centrale gat van het tandwiel een platte kant is om het tandwiel draaiend te houden, aangedreven door de gelijkstroommotor.

Als laatste stap plaatst u het grote aangedreven tandwiel zoals weergegeven in de afbeeldingen en vergrendelt u het op de schroefdraadas met twee M4-moeren.

Het mechanicagebouw is klaar!

Stap 6: Bonus: hoe ik de ondersteuning heb aangepast om de kit te beheren

Bonus: hoe ik de ondersteuning heb aangepast om de kit te beheren
Bonus: hoe ik de ondersteuning heb aangepast om de kit te beheren
Bonus: hoe ik de ondersteuning heb aangepast om de kit te beheren
Bonus: hoe ik de ondersteuning heb aangepast om de kit te beheren
Bonus: hoe ik de ondersteuning heb aangepast om de kit te beheren
Bonus: hoe ik de ondersteuning heb aangepast om de kit te beheren

Om de kit op zijn plaats te houden, heb ik een heel eenvoudige structuur gemaakt op basis van twee vierkante aluminium buizen om zowel de basis als de bewegingsstructuur te ondersteunen. De basis is met vier schroeven aan de twee rails (ongeveer 25 cm lengte) bevestigd en met een paar kleine 3D-geprinte steunen heb ik de motion engine vrijgemaakt om te worden verplaatst om het inbrengen en verwijderen van de filamentrol te vergemakkelijken.

Iedereen kan zijn eigen oplossing kiezen, afhankelijk van hoe zijn werkbank is georganiseerd.

Stap 7: Bedrading en verbinding maken met Arduino

Image
Image
Bedrading en verbinding met Arduino
Bedrading en verbinding met Arduino

Zoals uitgelegd in de inhoudsstap van de Kit, heb ik een Infineon TLE94112LE DC-motorschild voor Arduino gebruikt en de motor getest op zowel Arduino UNO R3 als Infineon XMC110 Boot Kit.

Als je de motor wilt besturen (PWM-functies nodig) met een DC-controllerkaart naar keuze, pas dan de instructies aan de technische specificaties van je schild aan.

Een opmerking over het TLE04112LE Arduino Shield

Een van de limieten die ik heb ervaren met andere motorbesturingsschilden voor Arduino, is dat ze de functies van dezelfde microcontroller gebruiken (d.w.z. PWM- en GPIO-pinnen); dit betekent dat je board zich aan deze taken wijdt, terwijl er maar weinig andere bronnen (MPU en GPIO) beschikbaar zijn voor ander gebruik.

Met de mogelijkheid om het Arduino-schild TLE94122LE in handen te krijgen voor testen op de weg, is het meest voor de hand liggende voordeel van de IC waarop het bord is gebaseerd gewoon de volledigheid ervan. Het Arduino-bord communiceert met het schild via het SPI-protocol met slechts twee pinnen. Elke opdracht die u naar het schild verzendt, wordt autonoom verwerkt door de TLE94112LE IC zonder MPU-bronnen te verbruiken. Een ander opmerkelijk kenmerk van het Infineon-bord is de mogelijkheid om tot zes brushed motoren aan te sturen met drie programmeerbare PWM-kanalen. Dit betekent dat Arduino een of meer motoren kan instellen, starten en verder kan werken aan andere taken. Dit schild bleek perfect om tot zes verschillende filamentrollen tegelijkertijd te ondersteunen. De beweging is slechts een van de taken die verantwoordelijk zijn voor de MPU. Gezien de mogelijkheid om zes verschillende filamentspoelen te beheren met een enkele Arduino + schild, heeft de microcontroller gevolgen voor de kosten op elke afzonderlijke filamentcontroller voor minder dan 5 Euro.

De gewichtssensor

Na wat experimenten te hebben gedaan zag ik dat het mogelijk was om het hele systeem - bewaking en automatisch voeren - te besturen met een enkele sensor; een load cell (gewichtssensor) is in staat om de gewichtsvariaties van de filamentspoel dynamisch te meten en biedt alle informatie die we nodig hebben.

Ik gebruikte een goedkope loadcel in het bereik van 0-5 kg samen met een klein bord op basis van de HX711 AD-versterker, een IC specifiek om de loadcell-sensoren te beheren. Er waren geen interfaceproblemen omdat er een goed werkende Arduino-bibliotheek beschikbaar is.

Drie stappen voor het instellen van de hardware

  1. Plaats het schild bovenop het Arduino-bord of de Infineon XMC110 Boot Kit
  2. Sluit de motordraden aan op de Out1 en Out2 schroefconnectoren van de afscherming
  3. Sluit de voeding en signalen van de HX711 AD-gewichtssensorversterker aan op de Arduino-pinnen. In dit geval heb ik pinnen 2 en 3 gebruikt, maar alle vrije pinnen zijn prima.

Waarschuwing: pins 8 en 10 zijn gereserveerd door het TLE94113LE-schild voor de SPI-verbinding

Dat is alles! Klaar om de software in te stellen? Doe Maar.

Stap 8: De software- en besturingsopdrachtenset

De software- en besturingscommandoset
De software- en besturingscommandoset
De software- en besturingscommandoset
De software- en besturingscommandoset
De software- en besturingscommandoset
De software- en besturingscommandoset
De software- en besturingsopdrachtenset
De software- en besturingsopdrachtenset

De volledig gedocumenteerde software kan worden gedownload van de GitHub-repository 3DPrinterFilamentDispenserAndMonitor

hier beschouwen we alleen de meest betekenisvolle onderdelen en de besturingsopdrachten.

Er is een reden die wordt opgelegd door het aantal beschikbare pinnen op de Arduino UNO. Ik besloot het systeem te bedienen via de USB-seriële terminal; Omdat elke gemotoriseerde eenheid is gebaseerd op een gewichtssensor, vereist het aansturen van zes verschillende filamentdispensers het lezen van gegevens van zes gewichtssensoren. Elke loadcel "verbruikt" twee pinnen, pin 0 en 1 zijn gereserveerd (Tx/Rx) voor de seriële en pinnen 8 en 10 zijn gereserveerd voor het SPI-kanaal dat het TLE94112LE-schild verbindt.

Systeem status

De besturingssoftware werkt door middel van vier verschillende toestanden, gedefinieerd in filament.h:

#define SYS_READY "Klaar" // Systeem gereed

#define SYS_RUN "Running" // Filament in gebruik #define SYS_LOAD "Load" // Rol geladen #define SYS_STARTED "Started" // Applicatie gestart // Statuscodes #define STAT_NONE 0 #define STAT_READY 1 #define STAT_LOAD 2 #define STAT_RUN 3

Status: Gestart

Deze status treedt op na een hardwarereset of wanneer het systeem wordt ingeschakeld. De power-on (en setup()-aanroep wanneer de schets start) initialiseert de interne standaardwaarden en moet worden gestart zonder extra gewicht op het platform, aangezien onderdeel van de initialisatiesequentie het verkrijgen van de absolute tarra is om het fysieke nulgewicht te bereiken.

Status: Gereed

De gereedstatus treedt op na een zachte reset (verzonden vanaf de seriële terminal). Het is vergelijkbaar met het fysieke resect, maar er wordt geen tarra berekend; het reset-commando kan ook worden gestart wanneer het systeem actief is.

Status: Laden

De laadstatus treedt op wanneer het laadcommando wordt verzonden door de terminal. Dit betekent dat de filamentrol is geladen en de dynamische tarra is berekend. Het exacte filamentgewicht wordt verkregen door het soort rolopstelling af te trekken van het gewicht van de motoreenheid en de lege rol.

Status: Actief

Deze status maakt de automatische gewichtsberekening en de automatische filamentdispenser mogelijk.

Terminalberichten

De huidige versie van de software stuurt, afhankelijk van de opdrachten, door mensen leesbare berichten naar de terminal. De string-berichten worden gedefinieerd in twee header-bestanden: commands.h (opdrachtgerelateerde berichten en antwoorden) en filament.h (strings die door de parser worden gebruikt om samengestelde berichten te maken).

Commando's

Twee verschillende bestanden zijn betrokken bij het commandobeheer: commands.h inclusief alle commando's en gerelateerde parameters en filament.h inclusief alle constanten en definities die worden gebruikt door het weegsysteem en door de parser.

Terwijl de interne berekeningen automatisch door software worden gedaan, heb ik een reeks opdrachten geïmplementeerd om het gedrag van het systeem in te stellen en enkele parameters handmatig te regelen.

Command-sleutelwoorden zijn hoofdlettergevoelig en moeten gewoon vanaf de terminal worden verzonden. Als een opdracht niet geschikt is voor de huidige status of niet wordt herkend, wordt een verkeerd opdrachtbericht geretourneerd, anders wordt de opdracht uitgevoerd.

Statusopdrachten

Verander de huidige status van het systeem en ook het gedrag wordt aangepast

Filament commando's

Met behulp van afzonderlijke commando's is het mogelijk om de filament- en rolkenmerken in te stellen op basis van het meest gebruikelijke gewicht en de meest gangbare maten die momenteel op de markt verkrijgbaar zijn

Eenheden commando's

Dit zijn een aantal commando's om de visualisatie van de maateenheden in gram of centimeter in te stellen. In feite is het mogelijk om deze commando's te elimineren en gegevens altijd in beide eenheden weer te geven.

Informatie commando's

Groepen informatie weergeven afhankelijk van de systeemstatus

Motorcommando's

Bedien de motor voor filamenttoevoer of trekkracht.

Alle motorcommando's volgen een acceleratie-/deceleratiepad. De twee commando's feed en pull voeren een korte reeks uit zoals gedefinieerd in motor.h door de constante FEED_EXTRUDER_DELAY terwijl de feedc- en pullc-commando's voor onbepaalde tijd worden uitgevoerd totdat een stopcommando niet wordt ontvangen.

Opdrachten in de bedrijfsmodus

De lopende status accepteert twee modi; mode man leest gewoon periodiek het gewicht en de motor beweegt totdat er geen motorbesturingscommando wordt verzonden. Mode auto voert in plaats daarvan twee invoeropdrachten uit wanneer de extruder meer filament nodig heeft.

Het principe is gebaseerd op de gewichtsmetingen, gecontextualiseerd naar deze specifieke omgeving. We verwachten dat het filamentverbruik relatief langzaam is, 3D-printers zijn bijna traag en de normale gewichtsoscillaties zijn afhankelijk van de omgevingstrillingen (beter als je niet het hele spul op de 3D-printer legt)

Wanneer de extruder in plaats daarvan aan het filament trekt, neemt het gewichtsverschil in zeer korte tijd dramatisch toe (50 g of meer), meestal tussen twee of drie metingen. Deze informatie wordt gefilterd door de software die "aftrekt" dat er nieuw filament nodig is. Om verkeerde aflezingen te voorkomen, worden gewichtsvariaties terwijl de motor draait in het geheel genegeerd.

Toepassingslogica

De applicatielogica is verdeeld in de.ino-main (de Arduino-schets) langs drie functies: setup(), loop() en parseCommand(commandString)

De schets gebruikt twee afzonderlijke klassen: FilamentWeight-klasse om alle filamentberekeningen en sensormetingen te beheren via de HX711 IC en MotorControl-klasse die de low-level-methoden van het TLE94112LE Arduino-shield combineren.

opstelling()

Eenmaal gestart bij het opstarten of na een hardware-reset, initialiseert u de instanties van de klassen, stelt u de hardware en de terminalcommunicatie in.

lus()

De hoofdlusfunctie beheert drie verschillende voorwaarden.

Hoewel er twee klassen zijn voor gewichtssensoren en motoren die relatief complex zijn, is er het voordeel dat de resulterende schets heel gemakkelijk te begrijpen en te beheren is.

  1. Controleer (in modus auto) of de extruder meer filament nodig heeft
  2. Als de motor draait, controleer dan op hardwarefouten (geretourneerd door de TLE94112LE)
  3. Als er seriële gegevens beschikbaar zijn, ontleden de opdracht

ontledenCommand(opdrachtString)

De parseerfunctie controleert de strings die uit het serienummer komen en wanneer een commando wordt herkend, wordt het onmiddellijk verwerkt.

Elke opdracht fungeert als een toestandsmachine die een parameter van het systeem beïnvloedt; volgens deze logica worden alle commando's teruggebracht tot drie opeenvolgende acties:

  1. Stuur een commando naar de klasse FilamentWeight (gewichtscommando's) of naar de MotorControl-klasse (motorcommando's)
  2. Voert een berekening uit om de gewichtswaarden bij te werken of een van de interne parameters bij te werken
  3. Toon op de terminal en informatie-uitvoer wanneer de uitvoering is voltooid

Installeer de HX711 Arduino-bibliotheek, download de software van GitHub en upload deze naar je Arduino-bord en geniet ervan!

Aanbevolen: