Bouw een hoogwaardige 3D-geprinte RC-tank met versnellingsbak met dubbele snelheid
In deze tutorial laat ik je zien hoe ik een beest van een 3D-geprinte RC-tank of een radiografisch bestuurd rupsvoertuig heb gebouwd, met een strak, geheel zwart ontwerp, coole LED-verlichting en een versnellingsbak met dubbele snelheid. Dat klopt, ik heb speciaal een versnellingsbak voor deze tank ontworpen, zodat ik een lagere of hogere versnelling kan kiezen, afhankelijk van het terrein of de toepassing waarvoor hij wordt gebruikt, en zo een hoger koppel of een hogere snelheid kan krijgen.
Je kunt de volgende video bekijken of de schriftelijke tutorial hieronder lezen.
Overzicht
Als je mij volgt, weet je misschien dat ik een tijdje geleden al een 3D-geprinte RC-tank heb gebouwd, die cool was, maar een beetje te weinig kracht. Daarom gebruik ik voor deze build nu een gelijkstroommotor van 200 W voor elke baan en in combinatie met deze versnellingsbak heeft de tank voldoende kracht om elk terrein te overwinnen of om plezier te hebben bij het maken van burn-outs of donuts.
Over plezier gesproken, ik heb een adresseerbare ledstrip voor de lampen geïnstalleerd, die eindeloze mogelijkheden biedt voor het creëren van verbluffende lichteffecten. Voor deze video heb ik een politielicht-stroboscoopeffect gemaakt, wat zo gaaf is om ermee rond te rijden, vooral 's nachts
Wat de ophanging betreft, wordt de tank aan elke kant ondersteund door drie schroefveren en schokdempers, met voor elk daarvan twee wielen. Hierdoor kan het voertuig soepel over oneffen terrein rijden en obstakels beklimmen, terwijl het contactoppervlak tussen de rupsbanden en het terrein behouden blijft.
Uiteraard is alles 3D-geprint en zijn er 3D-bestanden beschikbaar om te downloaden, zodat je er zelf een kunt bouwen.
Voor het besturen van de tank gebruik ik een goedkope commerciële RC-zender die er opdrachten naar stuurt.
Bij de tank bevindt zich een geschikte RC-ontvanger die de commando's ontvangt en naar een microcontroller stuurt. Het brein van dit platform is een Atmega2560 microcontroller-gebaseerd bord en om alles eenvoudig met elkaar te verbinden heb ik een op maat gemaakte printplaat gemaakt die eenvoudig bovenop het bord kan worden bevestigd.
Niettemin, maak je nu vast, want ik zal je door het hele proces van het bouwen van deze RC-tank leiden, vanaf het ontwerp, het 3D-printen, het assembleren en aansluiten van de elektronische componenten, tot het programmeren van de microcontroller.
De RC-tank ontwerpen
Ik heb deze tank ontworpen met Onshape.
Onshape is het professionele cloud-native 3D CAD- en PDM-systeem dat ik voor mijn projecten gebruik.
Ik raad werktuigbouwkundigen en productontwerpers aan om Onshape eens te bekijken. Jij en je bedrijf kunnen Onshape Professional tot 6 maanden gratis gebruiken op https://Onshape.pro/HowtoMechatronics
De initiële invoerparameters voor het ontwerp waren de gelijkstroommotoren, of hun afmetingen en het toerental. Deze motoren zijn behoorlijk omvangrijk en hebben 3000 tpm. Dat is een te hoog toerental voor deze tank, daarom heb ik deze versnellingsbak ontworpen, die de snelheid terugbrengt naar twee verschillende waarden.
Deze versnellingsbak werkt net zoals een handgeschakelde versnellingsbak in een auto werkt. Er is een versnellingspook die hem in plaats van met de hand te verplaatsen, hier beweegt met behulp van een servomotor, en hij kan kiezen welke van de twee uitgaande tandwielsets als uiteindelijke uitgang zal worden ingeschakeld.
De initiële reductieverhouding van de versnellingsbak is 1,88:1, die vast staat, en dan kunnen we kiezen voor de lage versnelling, die een extra reductie van 2,76:1 heeft, of de hoge versnelling, die een verhouding van 1:1 heeft. In de lagere versnelling is de totale reductie dus 5,2, oftewel ongeveer 570 tpm, en in de hogere versnelling slechts 1,88, oftewel ongeveer 1600 tpm.
We zullen later in deze video meer details zien hoe de versnellingsbak werkt.
De volgende invoerparameter voor het tankontwerp waren de RC-schokdempers die ik kreeg. Ze hebben een lengte van 70 mm wanneer ze zijn uitgeschoven, met een veerweg van 15 mm. Ik wilde een wat grotere verticale reisafstand voor de wielen krijgen, dus plaatste ik ze in deze configuratie en kreeg een verticale reisafstand van 22 mm.
Omdat dit een draaistelsysteem is waarbij een paar wielen aan die bewegende as zijn bevestigd, kunnen de wielen bovendien rond die as draaien en zo extra verticale verplaatsingen maken. Het is duidelijk dat dit zorgt voor een soepeler rijgedrag en een beter contact tussen de baan en het oppervlak eronder.
Als we de voorste wielen van dichterbij bekijken, kunnen we zien dat ze verbonden waren met het tussenwiel aan de voorkant om voor dynamische spanning op de baan te zorgen. Wanneer de voorwielen omhoog gaan, wordt de spooromtrek kleiner en wordt de spanning losser.
Wanneer dat gebeurt, wordt bij deze opstelling het tussenwiel naar voren geduwd om de rupsband te spannen. Met deze verbinding kunnen we de baan ook statisch spannen, door deze bout en afstandsmoer aan te passen.
Aan de achterkant hebben we het tandwiel dat uit drie delen bestaat. De askoppeling en het linker- en rechtergedeelte van het tandwiel zijn allemaal met elkaar verbonden met drie M3-bouten.
De belangrijkste afmeting hier op het tandwiel is de toonhoogte, omdat deze moet overeenkomen met de toonhoogte van de baan. De steek is hier 11 mm en ik heb ervoor gekozen dat het tandwiel 20 tanden heeft, wat me een steekdiameter van het tandwiel van ongeveer 69 mm opleverde. Het idee voor de grootte van het tandwiel was om groot genoeg te zijn zodat de rupsband buiten het tanklichaam blijft.
De steek van 11 mm werd feitelijk bepaald door het ontwerp van de rupsschakel. Mijn doel voor de tracklink was om zo compact mogelijk te zijn en met slechts één extra onderdeel of pin te verbinden met de volgende link, en tegelijkertijd sterk genoeg te zijn om met een 3D-printer te worden gemaakt.
Bovendien wilde ik bij het 3D-printen elk gebruik van ondersteuningsmateriaal voor het onderdeel vermijden, wat ik met dit ontwerp ook daadwerkelijk heb weten te bereiken.
Om de rupsschakels met elkaar te verbinden, was ik van plan om pennen met een diameter van 2 mm te gebruiken. Daarom heb ik de ene kant op 2,1 mm gedimensioneerd, zodat deze strak zou passen, en de andere kant op 2,4 mm, zodat de rupsschakels vrij konden draaien.
De tandwieltanden grijpen aan op de rupsschakels bij de buitenste cilindrische vorm. De rupsschakelcilinder heeft een straal van 4,4 mm, terwijl het tandwiel een straal van 4,9 mm heeft, zodat deze goed past en goed werkt.
De hoofdbehuizing waar alles op aangesloten is, moest groot genoeg zijn voor de twee versnellingsbakken en uiteraard ruimte bieden voor de elektronica en de accu. Dit alles resulteerde in een totale tankafmeting van 547 x 397 mm. Dat is behoorlijk groot, groter dan het gebruikelijke bed van een 3D-printer, dus daarom heb ik de grote delen in twee delen verdeeld, zodat we ze kunnen printen op een 3D-printer met een bed van 300 mm. Houd er rekening mee dat als u het op een kleinere 3D-printer met 220 mm wilt afdrukken, het model in 4 secties moet worden verdeeld. Die versie zal ik ook in de 3D-bestanden aanleveren.
Voor het monteren van de tank hebben we verschillende M3- en M4-bouten en -moeren nodig, evenals enkele schroefdraadinserts en lagers. Hieronder vindt u een volledige lijst met alle componenten die nodig zijn voor dit project. Uiteraard vindt u hier ook het 3D-model en de STL-bestanden die nodig zijn voor het 3D-printen.
3D-model- en STL-downloadbestanden
Je kunt het 3D-model van deze RC-tank rechtstreeks in je webbrowser bekijken met Onshape.
Je kunt het 3D-model van dit RC-tank-/robotplatform, evenals de STL-bestanden voor 3D-printen, verkrijgen bij Cults3D.
3D-printen
Ik heb mijn Creality Ender-3 V3 Plus 3D-printer gebruikt om de meeste onderdelen voor deze tank te printen.
Bij 3D-printen is het belangrijk om de functie Horizontale expansie te gebruiken, of nu in de nieuwe Creality Print-slicer die ik gebruikte, heet dit X-Y-contourcompensatie. Als we deze instellingen standaard laten staan, zijn de buitenafmetingen van de afdrukken en de gaten meestal kleiner dan die van het originele model en kunnen we problemen ondervinden bij het monteren ervan.
In de Creality Print-slicer heb ik een waarde van –0,07 gebruikt voor de X-Y-contourcompensatie, en plus 0,07 voor de X-Y-gatcompensatiefunctie. Natuurlijk moet u enkele testafdrukken maken om te zien welke waarden u de beste resultaten opleveren op uw 3D-printer.
Voor het 3D-printen van de spoorschakels heb ik vlotten gebruikt als hechting op de bouwplaat, omdat hun basiscontactoppervlak met de bodemplaat een beetje klein is en mogelijk niet goed blijft plakken als de hechting van het bed op uw printer niet zo goed is.
De Creality Ender-3 V3 Plus heeft een bouwplaat van 300x300 mm, zodat ik het hoofdgedeelte van de tank in twee delen kon printen. Zelfs in twee delen zijn de onderdelen nog steeds behoorlijk groot en drijven ze de 3D-printer tot het uiterste. Maar de Creality Ender-3 V3 Plus slaagde erin het aan te kunnen en deed uitstekend werk bij het printen van deze grote onderdelen.
Ik kan deze 3D-printer aanbevelen aan iedereen die op zoek is naar een groot volume en een snelle 3D-printer. Het is een CoreXZ 3D-printer die snelheden tot 600 mm/s kan bereiken en met zijn stevige frame een echt goede printkwaliteit biedt. Shout-out naar Creality voor het ter beschikking stellen van deze 3D-printer.
Bekijk de Creality Ender-3 V3 Plus – VS-winkel:https://shrsl.com/4rtkk; EU-winkel:http://shrsl.com/4rtkm; Amazon:https://amzn.to/3VjEoRH
RC-tank monteren
Hier zijn alle 3D-geprinte onderdelen, zodat we kunnen beginnen met het monteren van de tank. Eerlijk gezegd is er zoveel 3D-printen. Het duurt enkele dagen om alles te printen, en niet alleen tijd, maar we hebben ook meerdere spoelen met filament nodig.
Alleen al voor de tracklinks hebben we, omdat er in totaal 214 tracklinks zijn, ongeveer 500 gram en 30 uur aan 3D-printen nodig. Het hoofdgedeelte van de tank heeft ongeveer 1 kg filament nodig, indien verdeeld in twee secties zoals hier, 500 g en ongeveer 12 tot 18 uur voor elke sectie. Bovendien moeten veel onderdelen met ondersteuning in 3D worden geprint, dus we moeten wat tijd besteden aan het schoonmaken.
BOM
Hier is een lijst met componenten die nodig zijn voor het samenstellen van dit RC-tankproject. De lijst met de elektronische componenten vindt u hieronder in het schakelschemagedeelte van het artikel.
M3x10mm – 10
M3x16mm – 20
M3x20mm – 10
M3x25mm – 10
M3x30mm – 10
M3x16mm verzonken – 20
M4x16mm – 10
M4x35mm – 20
M4x40mm – 20
M5x40mm – 2 M3 borgmoer – 50
M4 borgmoer – 40
M5 moer – 6
Openbaarmaking:dit zijn affiliatielinks. Als Amazon Associate verdien ik aan in aanmerking komende aankopen.
Elektronica – RC-tankcircuitschema
laten we eens kijken naar de elektronica voor de RC-tank en uitleggen hoe deze werkt. Het brein van deze RC-tank is een ATmega2560-microcontrollergebaseerd bord.
U kunt de benodigde componenten voor dit project verkrijgen via de onderstaande links:
– 1kx1
– 2kx1
– 240 x1Amazone | AliExpress Condensatoren
– 0,1uFx1
– 1uFx1
– 400uFx1
Amazone | AliExpress
Openbaarmaking:dit zijn affiliatielinks. Als Amazon Associate verdien ik aan in aanmerking komende aankopen.
Aangepast PCB-ontwerp
Om de elektronische componenten overzichtelijk te houden, heb ik een op maat gemaakte printplaat voor de RC-tank ontworpen. De printplaat zal compatibel zijn met het ATmega2560-microcontrollergebaseerde bord dat er rechtstreeks bovenop kan worden gemonteerd.
Ik heb de printplaat bij PCBWay besteld. Hier kunnen we eenvoudig het Gerber-bestand uploaden, de eigenschappen van onze printplaat kiezen en deze tegen een redelijke prijs bestellen.
Ik heb geen van de standaardeigenschappen gewijzigd, behalve de PCB-kleur, die ik blauw heb gekozen. Je kunt de Gerber vinden en downloaden via de PCBWay-projectdeelcommunity, waar je de PCB ook rechtstreeks kunt bestellen.
De montage van de RC-tank voltooien
In deze sectie leg ik uit hoe je alles met elkaar kunt verbinden en deze RC-tank compleet kunt maken.
Aan deze sectie wordt nog gewerkt.
De RC Tank programmeren – Arduino-code
In deze sectie leg ik uit hoe de Arduino-code achter de RC-tank werkt. Hier kunt u de code downloaden:
Codeoverzicht
Met behulp van de IBusBM-bibliotheek lezen we dus binnenkomende gegevens van de RC-zender.
// Reading the data comming from the RC Transmitter
IBus.loop();
ch0 = IBus.readChannel(0); // ch0 - left and right;
ch1 = IBus.readChannel(1); // ch1 - forward and backward;
ch6 = IBus.readChannel(6); // ch6 - Gear shifter
ch7 = IBus.readChannel(7); // ch7 - Police light strobe effect
ch8 = IBus.readChannel(8); // ch8 - All white LEDs
ch9 = IBus.readChannel(9); // ch9 - Left and Right white LEDsCode language: JavaScript (javascript) De rechter joystick, kanalen 0 en 1 worden gebruikt voor het besturen van de beweging van de tank, de linker tuimelschakelaar, of kanaal 6, voor het besturen van de servo voor het schakelen, en de andere drie tuimelschakelaars voor het besturen van de LED's.
We zetten de binnenkomende gegevens om in waarden die geschikt zijn voor PWM-besturing van de DC-motoren, namelijk van 0 tot 255.
// convert the incoming date into suitable PWM value
steeringValue = map(ch0, 1000, 2000, -205, 205); // 0 to 205 range because then I add +50 in order to avoid low PWM values as to motors won't start if so
motorSpeed = map(ch1, 1000, 2000, -205, 205);
motorSpeed = abs(motorSpeed);
leftMotorSpeed = 50 + motorSpeed + steeringValue; // 50 + (0-205) + (0 - 205 ) = 50 - 255 so this range from 50 to 255 is used as PWM value
rightMotorSpeed = 50 + motorSpeed - steeringValue;
leftMotorSpeed = constrain(leftMotorSpeed, 0, 255); // constrain the PWM value from 0 to 255
rightMotorSpeed = constrain(rightMotorSpeed, 0, 255);
// if PWM is lower than 52, set PWM value to 0
if (leftMotorSpeed < 52) {
leftMotorSpeed = 0;
}
if (rightMotorSpeed < 52) {
rightMotorSpeed = 0;
}
Code language: JavaScript (javascript) We sturen de PWM-waarden naar de stuurprogramma's en de motoren met behulp van de analogWrite()-functie.
// if right joystick goes up > move forward
if (ch1 > 1510 && ch1 < 2000) {
digitalWrite(M1_RPWM, 0);
analogWrite(M1_LPWM, leftMotorSpeed);
digitalWrite(M2_RPWM, 0);
analogWrite(M2_LPWM, rightMotorSpeed);
}
// if right joystick goes down > move backward
if (ch1 > 1000 && ch1 < 1490) {
analogWrite(M1_RPWM, leftMotorSpeed);
digitalWrite(M1_LPWM, 0);
analogWrite(M2_RPWM, rightMotorSpeed);
digitalWrite(M2_LPWM, 0);
}
// if right joystick is in the middle, don't move
if (ch1 > 1490 && ch1 < 1510) {
if (leftMotorSpeed < 50 && rightMotorSpeed < 50) {
digitalWrite(M1_LPWM, 0);
digitalWrite(M1_RPWM, 0);
digitalWrite(M2_LPWM, 0);
digitalWrite(M2_RPWM, 0);
}
// if right joystick move just left or right, without going up or down, move the tank left or right (in place)
else if (ch0 < 1490 || ch0 > 1510) {
analogWrite(M1_RPWM, rightMotorSpeed);
analogWrite(M1_LPWM, leftMotorSpeed);
analogWrite(M2_RPWM, leftMotorSpeed);
analogWrite(M2_LPWM, rightMotorSpeed);
}
}Code language: JavaScript (javascript) Voor de servomotor en het schakelen van de versnellingen moet u de waarden aanpassen aan de servo die u gebruikt.
//======= Gear shift ====
if (ch6 == 2000) {
myservo.write(140);
}
if (ch6 == 1000) {
myservo.write(40);
}Code language: JavaScript (javascript) Wat de verlichtingsbediening betreft, controleren we welke tuimelschakelaar is geschakeld en geven we aan de hand daarvan aan dat elke LED afzonderlijk moet oplichten als dat nodig is.
//===== LIGHTS Control ===
// Front and back lights LEDs control
if (ch9 == 2000) {
frontLeds[0] = CRGB (255, 255, 255);
frontLeds[1] = CRGB (255, 255, 255);
frontLeds[2] = CRGB (255, 255, 255);
frontLeds[3] = CRGB (255, 255, 255);
frontLeds[4] = CRGB (255, 255, 255);
frontLeds[5] = CRGB (0, 0, 0);
frontLeds[6] = CRGB (0, 0, 0);
frontLeds[7] = CRGB (0, 0, 0);
frontLeds[8] = CRGB (0, 0, 0);
frontLeds[9] = CRGB (0, 0, 0);
frontLeds[10] = CRGB (0, 0, 0);
frontLeds[11] = CRGB (255, 255, 255);
frontLeds[12] = CRGB (255, 255, 255);
frontLeds[13] = CRGB (255, 255, 255);
frontLeds[14] = CRGB (255, 255, 255);
frontLeds[15] = CRGB (255, 255, 255);
backLeftLeds[0] = CRGB ( 255, 0, 0);
backLeftLeds[1] = CRGB ( 255, 0, 0);
backLeftLeds[2] = CRGB ( 255, 0, 0);
backRightLeds[0] = CRGB ( 255, 0, 0);
backRightLeds[1] = CRGB ( 255, 0, 0);
backRightLeds[2] = CRGB ( 255, 0, 0);
}
if (ch9 != ch9State) {
if (ch9 == 1000) {
FastLED.clear();
}
ch9State = ch9;
FastLED.show();
}
// Front and back lights LEDs control
if (ch8 == 1500) {
frontLeds[0] = CRGB (255, 255, 255);
frontLeds[1] = CRGB (255, 255, 255);
frontLeds[2] = CRGB (255, 255, 255);
frontLeds[3] = CRGB (255, 255, 255);
frontLeds[4] = CRGB (255, 255, 255);
frontLeds[5] = CRGB (255, 255, 255);
frontLeds[6] = CRGB (255, 255, 255);
frontLeds[7] = CRGB (255, 255, 255);
frontLeds[8] = CRGB (255, 255, 255);
frontLeds[9] = CRGB (255, 255, 255);
frontLeds[10] = CRGB (255, 255, 255);
frontLeds[11] = CRGB (255, 255, 255);
frontLeds[12] = CRGB (255, 255, 255);
frontLeds[13] = CRGB (255, 255, 255);
frontLeds[14] = CRGB (255, 255, 255);
frontLeds[15] = CRGB (255, 255, 255);
backLeftLeds[0] = CRGB ( 255, 0, 0);
backLeftLeds[1] = CRGB ( 255, 0, 0);
backLeftLeds[2] = CRGB ( 255, 0, 0);
backRightLeds[0] = CRGB ( 255, 0, 0);
backRightLeds[1] = CRGB ( 255, 0, 0);
backRightLeds[2] = CRGB ( 255, 0, 0);
}
....and so on...Code language: JavaScript (javascript) Het politielicht-stroboscoopeffect kostte me wat tijd om het te coderen, maar het resultaat was echt gaaf.
De 3D-geprinte tank testen
Zodra we de code hebben geüpload, kunnen we het robotplatform en de RC-zender inschakelen om deze uit te testen. Op het display van de zender kunnen we de LiPo-accuspanning aflezen, evenals de spanning van de ontvanger en de zender.
Hier kunnen we ook zien hoe het schakelen in beweging werkt. Met de linker tuimelschakelaar kunnen we de versnellingen schakelen terwijl de motoren draaien. Het is zo eigenlijk, nietwaar.
Met de andere 3 tuimelschakelaars bedienen we de tankverlichting. Er zijn 4 verschillende modi. Vijf LED's aan elke kant in witte kleur, in de tweede modus zijn alle witte LED's aan, in de derde modus knipperen alle witte LED's en natuurlijk, de coolste modus, een stroboscoopeffect van politielichten. De tank kan bewegen als een van deze lichtmodi is ingeschakeld.
Toch maar even een korte opmerking. Omdat de LED's worden gevoed via de 5V die afkomstig is van de LM350-spanningsregelaar, kan deze behoorlijk heet worden, vooral als alle witte LED's in gebruik zijn. Elke LED verbruikt ongeveer 50-60 mA stroom voor witte kleur, dus dat is bijna ongeveer 1 A stroom.
De LM350 kan tot 3A stroom verwerken, maar heeft daarvoor een grote passende koeling nodig. Ik heb hem op een verkeerde locatie op de aangepaste printplaat geplaatst, zodat ik geen geschikt koellichaam kon toevoegen. Ik heb echter geprobeerd wat kleine koellichamen van een stappenmotor toe te voegen.
Ze helpen een beetje, maar als alle witte LED's langer branden, zou de spanningsregelaar oververhit raken. Maar op alle andere modi gaat het prima, dus ik heb de dingen gelaten zoals ze zijn. Als we dit probleem willen oplossen, kunnen we een aparte buck-converter met een nominale stroom van 8A toevoegen. Deze buck-converter kan worden gevoed vanaf de 12V-uitgangsterminal, en de door ons ingestelde 5 of 6V-uitgang kan naar de 6V-terminal op de printplaat gaan en we kunnen de 6V-rail gebruiken voor het voeden van de LED's.
Niettemin hoop ik dat je deze video leuk vond en iets nieuws hebt geleerd. Veel plezier met het bouwen en besturen van deze RC-tank. Zoals ik eerder al zei, ben ik van plan in toekomstige video's enkele upgrades aan deze tank uit te voeren. Ik zou er een robotarm bovenop kunnen plaatsen, of misschien een sneeuwblazer kunnen maken of iets dergelijks. Dus houd ons in de gaten.
Productieproces
- Romelt-proces voor het maken van ijzer
- Robotgrijper
- Onderzoek naar belangrijke toepassingen van matrijsontwerp in de moderne productie
- Een Wii Nunchuk gebruiken met Arduino
- Talking Portal 2 Turret Gun
- Motorsmeersysteem begrijpen
- Wat is maatwerk? Wanneer en waarom heb je het nodig?
- Een nadere blik op centrumloos slijpen
- Detectie van gevaarlijke gaslekken
- Veiligheidsmaatregelen bij booglassen
- Otto DIY+ Arduino Bluetooth-robot eenvoudig in 3D te printen