M1 Rover
Componenten en benodigdheden
| × | 1 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 8 | ||||
| × | 8 | ||||
| × | 1 | ||||
| × | 1 |
Apps en online services
| ||||
| ||||
|
Over dit project
Nadat ik een aantal binnenrobots had gebouwd, besloot ik een buitenrobot te bouwen die door ruw terrein kan reizen. Ik noem het "M1-Robot."
M1-robotmotor kan gemakkelijk vier gelijkstroommotoren aandrijven die met Arduino rijden, dus het is perfect voor elk roboticaproject. Ik dacht dat dit een fantastisch hart zou zijn voor krachtigere robots, dus ontwierp ik de off-road 4-wheel-drive M1 van kras.
Het is niet alleen een RC-auto, hij kan worden geprogrammeerd om zelfrijdend te zijn volgens een reeks instructies of zelfs te worden bestuurd vanaf een externe computer, en hij kan worden gebruikt via gamecontrollers en aangepaste joysticks zoals een auto met afstandsbediening.
Stap 1:Ontwerp
Het ontwerpen van je eigen product of prototype is heel leuk, maar het wordt ingewikkelder als je besluit om het op levensgrote schaal te maken. Dus koos ik voor Google Sketch-up 2017 als krachtig en gemakkelijk ontwerptool waarmee je de blauwdrukken van je model kunt exporteren naar een lasersnijmachine of zelfs 3D-printer.
Ik heb de eerste drie weken besteed aan het ontwerpen en bouwen van de romp van de robot.
Wat betreft materialen, ik kreeg een plaat van 3 mm houten plank.
De niet zo mooie uiteindelijke bedrading van de robot, die vanwege tijdgebrek bestond uit het in de romp proppen van de hele roadkill.
Ik dacht dat een toepasselijke naam voor mijn robot M1Rover was. Omdat ik van plan ben om er een versie van te ontwikkelen in een reeks namen zoals M2, M3, enz. Het is ontworpen in een kit, het enige wat je hoeft te doen is het met enkele schroeven in elkaar te zetten.
Stap 2:Componenten en functies
⦁ Tot drie uur looptijd!
⦁ Ontworpen voor de Arduino Uno, Mega en Nano.
⦁ 5V-9V DC bedrijfsspanning
⦁ Een 3 mm dik houten chassis
⦁ Wielen met een diameter van 68 mm L298N Dual H-Bridge Motor/Stepper
⦁ 9v-batterijen om de DC-motoren van stroom te voorzien
⦁ 9v-batterijen om de Arduino van stroom te voorzien
⦁ LED-verlichting 7 voor achter en voor
⦁ HC-06 Bluetooth-module
⦁ Arduino-sensorschild v5.0
⦁ Ultrasone transducer HC SR04
Stap 3:De motorcontroller
H-Bridge's worden doorgaans gebruikt voor het regelen van de snelheid en richting van motoren, maar kunnen ook worden gebruikt voor andere projecten, zoals het aansturen van de helderheid van bepaalde verlichtingsprojecten, zoals krachtige LED-arrays.
⦁ Zorg ervoor dat je al je gronden aan elkaar hebt gebonden; Arduino, stroombron en de motorcontroller.
⦁ De PWM-pinnen zijn niet nodig als u geen PWM-functies wilt bedienen.
Stap 4:Chassis monteren
Het chassis is in een paar delen gesneden met een lasersnijder en zoals ik al eerder zei, is het model gemaakt in een kit die eenvoudig te monteren is, dus het enige dat u hoeft te doen is de onderstaande instructies te volgen.
Gezien het ontwerp was ook belangrijk en als het om RC-auto's gaat, moet het voor- en achterlichten bevatten. Aan de voorkant van de M1-Robot heb ik 4 witte LED's geplaatst, elk is verbonden met een weerstand van 220 ohm, en aan de achterkant heb ik 2 rode LED's geplaatst met elk een weerstand van 220 ohm. Deze LED's kunnen door dezelfde applicatie worden bestuurd
Stap 5:Circuits
Circuit was een beetje lastig, want toen je besloot om veel elektronische onderdelen tegelijkertijd te bedienen, moest je letten op de volgorde van elk onderdeel.
⦁ Arduino Sensor Shield 5.0
⦁ Arduino Uno R3 L298N Dual H-Bridge Motor/Stepper
⦁ 9v batterij om de gelijkstroommotoren op te laden
⦁ LED-verlichting 7 (2 achter) en (4 voor)
⦁ HC-06 Bluetooth-module
⦁ Ultrasone transducer HC SR04
⦁ Servomotor 9g
⦁ Actieve zoemer
⦁ 4 DC-motoren met wielen
Stap 6:Software
Ik heb een aantal dingen overwogen tijdens het schrijven van de code van M1-Robot, en met GUI-software kun je meer informatie krijgen over de robotstatus.
De basiscode voor de starterkit, kan worden bediend via mobiel of laptop via Bluetooth:
int frontled =3; // led int rearled =4; int outPin1 =5; //motor1 int uitPin2 =6; //motor1 int uitPin4 =11; //motor2 int uitPin3 =12; //motor2 char bt =0; //BT int buzzerPin =2;const int pingPin =9; // Triggerpin van ultrasone sensorconst int echoPin =8; // Echo Pin van Ultrasone Sensor/*----------------------------------------- -------------------------------------*/ void setup() { Serial.begin (9600); pinMode (outPin1, OUTPUT); pinMode (outPin2, OUTPUT); pinMode(outPin3,OUTPUT); pinMode(outPin4,OUTPUT); pinMode (vooraan, OUTPUT); pinMode (buzzerPin, OUTPUT);} void loop() {if (Serial.available()> 0) { bt =Serial.read(); digitalWrite (vooraan, 1); lange duur, inches, cm; pinMode (pingPin, UITGANG); digitalWrite (pingPin, LAAG); vertragingMicroseconden(2); digitalWrite (pingPin, HOOG); vertraging Microseconden (10); digitalWrite (pingPin, LAAG); pinMode (echoPin, INPUT); duur =pulseIn(echoPin, HOOG); inches =microsecondenToInches(duur); cm =microsecondenToCentimeters(duur); if (cm> 10 ){ // afstand tot stop /*________________________________________________________________________*/ if(bt =='F') // ga vooruit {digitalWrite(outPin1,HIGH); digitalWrite(outPin2,LOW); digitalWrite (outPin3, HOOG); digitalWrite (outPin4, LAAG); } else if (bt =='B') // ga achteruit {digitalWrite(outPin1,LOW); digitalWrite(outPin2,HIGH); digitalWrite (outPin3, LAAG); digitalWrite (outPin4, HOOG); } else if (bt =='S') //stop!! {digitalWrite(outPin1,LOW); digitalWrite(outPin2,LOW); digitalWrite (outPin3, LAAG); digitalWrite (outPin4, LAAG); } else if (bt =='R') //right { digitalWrite (outPin1,HIGH); digitalWrite(outPin2,LOW); digitalWrite (outPin3, LAAG); digitalWrite (outPin4, LAAG); } else if (bt =='L') // left { digitalWrite (outPin1,LOW); digitalWrite(outPin2,LOW); digitalWrite (outPin3, HOOG); digitalWrite (outPin4, LAAG); } else if (bt =='I') //forward right {digitalWrite(outPin1,HIGH); digitalWrite(outPin2,LOW); digitalWrite (outPin3, LAAG); digitalWrite (outPin4, HOOG); } else if (bt =='G') //forward left {digitalWrite(outPin1,LOW); digitalWrite(outPin2,HIGH); digitalWrite (outPin3, HOOG); digitalWrite (outPin4, LAAG); } } else{ digitalWrite (buzzerPin, HOOG); vertraging (500); digitalWrite (buzzerPin, LAAG); vertraging (500); } }}lange microsecondenToInches(lange microseconden) { retour microseconden / 74/2;}lange microsecondenToCentimeters(lange microseconden) { retour microseconden / 29/2;}
De Arduino-code is compatibel met alle soorten controllers omdat alle elektronische onderdelen zijn geprogrammeerd om via seriële poortorders te werken, dus u kunt Bluetooth-module zender/ontvanger, pc, mobiele telefoon gebruiken.
⦁ C# windows applicatie (screenshot bijgevoegd)
Stap 7:Pakketten
STARTER
Dit M1-Robot-pakket omvat basiscomponenten, terwijl de bovenplaat een eenvoudige montage van eventuele detectie-, manipulatie- of computerhardware mogelijk maakt. Bevestig eenvoudig sensoren aan de boord- en Rover-voedingen om aan de slag te gaan.
ONTDEKKER
Het Explorer-pakket maakt autonome basisfunctionaliteit binnen en buiten mogelijk, en in plaats van een IP-camera heb ik een mobiele telefooncamera gebruikt die via een IP-adres met internet is verbonden.
MAPPING
Het Explorer-pakket maakt natuurlijk basis GPS-tracking mogelijk, terwijl het voertuig buiten is, is het erg cool als je de coördinatenpaden in realtime bekijkt.
MANIPULATIE
Interactie met de wereld met een robotarm en een tweevingerige grijper van 50 mm.
Belangrijke tip:
Niet alle servo's hebben een volledige rotatie van 180 graden. Velen niet. Je kunt een test schrijven om te bepalen waar de mechanische limieten liggen. Gebruik servo.writeMicroseconds in plaats van servo.write Ik vind dit beter omdat je 1000-2000 als basisbereik kunt gebruiken. En veel servo's ondersteunen buiten dat bereik, van 600 tot 2400.
Probeer dus verschillende waarden en kijk waar je de buzz krijgt die je vertelt dat je de limiet hebt bereikt. Blijf dan alleen binnen die grenzen als je schrijft. U kunt deze limieten instellen wanneer u servo.attach(pin, min, max)
. gebruiktBewerken:ik moet zeggen dat als je wilt, je de min en max microseconden in de bijlage kunt instellen, en dan gewoon servo.write kunt gebruiken. Het gebruikt map() om de waarde van 0-180 graden die u doorgeeft te veranderen in een waarde van microseconden.
Dat zal het snel zijn als je hem bij de eindstop houdt - hij trekt veel stroom en warmt snel op - het is maar al te gemakkelijk om een servo te "koken" door hem op deze manier voor een langere tijd te laden.
Vind het ware bewegingsbereik en zorg ervoor dat de code het niet voorbij de eindstops probeert te duwen, de Arduino-functie constrain() is hiervoor handig:
servo.write (beperking (hoek, 10, 160)); // beperk de hoek in het bereik 10..160
Aangepaste onderdelen en behuizingen
m1rover_dxf_hackaday_4o7WTGHUGE.dxfSchema's
Productieproces