Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Volledig 3D-geprinte tank: Bouw een veelzijdig gedaagd robotplatform

In deze tutorial laat ik je zien hoe ik een supercoole radio-gecontroleerd gedaagd voertuig bouwde, of een robotplatform of een tank, noem het maar hoe je wilt. Ik ontwierp dit ding vanaf nul om volledig 3D-printbaar te zijn, zodat je alles makkelijk kunt printen en er zelf een kunt bouwen.

Je kunt de volgende video bekijken of de geschreven tutorial hieronder lezen.

Overzicht

Mijn doel voor dit project was om een veelzijdig platform te maken dat veel typen terreinen kan bewältigen en voor diverse toepassingen gebruikt kan worden. De beste keuze daarvoor was een continue gedaagdesysteem. De gedaagden verdelen het gewicht van het voertuig over een groter oppervlak, wat uitstekende grip geeft en de kans vermindert dat je in zachte grond, modder of sneeuw vastzit.

Het robotplatform rijdt best goed in de modder, en het is jammer dat ik geen kans had om het op sneeuw te testen. Ik hoop dat ik dat in een van mijn toekomstige video's kan, waar ik een robotarm of een toren bovenop wil monteren. Met een robotarm op het platform kunnen we diverse taken uitvoeren zoals grijpen en verplaatsen van dingen, of we kunnen een camera eraan hangen en het gebruiken voor visuele inspectie, enzovoort. Of bijvoorbeeld, we kunnen een toren maken die Nerf-pijls kan afvuren, en in combinatie met de simpele maar coole LED-verlichting die ik al op dit platform installeerde, kunnen we er best leuk mee spelen.

Wat de vering betreft, gebruikte ik een Christie-veringssysteem dat al jaren in tanks gebruikt wordt. Met deze opstelling heeft elk wegwiel een individuele vering, of een veer en een shockabsorber.

Dat stelt het voertuig in staat om soepel over oneffen terrein te rijden en obstakels te beklimmen, terwijl er een goed contactoppervlak tussen de gedaagden en het terrein blijft.

Voor het besturen van de 3D-geprinte tank gebruik ik een goedkope commerciële RC-zender die commando's naar het platform stuurt.

Op het platform heb ik een geschikte RC-ontvanger die de commando's ontvangt en doorstuurt naar een microcontroller. De hersenen van dit platform is een Atmega2560-microcontroller-gebaseerd bord, en voor het gemakkelijk aansluiten van alles maakte ik een custom PCB die simpel op het bord kan worden gemonteerd.

Nu, schnal je vast, want ik zal je door het hele proces van het bouwen van dit robotplatform leiden, beginnend bij het ontwerp, 3D-printen, monteren, elektronica aansluiten en programmeren van de microcontroller.

Ontwerpen van het robotplatform

Ik ontwierp dit robotplatform met SOLIDWORKS, wat ook de sponsor van deze video is.

— Gesponsorde sectie —

"Het is de moeite waard om hier op te merken dat deze toonaangevende, professionele ontwerptools nu beschikbaar zijn voor alle makers tegen een opvallend lage prijs van slechts $99 per jaar of $9,99 per maand. Dat klopt, 3DEXPERIENCE SOLIDWORKS for Makers is geweldig voor iedereen die het vak leert, DIY-projecten doet, en meer.

Deze aanbieding omvat 3DEXPERIENCE SOLIDWORKS Professional, de meest gevraagde CAD-tool binnen de aanbieding en draait lokaal op je PC. Je kunt bestanden lokaal of in de cloud opslaan met het 3DEXPERIENCE-platform.

"xDesign", browser-gebaseerde CAD, je kunt het gebruiken met 3DEXPERIENCE SOLIDWORKS, of op zichzelf. Het is geweldig voor modelleren overal, altijd, en op elk apparaat.

"xShape", browser-gebaseerde freeform CAD die makkelijk te gebruiken is voor oppervlaktemodellering op elk apparaat.

"Visualize Connected", eenvoudig foto-realistische afbeeldingen, animaties, interactieve webcontent en meer maken om je publiek te imponeren.

"NC Shop Floor Programmer", CAM voor intelligente bewerkingsstrategieën voor 3-as frezen en draaderosie in een makkelijk te gebruiken pakket.

Klik op de link hieronder, en je krijgt een speciale 20% korting – zodat je vandaag nog kunt beginnen met het maken met de beste tools! Grote dank aan SOLIDWORKS voor het sponsoren en ondersteunen van educatieve content als deze."

Nu kopen: https://www.solidworks.com/makers20

Meer info: https://discover.solidworks.com/3dexperience-solidworks-makers

— Terug naar onderwerp —

Laten me uitleggen hoe ik op het robotplatformontwerp kwam. De eerste invoerparameters voor het ontwerp waren deze RC-shockabsorbers die ik had en hun afmetingen.

Ik had er 8, wat betekende dat er 4 wegwielen aan elke kant zouden zitten, en ze waren 41mm lang wanneer uitgezogen met 11mm belasting. Volgens deze afmetingen wilde ik een iets grotere verticale reisaafstand voor de wegwielen, dus ik bedacht dit mechanisme dat me een verticale reis van 16mm voor de wegwielen gaf.

Ik kan nog grotere reisaafstand krijgen als ik het gewricht van de shockabsorber en wegwiellink dichter bij het draaipunt van de wegwiellink zet, maar dan zou ik de kracht van de veer verliezen, of een sterkere veer nodig hebben om het platform goed te houden.

Ik deed enkele eenvoudige simulaties met SOLIDWORKS om de reactiekrachten op de veren met verschillende mechanismen te checken, en zo koos ik dit mechanisme dat ook een goede algehele compactheid biedt.

Als we de voorste wegwiel nader bekijken, zien we hoe het verbonden is met het voorwiel dat dynamische spanning van de gedaagde biedt. Wanneer het wegwiel omhoog gaat, wordt de omtrek van de gedaagde kleiner en de spanning losser.

Met deze verbinding hier, wanneer dat gebeurt, wordt het voorwiel naar voren geduwd om de gedaagde te spannen. Met deze verbinding kunnen we de gedaagde ook statisch spannen, door deze bout en afstandsbus af te stellen.

Aan de achterkant hebben we het kettenrad dat uit drie delen bestaat. Het heeft de askoppeling en linker- en rechtersectie van het kettenrad, allemaal verbonden met drie M3-bouten.

De sleutelafmeting hier op het kettenrad is de deeltand, want die moet overeenkomen met de deeltand van de gedaagde. De deeltand is 11mm hier, en ik koos het kettenrad met 12 tanden, wat een deeltanddiameter van ongeveer 42mm opleverde.

De 11mm deeltand werd eigenlijk gedefinieerd door het ontwerp van het gedaagde schakel. Mijn doel voor het gedaagde schakel was zo compact mogelijk te zijn en met slechts één extra onderdeel of pin met het volgende schakel te verbinden, terwijl het sterk genoeg is om met een 3D-printer gemaakt te worden.

Bovendien wilde ik bij 3D-printen elk gebruik van supportmateriaal voor het deel vermijden, wat ik met dit ontwerp werkelijk wist te bereiken.

Voor het verbinden van de gedaagde schakels onderling, had ik van plan om pinnen van 2mm diameter te gebruiken, dus dimensioneerde ik de ene kant op 2mm voor strakke pasvorm, en de andere kant op 2,3mm voor losse pasvorm, zodat de gedaagde schakels vrij kunnen draaien.

De kettenradtanden grijpen in de gedaagde schakels in deze opening waar de pinnen van het gedaagde schakel gevormd zijn met 8,8mm diameter, terwijl de kettenraddiameter 9,1mm is voor een losse pasvorm om goed te werken.

Eenmaal al deze onderdelen gedefinieerd waren, tekende ik een schets in de assemblage-omgeving, een gesloten contour om het kettenrad, het voorwiel en de wegwielen heen.

Toen gebruikte ik deze schets met de SOLIDWORKS Chain Component Pattern-functie om alle gedaagde schakels langs die contour te genereren.

Ik ontwierp de rest van het robotplatform, de basis waar alles aan zit, de zijkanten die enkele LEDs accommoderen en de bovenste deksels, in wat ik een moderne en coole stijl vond. Omdat de totale afmeting van het platform groter is dan die van de meeste 3D-printers, ongeveer 400mm bij 300mm, deelde ik alle onderdelen in twee secties, zodat we ze op bijna elke 3D-printer kunnen printen. Ze zijn verbonden met enkele beugels en M3-bouten.

Voor het monteren van het hele robotplatform hebben we diverse M3 en M4 bouten en moeren nodig, evenals enkele gezwinde-inserts en lagers. Je kunt een complete lijst van alle benodigde componenten hieronder in de montage-sectie vinden.

3D-model en STL-downloadbestanden

Je kunt het 3D-model van deze RC-tank/robotplatform, evenals de STL-bestanden voor 3D-printen, downloaden van Cults3D.

3D-printen

Bij 3D-printen, om dimensioneel nauwkeurige 3D-geprinte onderdelen te krijgen, moeten we de Horizontale Uitbreiding- en Gat-Horizontale Uitbreiding-instellingen in onze slicer-software gebruiken. Als we deze instellingen standaard laten, zijn de prints buitenafmetingen en gaten meestal kleiner dan het originele model.

Ik stelde de Horizontale Uitbreiding in op 0,02mm en de Gat-Horizontale Uitbreiding op 0,04mm. Natuurlijk moet je een paar testprints doen om te zien welke waarden de beste resultaten geven op jouw 3D-printer. We hebben nauwkeurige afmetingen van de onderdelen nodig om ze makkelijk met elkaar en met de andere componenten zoals de lagers en de bouten te monteren.

Bij het 3D-printen van de gedaagde schakels gebruikte ik een raft als bouwplaatadhesie, omdat hun contactoppervlak met de bouwplaat iets klein is en niet goed kan plakken als de bed-adhesie op je printer niet zo goed is. Vooral bij het printen van grotere batches, is het veiliger om een raft te gebruiken.

Monteren van de 3D-geprinte tank – Gedaagd robotplatform

Oké, hier heb ik alle 3D-geprinte onderdelen voor het robotplatform. Eerlijk gezegd, het duurde een hele weile om alles te printen.

Bijvoorbeeld, elk van de basissecties duurde ongeveer 22 uur om te printen, en alle 156 gedaagde schakels duurde ongeveer 96 uur om te printen. Ongeveer hebben we 200 uur nodig om alles te printen. Gelukkig had ik twee 3D-printers, dus het duurde me ongeveer 100 uur.

Onderdelenlijst

Hier is een lijst met componenten die nodig zijn voor het monteren van dit 3D-geprinte tank–robotplatform-project. De lijst voor de elektronische componenten is te vinden in de schakelschema-sectie van het artikel.

  • 8x RC-shockabsorbers …………………………………….. Amazon / AliExpress
  • 8x Veren ……………………………………………………………. Amazon / AliExpress
  • 40x Kogellagers 624 – 4x13x5mm ………………… Amazon / AliExpress
  • M3-gezwinde-inserts ………………………………………….. Amazon / AliExpress
  • M3 en M4 bouten en moeren ……………………………. Amazon / AliExpress
    Bouten:
    M4x40mm – 8st; M4x35mm – 2st; M4x30mm – 8st; M4x25mm – 2st; M3x25mm – 16st; M3x20mm – 8st; M3x16mm – 10st; M3x12/14mm – 32st; M3x10mm – 8st; M3x8mm – 14st
    Moeren:
    M4 – 25st; M3 – 30st
    Ringetjes:
    M4 – 30st

Disclaimer: Dit zijn affiliatelinks. Als Amazon Associate verdien ik aan kwalificatieve aankopen.

Ik begon met het monteren van de basis. Zoals gezegd, is het samengesteld uit twee secties die met elkaar verbonden worden met enkele beugels en M3-bouten en moeren.

Voor het bevestigen van de zijbeugels gebruik ik M3, 5mm lange gezwinde-inserts die in de zijwand van de basis gaan. Op die manier is de buitenkant van de wand schoon, zonder bouten en moeren, zodat de gedaagden er vlakbij kunnen lopen.

Vervolgens bevestigde ik de beugels voor de shockabsorbers op hun plaats met enkele M3-bouten.

Daarna installeer ik de lagers waar de wegwiellarm omheen zal draaien. De lagers hebben 13mm buiten- en 4mm binnendiameter en we hebben er twee nodig voor elk wegwiel.

Als pin gebruik ik een M4-bout van 30mm lengte. We moeten een ringetje tussen het lager en de arm leggen en ze van binnen bevestigen met een borgmoer. We moeten voorzichtig zijn hoeveel we dit gewricht vastdraaien, niet te strak, maar ook niet te los.

Vervolgens kunnen we de shockabsorber installeren. We bevestigen hem met de M1,4-bout die bij het pakket zit.

Ik had die kleine schroevendraaier niet, dus ik gebruikte tang om de bout vast te draaien. Tot nu toe lijkt het mechanisme perfect te werken.

Vervolgens kunnen we het wegwiel aan de onderkant van de arm installeren. Het wegwiel is gemaakt uit twee secties om printen met supportmateriaal te vermijden. Misschien kon het als één deel geprint worden, maar ik probeerde niet hoe dat uitkwam.

Op deze manier moeten we de twee secties verbinden, en ik besloot de 2mm staalstaven te gebruiken daarvoor, dezelfde die ik voor het verbinden van de gedaagde schakels zal gebruiken. Dit is eigenlijk een messing lasdraad, wat wat zacht is en makkelijk op maat geknipt kan worden met tang.

Ik stak drie staven van ongeveer 23mm lengte per wiel in, en installeerde ook twee van dezelfde lagers die ik eerder gebruikte aan beide kanten van het wiel. Opnieuw, zoals eerder, bevestigde ik het wegwiel met een M4-bout, een ringetje en een borgmoer.

Het wiel moet vrij kunnen draaien, zonder spel in de as.

Nu hoeven we alleen dit proces te herhalen voor de andere wegwielen. Wat het voorste wegwiel betreft, hebben we een iets andere arm die een hefboom heeft die dynamische spanning voor de gedaagde zal bieden, maar de installatie is hetzelfde.

Vervolgens kunnen we het mechanisme voor het voorwiel monteren. Het bestaat uit drie 3D-geprinte onderdelen, enkele bouten en een afstandsbus.

Voordat we het eerste schakel vastzetten, moeten we een M4-borgmoer aan de achterkant zetten, waarop we later het voorwiel bevestigen.

Ik gebruik dezelfde 2mm koperen staven als pinnen voor deze gewrichten. Nu, aan het tweede schakel aan de voorwielkant, kunnen we een 15mm lange M3-afstandsbus bevestigen met behulp van een M3-bout.

Aan de andere kant leggen we een 20mm lange M3-bout en een moer, die in de afstandsbus gaat. Met deze opstelling kunnen we nu de afstand tussen het voorwiel en de wegwiellarm aanpassen, en zo de gedaagde zowel statisch als dynamisch spannen. Vervolgens kunnen we het voorwiel simpelweg bevestigen met een M4-bout, en zo hebben we dit spanningsysteem klaar, evenals het hele veringssysteem.

Oké, nu kunnen we het kettenrad monteren, en daartoe moeten we eerst de motor installeren. Ik ontwierp het basisplatform om motoren met 37mm diameter te accepteren, met ofwel centrale of versprongen as.

We kunnen elke 12V DC-motor met RPM van 20 tot 1000 RPM installeren, afhankelijk van de toepassing van het robotplatform natuurlijk, maar we praten daar later in de video over. De motor wordt met zes M3-bouten bevestigd.

Om het kettenrad aan de motoras te bevestigen, moeten we eerst de askoppeling voorbereiden, of enkele gezwinde-inserts erin installeren.

Dan kunnen we de koppeling op zijn plaats zetten en bevestigen met een M3-zeskantschroef.

De twee secties van het kettenrad worden dan ingevoegd en bevestigd met drie M3-bouten.

Zo hebben we de platform-aandrijving klaar, en nu is het tijd om plezier te beleven met het monteren van de gedaagde. Dat klopt, ik vond het best leuk om de gedaagde te monteren.

Hier is een nader kijkje op de gedaagde schakels, waar we zien hoe simpel en schoon ze zijn.

Ze komen direct bruikbaar uit de 3D-printer, omdat we geen support gebruiken bij het 3D-printen. We hebben alleen 2mm pinnen nodig om ze te verbinden. Zoals al gezegd, kunnen we die makkelijk krijgen van 2mm messing lasdraad.

De buitengaten op de schakels zijn strakke pasvorm, dus we moeten wat kracht gebruiken om ze in te duwen, maar dat zorgt ervoor dat ze niet afvallen. De binnengaten op de schakels zijn losse pasvorm, wat vrije rotatie tussen de gedaagde schakels garandeert.

Nu hoeven we alleen een kopje thee of koffie te maken en een paar uur te genieten van het monteren. Je realiseert je de plezier zodra je er een paar aan elkaar hebt gekoppeld en ziet hoe cool de gedaagde eruitkomt. We hebben in totaal 78 gedaagde schakels nodig voor het monteren van één gedaagde. Wat de staavlengte betreft, hebben we ongeveer 3,5m per gedaagde nodig, want elke pin moet ongeveer 43mm lang zijn.

Eenmaal de gedaagde klaar is, kunnen we hem gewoon om het kettenrad, de wegwielen en het voorwiel heen leggen, en de lus sluiten met nog een 2mm pin aan de zijkant. We kunnen hier opmerken dat met 78 gedaagde schakels de spanning van de gedaagde net goed is, hoewel het laatste wegwiel een beetje omhoog gaat.

Dat is eigenlijk omdat de veer niet sterke genoeg is. We kunnen de veerspanning een beetje aanpassen door deze moer op de shockabsorber af te stellen, maar dat was weer niet genoeg. Daarom besloot ik de originele veer die bij de shockabsorber zat, te vervangen door een sterkere.

De veer wisselen is vrij eenvoudig, we hoeven alleen het ene uiteinde van de shockabsorber los te draaien, de sterkere veer erin te steken, en de staaf weer vast te draaien. De veer die ik had was iets breder dan de originele, dus ik moest een M4-ringetje aan de onderkant gebruiken. Nu had deze veer genoeg kracht om het wegwiel op zijn plaats te houden bij het installeren van de gedaagdes met 78 schakels.

Ik veranderde de veren op alle shockabsorbers, omdat ik besefte dat ze niet sterk genoeg zouden zijn om het gewicht van het hele platform te dragen. Dit voltooit het hele aandrijvingssysteem van het platform, wat ik denk best goed is geworden.

Indien nodig, kunnen we nu de gedaagdspanning aanpassen met de afstandsbus aan het voorwiel. Natuurlijk is het oké om de gedaagde een beetje los te hebben, zodat hij goed werkt. De losse bovenste sectie van de gedaagdes wordt ondersteund op de shockabsorber-beugels.

Ik slote de motor aan op voeding om te checken hoe het werkt. Het leek me perfect. Het is echt een geweldig gevoel om iets dat je met zoveel 3D-geprinte onderdelen hebt gemaakt, in actie te zien.

Natuurlijk moeten we dezelfde procedure herhalen om de andere kant te monteren. Met dit gedaan, is het robotplatform zo'n 80% klaar. Vervolgens ga ik de zijpanelen installeren, die meestal voor de visuele uitstraling zijn.

We bevestigen ze met behulp van enkele beugels en M3-bouten. Bovenop gaan de deksels die het platform insluiten. Voor deze video ontwierp ik het zo voor de visuele uitstraling.

Zoals ik eerder zei, in enkele van mijn toekomstige video's plan ik een robotarm of een toren bovenop dit platform te zetten, wat betekent dat ik de bovendekels dan passend moet ontwerpen.

Elektronica – Robotplatform schakelschema

Nu kunnen we doorgaan met de elektronica van dit project. Zoals gezegd, gebruik ik een ATmega2560-microcontroller-gebaseerd bord.

Je kunt de benodigde componenten voor dit project via de onderstaande links verkrijgen:

  • 2x 12V DC-motor – 50 tot 500 RPM ………. Amazon / AliExpress
  • DRV8871 DC-motordriver ……………….…. Amazon / AliExpress
  • Arduino MEGA…………………………….….…..… Amazon / AliExpress
  • 3S LiPo-batterij ………………………..………….. Amazon / AliExpress
  • XT60-connector …………………………..……… Amazon / AliExpress
  • FLYSKY RC-zender ………………………………. Amazon / AliExpress

Disclaimer: Dit zijn affiliatelinks. Als Amazon Associate verdien ik aan kwalificatieve aankopen.

Voor het aansturen van de twee motoren gebruik ik twee DRV8871 DC-motordrivers, die PWM-regeling ondersteunen en tot 3,6A piekstroom aan. De DC-motoren werken op 12V, en we voeden alles met een 3S LiPo-batterij die ongeveer 12V geeft. Ik nam ook een 5V-spanningsregelaar, de LM350 IC, op, om een speciale 5V-voorziening te hebben voor toekomstige toepassingen, bijvoorbeeld voor het aansluiten van servomotoren. In deze video gebruiken we deze 5V voor het voeden van de RC-ontvanger en een aantal LEDs.

De LEDs die ik voor dit project gebruik, zijn simpele 5mm LEDs in wit en rood. Ik rangschikte ze als volgt:

Achteraan hebben we twee rode LEDs aan elke kant als achterlichten, en vooraan drie witte LEDs aan elke kant als koplichten. Daarnaast zijn er zes LEDs aan het bovenste deksel als ververlichting. Om deze LEDs goed te laten oplichten, hebben we een geschikt circuit nodig dat weerstanden voor stroombegrenzing omvat. Ik combineerde hun verbindingen zowel parallel als in serie.

Bijvoorbeeld, voor de koplichten gebruik ik twee parallele lijnen met 12V om de 6 LEDs te voeden, 3 aan elke kant links en rechts, die in serie zijn verbonden. Volgens de voorwaartsspanning en stroom van de LEDs, berekende ik de benodigde weerstandswaarde voor elke lijn, en dat was 150 Ohm in dit geval. Voor het activeren van de LEDs gebruik ik enkele algemene NPN-transistors van 200mA.

Tot slot maakte ik een simpele spanningsdeler die ik zal gebruiken voor het monitoren van de batterijspanning. Eenvoudigweg, de 12V van de batterij worden naar onder de 5V gebracht, zodat ze in een analoge ingang van de microcontroller kunnen gaan. In het programma kunnen we de waarde terugvertalen naar de echte spanningswaarde en die van de RC-ontvanger naar de RC-zender sturen, waar we de waarde op het display kunnen zien.

Custom PCB-ontwerp

Ik kwam eigenlijk met vrij veel verbindingen uit, dus om een rommel te vermijden, moest ik een custom PCB voor dit project ontwerpen.

De PCB is compatibel met het ATmega2560-microcontroller-gebaseerde bord om er direct op te monteren.

Ik nam een 3,3V-spanningsregelaar en een verbinding voor een NRF24L01-transceiver-module op, voor het geval we het platform daarmee willen besturen. Ook nam ik een 12V-rail, en 5V en 6V-rails met digitale pinverbindingen op voor het aansluiten van servomotoren. De 6V-rail kan gevoed worden met een externe buck-converter.

Ik bestelde de PCB bij PCBWay. Hier kunnen we simpelweg het Gerber-bestand uploaden, de eigenschappen van onze PCB kiezen, en het tegen een redelijke prijs bestellen.

Ik veranderde geen van de standaardeigenschappen, behalve de PCB-kleur die ik wit koos. Je kunt het Gerber-bestand vinden en downloaden via de PCBWay project-deelcommunity, waar je de PCB ook direct kunt bestellen.

Ook kun je het Gerber-bestand hier downloaden:

Toch, na enkele dagen kwam de PCB aan. De kwaliteit van de PCB is geweldig, en alles is precies hetzelfde als in het ontwerp.

Het monteren van de PCB is redelijk straight-forward, omdat alles gelabeld is. Ik begon met het solderen van de pinheaders aan de onderkant van de PCB, voor de ATmega2560-verbinding, en ging daarna door met de bovenkant. Voor het gemak moeten we eerst de kleinere componenten solderen, zoals de weerstanden en de transistoren, en dan de grotere zoals de LED- en voedingsconnectoren.

Ik gebruikte pinheaders voor alle verbindingen, omdat dat flexibiliteit geeft om wijzigingen te maken als iets niet goed werkt. Ik soldeerde de connectors voor de externe buck-converter en zijn rails niet, evenals de 3,3V-spanningsregelaar, omdat ik ze nu toch niet ging gebruiken. Ik vind het echt leuk hoe netjes en schoon deze PCB uitkwam met deze witte kleur.

Afwerken van de 3D-geprinte tank montage

Oké, eerst bevestigen we het microcontrollerbord op zijn plaats met enkele M3-bouten, en daarna gaat de custom PCB erbovenop.

Nu is het tijd om de LEDs te installeren. Ze worden in het zijpaneel geplaatst met behulp van deze houders die de 5mm LEDs accommoderen. Zoals beschreven in het schema, moeten we elke lijn van LEDs in serie solderen.

Aan de kathode gaat de zwarte draad, en aan de anode de rode draad. We voeren deze draden door een kleine opening in de zijpanelen die naar de PCB leidt.

Het LED-houderdeel is ontworpen om een strakke pasvorm met het zijpaneel te maken, dus eenmaal ingeplaatst krijgen we een nette en schone uitstraling.

De ververlichtings-LEDs worden direct op het bovenste voordeksel geplaatst.

Voor het verbinden van de LEDs, soldeerde ik XH2,54mm dupont-manconnectoren op de PCB, dus ik moest een geschikte dupont-vrouwconnector aan de draden installeren. We hebben krimptangen daarvoor nodig, maar op het moment van maken van dit project had ik er geen bij me.

Ik gebruikte gewone kleine tang om dat te doen, en de verbindingen kwamen prima uit. Elke LED-lijn moet in de juiste connector gaan, die gelabeld is op de PCB.

Wat de motoren betreft, had ik geen geschikte connectors, dus ik soldeerde de draden direct aan ze. De motorverbinding gaat in de DRV8871-driverbord en dan in de PCB.

Voor de radiocommunicatie gebruik ik de FLYSKY RC-zender en ontvanger, die echt betaalbaar zijn en geweldig werken.

Voor het verbinden van de ontvanger met de microcontroller, kunnen we jumperdraden gebruiken. De ontvanger communiceert met de microcontroller via een I-BUS en de seriële poort, dus we hebben slechts drie draden nodig: VCC, GND en de Signaal-pin.

Als we data terug willen sturen van de ontvanger naar de zender, in ons geval voor het monitoren van de batterijspanning, moeten we ook de sensor I-BUS van de ontvanger aan een andere seriële poort verbinden.

Tot slot kunnen we de LiPo-batterij aansluiten. Afhankelijk van de batterij hebben we een geschikte connector nodig. Deze gaat in de 12V-connector, en direct naast zit een AN/UIT-connector waar we een schakelaar voor de stroom van het platform aan sluiten.

Let hier op dat voordat we het bord voeden, we de RC-ontvanger eerst van de voeding moeten halen en de variabele spanning van de LM350 IC op 5V moeten instellen met de trimmer.

Nu hoeven we alleen het achterste bovenste deksel op zijn plaats te zetten, en we zijn klaar met dit project.

Programmeren van het robotplatform

Nu moeten we de 3D-geprinte tank/robotplatform programmeren. Hier is de Arduino-code voor dit robotplatform.

/* 3D-geprint Gedaagd Robotplatform - Arduino-code door Dejan, www.HowToMechatronics.com
Bibliotheken:
IBusBM: https://github.com/bmellink/IBusBM */
#include 
#define motorLeft_IN1 4
#define motorLeft_IN2 5
#define motorRight_IN1 6
#define motorRight_IN2 7
IBusBM IBus;
IBusBM IBusSensor;
int ch0, ch1, ch6, ch8 = 0;
int motorSpeed, steeringValue, leftMotorSpeed, rightMotorSpeed = 0;
int ledBlinkPeriod = 50;
int isOn = LOW;
unsigned long time_now = 0;
void setup() {
  Serial.begin(115200);
  IBus.begin(Serial1, IBUSBM_NOTIMER); // Servo iBUS
  IBusSensor.begin(Serial2, IBUSBM_NOTIMER); // Sensor iBUS
  IBusSensor.addSensor(IBUSS_INTV); // voeg spanningsensor toe
  // DC-motoren regeling - zet ze stil
  // Linker gedaagde
  digitalWrite(motorLeft_IN1, LOW); // PWM-waarde
  digitalWrite(motorLeft_IN2, LOW); // Vooruit
  // Rechter gedaagde
  digitalWrite(motorRight_IN1, LOW); // PWM-waarde
  digitalWrite(motorRight_IN2, LOW); // Vooruit
  digitalWrite(46, LOW);
  digitalWrite(47, LOW);
  digitalWrite(48, LOW);
}
void loop() {
  // Lees data van de RC-zender
  IBus.loop();
  // ch0 - links en rechts; ch1 - vooruit en achteruit;
  ch0 = IBus.readChannel(0); // ch0 - links en rechts
  ch1 = IBus.readChannel(1); // ch1 - vooruit en achteruit
  ch6 = IBus.readChannel(6); // ch6 - Koplichten
  ch8 = IBus.readChannel(8); // ch8 - Ververlichting
  // Converteer binnenkomende data naar geschikte PWM-waarde
  steeringValue = map(ch0, 1000, 2000, -185, 185); // 0 tot 185 bereik, want dan voeg ik +70 toe om lage PWM-waarden te vermijden, zodat motoren niet starten
  motorSpeed = map(ch1, 1000, 2000, -185, 185);
  motorSpeed = abs(motorSpeed);
  leftMotorSpeed = 70 + motorSpeed + steeringValue; // 70 + (0-185) + (0 - 185) = 70 - 255, dit bereik van 70 tot 255 wordt als PWM-waarde gebruikt
  rightMotorSpeed = 70 + motorSpeed - steeringValue;
  leftMotorSpeed = constrain(leftMotorSpeed, 0, 255); // Beperk PWM-waarde van 0 tot 255
  rightMotorSpeed = constrain(rightMotorSpeed, 0, 255);
  // Als PWM lager is dan 72, zet PWM-waarde op 0
  if (leftMotorSpeed < 72) {
    leftMotorSpeed = 0;
  }
  if (rightMotorSpeed < 72) {
    rightMotorSpeed = 0;
  }
  // Als rechtervoystick omhoog gaat > vooruit rijden
  if (ch1 > 1510 && ch1 < 2000) {
    analogWrite(motorLeft_IN1, leftMotorSpeed); // PWM-ingang
    digitalWrite(motorLeft_IN2, LOW); // Richting - Vooruit
    analogWrite(motorRight_IN1, rightMotorSpeed); // PWM-ingang
    digitalWrite(motorRight_IN2, LOW); // Richting - Vooruit
  }
  // Als rechtervoystick omlaag gaat > achteruit rijden
  if (ch1 > 1000 && ch1 < 1420) {
    digitalWrite(motorLeft_IN1, LOW); // Richting - Achteruit
    analogWrite(motorLeft_IN2, leftMotorSpeed); // PWM-ingang
    digitalWrite(motorRight_IN1, LOW); // Richting - Achteruit
    analogWrite(motorRight_IN2, rightMotorSpeed); // PWM-ingang
  }
  // Als rechtervoystick in het midden is, niet bewegen
  if (ch1 > 1420 && ch1 < 1520) {
    if (leftMotorSpeed < 75 && rightMotorSpeed < 75) {
      digitalWrite(motorLeft_IN1, LOW);
      digitalWrite(motorLeft_IN2, LOW);
      digitalWrite(motorRight_IN1, LOW);
      digitalWrite(motorRight_IN2, LOW);
    }
    // Als rechtervoystick alleen links of rechts beweegt, zonder omhoog of omlaag, beweeg tank links of rechts (alleen 1 motor beweegt)
    else {
      analogWrite(motorLeft_IN1, leftMotorSpeed); // PWM-ingang
      digitalWrite(motorLeft_IN2, LOW); // Richting - Vooruit
      analogWrite(motorRight_IN1, rightMotorSpeed); // PWM-ingang
      digitalWrite(motorRight_IN2, LOW); // Richting - Vooruit
    }
  }
  // LEDs regeling
  // Koplichten en achterlichten LEDs regeling
  if (ch6 > 1500) {
    digitalWrite(47, HIGH);
    digitalWrite(48, HIGH);
  } else {
    digitalWrite(47, LOW);
    digitalWrite(48, LOW);
  }
  // Ververlichting LEDs regeling
  if (ch8 == 1500) {
    digitalWrite(46, HIGH);
  }
  // Als rokkerschakelaar in positie 3 (2000 waarde) - knipperen met ververlichting LEDs
  else if (ch8 == 2000) {
    if (millis() >= time_now + ledBlinkPeriod) {
      time_now += ledBlinkPeriod;
      if (isOn == HIGH) {
        isOn = LOW;
      } else {
        isOn = HIGH;
      }
      digitalWrite(46, isOn);
    }
  } else {
    digitalWrite(46, LOW);
  }
  // Monitor batterijspanning
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.00 / 1023.00) * 3.02; // Converteer leeswaarden van 5V naar geschikte 12V
  // Stuur batterijspanningswaarde naar zender
  IBusSensor.loop();
  IBusSensor.setSensorMeasurement(1, voltage * 100);
}

Codeoverzicht

Met de IBusBM-bibliotheek lezen we binnenkomende data van de RC-zender.

// Lees data van de RC-zender
IBus.loop();
// ch0 - links en rechts; ch1 - vooruit en achteruit;
ch0 = IBus.readChannel(0); // ch0 - links en rechts
ch1 = IBus.readChannel(1); // ch1 - vooruit en achteruit
ch6 = IBus.readChannel(6); // ch6 - Koplichten
ch8 = IBus.readChannel(8); // ch8 - Ververlichting

De rechtervoystick, kanalen 0 en 1, worden gebruikt voor het besturen van de beweging van het platform, de twee rokkerschakelaars, kanaal 6 en 8, voor het besturen van de LEDs.

We converteren de binnenkomende data naar waarden geschikt voor PWM-regeling van de DC-motoren, wat van 0 tot 255 is.

// Converteer binnenkomende data naar geschikte PWM-waarde
steeringValue = map(ch0, 1000, 2000, -185, 185); // 0 tot 185 bereik, want dan voeg ik +70 toe om lage PWM-waarden te vermijden, zodat motoren niet starten
motorSpeed = map(ch1, 1000, 2000, -185, 185);
motorSpeed = abs(motorSpeed);
leftMotorSpeed = 70 + motorSpeed + steeringValue; // 70 + (0-185) + (0 - 185) = 70 - 255, dit bereik van 70 tot 255 wordt als PWM-waarde gebruikt
rightMotorSpeed = 70 + motorSpeed - steeringValue;
leftMotorSpeed = constrain(leftMotorSpeed, 0, 255); // Beperk PWM-waarde van 0 tot 255
rightMotorSpeed = constrain(rightMotorSpeed, 0, 255);

We sturen de PWM-waarden naar de drivers en motoren met de analogWrite()-functie op de juiste manier.

// Als rechtervoystick omhoog gaat > vooruit rijden
if (ch1 > 1510 && ch1 < 2000) {
  analogWrite(motorLeft_IN1, leftMotorSpeed); // PWM-ingang
  digitalWrite(motorLeft_IN2, LOW); // Richting - Vooruit
  analogWrite(motorRight_IN1, rightMotorSpeed); // PWM-ingang
  digitalWrite(motorRight_IN2, LOW); // Richting - Vooruit
}

Over het algemeen is de code niet zo gecompliceerd, omdat het robotplatform zelf geen gecompliceerde functies heeft.

Testen van de 3D-geprinte robot – Gedaagd robotplatform

Zodra we de code uploaden, kunnen we het robotplatform en de RC-zender inschakelen voor een test. Op het display van de zender zien we de LiPo-batterijspanning, evenals de ontvanger- en zenderspanning.

En daar is hij. Met de rechtervoystick kunnen we de beweging van het platform besturen. Met de linker rokkerschakelaar regelen we de koplichten en achterlichten LEDs, en met de rechter 3-stand rokkerschakelaar de ververlichting LEDs. De ververlichting LEDs hebben twee modi, altijd aan en een knippermodus.

We kunnen hier opmerken dat de motoren die ik installeerde, eigenlijk een beetje ondergemotoriseerd zijn voor dit platform.

We zien dat de voystick bijna bovenaan moet staan voordat de gedaagden beginnen te bewegen. Plus, ik kan de gedaagde heel makkelijk met mijn hand stoppen. Het veringssysteem en de gedaagdes zelf veroorzaken veel spanning en weerstand aan de motoren. Deze motoren zijn 888 RPM, wat prima is qua snelheid, maar ze zijn de kleinere motoren, goed voor slechts onder de 500mA.

Dus ik verving ze door mijn andere grotere motoren die ik had, maar ik kreeg eigenlijk bijna hetzelfde resultaat. Hoewel dit krachtigere motoren waren, was hun snelheidsreductie kleiner, of ze hadden hogere RPM van 1280, en dus kreeg ik hetzelfde resultaat.

Eigenlijk zijn ze niet zo slecht. Het robotplatform rijdt best goed met ze.

Eerlijk gezegd, het is echt leuk om dit ding rond te rijden, vooral met de LEDs knipperend en burnouts of donuts makend.

Echter, het plezier duurde niet lang, want zodra ik het buiten nam, stopte het heel snel met werken. Het probleem is de ondergemotoriseerde motoren, dat klopt, maar ook het ontwerp van de gedaagde schakels. Vuil zit gemakkelijk in ze vast waar de kettenradtanden ingaan.

Dus, ik herontwierp ze om een opening aan de andere kant te hebben, zodat het vuil door ze heen kan passeren. Ik maakte het kettenrad ook een beetje kleiner, door het met 0,2mm te verspringen, om een losser pasvorm tussen het kettenrad en de gedaagde te hebben.

Ik monteerde alles opnieuw met deze updates, en het platform was nu in staat om buiten te rijden. Hoewel de ondergemotoriseerde motoren weer een probleem waren. Het platform liep af en toe vast en kon niet opheuvelen. Mijn suggestie zou zijn om niet meer dan 500 RPM motor te nemen, en een sterkere met tenminste 1A of 2A nominal stroom.

Ik probeerde het platform eigenlijk met sterkere motoren. Die waren maar 20 RPM, wat natuurlijk te langzaam was voor plezier en donuts, maar het platform was nu net als een echte tank. Het kon letterlijk overal heen.

De 20 RPM motoren waren krachtig genoeg om elk obstakel op te klimmen. Ze waren echt langzaam, maar misschien zijn ze prima voor specifieke toepassingen. Mijn suggestie zou zijn: als we langzamere snelheden nodig hebben, ga voor motoren van ongeveer 50 RPM, en voor snellere snelheden, ongeveer 500 RPM.

Ik hoop dat je van deze video genoten hebt en iets nieuws geleerd hebt. Voel je vrij om vragen te stellen in de reacties hieronder en vergeet niet te abonneren voor toekomstige updates en bekijk mijn Arduino-projectenverzameling.

Productieproces

  1. Goedkope Infrarood Nabijheidssensor voor Raspberry Pi Met Alleen Digitale Pins
  2. Arduino-gebaseerde Druksensor & Datalogger voor Nauwkeurige Luchtdrukmonitoring
  3. Metaalbewerking onder de loep: gids voor moderne bewerkingsoperaties
  4. Arduino Uno WiFi Webserver: LED aan/uit schakelen via browser
  5. Waarom ontwerpers terugkeren naar natuurlijke materialen in productontwerp
  6. Real-time Arduino Weerklok: OLED-display voor tijd, datum & temperatuur
  7. Pristine-M: Geavanceerde droging van laagvochtige kool voor schonere, efficiëntere brandstof
  8. IJs: Een Rijke Geschiedenis, Moderne Productie en de Toekomst van Smaken
  9. Praatende Slimme Bril: Stemgestuurd Navigatiesysteem voor Visueel Beperkten
  10. Bouw een nauwkeurige lineaire servo-actuator met positie-terugkoppeling – Stapsgewijze handleiding
  11. De Evolutie van Diskettes: Van Magnetische Media naar Optische Opslag