Hoe maak je een doe-het-zelf Arduino en Bluetooth-gestuurde robotarm?
In de afgelopen eeuw is robotica het meest opkomende onderzoeksgebied. Robots hebben de controle overgenomen over bijna alles wat mensen vroeger deden. We zien autonome robots verschillende taken uitvoeren in onze samenleving. Er zijn ook enkele op afstand bestuurbare robots die ons helpen bij het uitvoeren van verschillende bewerkingen. Van het maken van nanocircuits op het gebied van engineering tot het uitvoeren van complexe operaties op medisch gebied, robots zijn betrouwbaarder dan mensen.
In dit project gaan we een robotarm maken die wordt aangestuurd door een Arduino-microcontroller. Het wordt bediend via Bluetooth met behulp van een Android-app voor afstandsbediening.
Hoe een robotarm te besturen met Arduino?
Nu zoals we het abstract van ons project kennen. Laten we wat meer informatie over het circuit verzamelen en beginnen met het bouwen van een Bluetooth-gestuurde robotarm en deze bedienen via Bluetooth.
Stap 1: De componenten verzamelen
De beste manier om een project te starten, is door een volledige lijst met componenten te maken. Dit is niet alleen een intelligente manier om een project te starten, maar het bespaart ons ook veel ongemakken midden in het project. Een lijst met onderdelen van dit project wordt hieronder gegeven:
Stap 2: de componenten bestuderen
Aangezien we een volledige lijst hebben van alle componenten die we gaan gebruiken, gaan we een stap verder en gaan we door een korte studie van alle componenten.
Arduino Nano is een microcontrollerbord dat verschillende bewerkingen in verschillende circuits uitvoert. Het vereist een C-code dat vertelt het bestuur welke taken het moet uitvoeren en hoe. Het heeft 13 digitale I / O-pinnen, wat betekent dat we 13 verschillende apparaten kunnen bedienen. Arduino Nano heeft exact dezelfde functionaliteit als Arduino Uno, maar dan in een vrij klein formaat. De microcontroller op het Arduino Nano-bord is ATmega328p.Gebruik Arduino Mega als je meer dan 13 apparaten wilt bedienen.
HC-05 draadloze Bluetooth seriële transceiver: We hebben draadloze communicatie nodig in dit project, dus we zullen Bluetooth-technologie gebruiken en voor die module die zal worden gebruikt is HC-05. Deze module heeft verschillende programmeerbare baudrates, maar de standaard baudrate is 9600 bps. Het kan worden geconfigureerd als master of slave, terwijl een andere module HC-06 alleen in slave-modus kan werken. Deze module heeft vier pinnen. Een voor VCC (5V) en de overige drie voor GND, TX en RX. Het standaard wachtwoord van deze module is 1234 of 0000. Als we willen communiceren tussen twee microcontrollers of willen communiceren met een apparaat met Bluetooth-functionaliteit, zoals een telefoon of laptop, helpt HC-05 ons daarbij. Er zijn al verschillende Android-applicaties beschikbaar wat dit proces een stuk eenvoudiger maakt.
Een typisch Robotarmbestaat uit meerdere segmenten en heeft meestal 6 gewrichten. Het bevat minimaal 4 stappenmotoren die worden aangestuurd door de computer. Stappenmotoren verschillen van andere DC-motoren. Ze bewegen precies in exacte stappen. Deze robotarmen worden gebruikt om verschillende bewerkingen uit te voeren. We kunnen ze handmatig bedienen via een afstandsbediening of we kunnen ze programmeren om autonoom te werken.
Stap 3: De componenten monteren
Nu zoals we weten over de werking van alle gebruikte hoofdcomponenten. Laten we beginnen met het monteren ervan en een circuit maken om een op afstand bestuurbare robotarm te bouwen.
- Bevestig het Arduino Nano-bord op het breadboard. De Arduino wordt gevoed via de positieve en negatieve draad van de adapter.
- Plaats de Bluetooth-module ook op het breadboard. Schakel de Bluetooth-module in via Arduino. Verbind de Tx-pin van de Bluetooth-module met de Rx-pin van het Arduino Nan-bord en verbind de Rx-pin van de Bluetooth-module met de Tx-pin van het Arduino Nano-bord.
- Zoals we weten zijn er 4 stappenmotoren. Elk heeft een technische naam. Ze worden genoemd Elleboog, Schouder, Baseren, en Grijper. De Vcc en aarde van alle motoren zijn gemeenschappelijk en worden aangesloten op de plus en min van de 6V-adapter. De signaalpin van alle vier motoren wordt verbonden met pin5, pin6, pin9 en pin11 van Arduino Nano.
- Zorg ervoor dat de aansluitingen die u hebt gemaakt, voldoen aan het volgende schakelschema.
Stap 4: Aan de slag met Arduino
Als u nog niet bekend bent met de Arduino IDE, hoeft u zich geen zorgen te maken, want hieronder wordt een stapsgewijze procedure voor het instellen en gebruiken van de Arduino IDE met een microcontrollerbord uitgelegd.
- Download de nieuwste versie van Arduino IDE van Arduino.
- Sluit je Arduino Nano-bord aan op je laptop en open het configuratiescherm. Klik vervolgens op Hardware en geluid. Klik nu op Apparaten en printers.Zoek hier de poort waarop uw microcontroller-kaart is aangesloten. In mijn geval wel COM14maar het is anders op verschillende computers.
- Klik op het menu Tool en zet het bord op Arduino Nano uit het vervolgkeuzemenu.
- Stel in hetzelfde Tool-menu de poort in op het poortnummer dat u eerder in het Apparaten en printers.
- Stel in hetzelfde toolmenu de processor in op ATmega328P (oude bootloader).
- Om code te schrijven om de servomotoren te bedienen, hebben we een speciale bibliotheek nodig die ons helpt bij het schrijven van verschillende functies voor servomotoren. Deze bibliotheek is samen met de code bijgevoegd in de onderstaande link. Om de bibliotheek op te nemen, klikt u op Schets> Bibliotheek opnemen> ZIP toevoegen. Bibliotheek.
- Download de onderstaande code en plak deze in uw Arduino IDE. Klik op de uploaden knop om de code op uw microcontroller-bord te branden.
Klik hier om de code te downloaden.
Stap 5: De app downloaden
Omdat we nu het hele circuit hebben geassembleerd en de code hebben geüpload naar het microcontroller-bord. laten we een mobiele app downloaden die zal werken als afstandsbediening voor de robotarm. Een gratis app is beschikbaar in de Google Play Store. De naam van de app is de Little Arm Robot Control. Schakel Bluetooth op uw mobiele telefoon in om een Bluetooth-verbinding tot stand te brengen. Ga naar de instellingen en koppel je gsm met de HC-05 module. Druk daarna op de Bluetooth-knop in de app. Als het groen wordt, betekent dit dat de app nu is verbonden en klaar om de robotarm te bedienen. Er zijn schuifregelaars om de robotarm naar wens in te stellen.
Stap 6: de code begrijpen
De code is goed becommentarieerd en gemakkelijk te begrijpen. Maar toch wordt het hieronder kort uitgelegd.
1. In het begin is een bibliotheek opgenomen om een code te schrijven om servomotoren te bedienen. Een andere bibliotheek wiskunde. his opgenomen om verschillende wiskundige bewerkingen in de code uit te voeren. Vier objecten worden ook geïnitialiseerd om te worden gebruikt voor de vier servomotoren.
#inclusief// arduino-bibliotheek #include // standaard c bibliotheek #define PI 3.141 Servo baseServo; Servo schouderServo; Servo elleboogServo; Servo grijperServo; int commando;
2. Vervolgens wordt een structuur verklaard die waarden aanneemt voor de basis-, schouder- en elleboog-servomotoren.
struct jointAngle {// declairing a structure int base; int schouder; int elleboog; };
3. Hierna worden enkele variabelen geïnitialiseerd om de gewenste grip, vertraging en positie van de servomotor op te slaan. de snelheid is ingesteld op 15, en er wordt een object gemaakt om de waarde van de hoek in de constructie te nemen.
int gewensteGrip; int grijperPos; int gewenstDelay; int servoSpeed = 15; int klaar = 0; struct jointAngle wantedAngle; // gewenste hoeken van de servo's
4. leegte setup ()is een functie die wordt gebruikt om de pinnen van Arduino in te stellen als INPUT of OUTPUT. Hier in deze functie hebben we verklaard dat de pin van de motoren wordt verbonden met welke pinnen van de Arduino. Er wordt ook voor gezorgd dat de Arduino niet te lang seriële invoer leest. De beginpositie en de baudsnelheid worden ook in deze functie ingesteld. Baudrate is de snelheid waarmee de microcontroller-kaart communiceert met de aangesloten servo's en Bluetooth-module.
leegte setup () {Serial.begin (9600); baseServo.attach (9); // bevestigt de basisservo op pin 9 aan het servo-object shoulderServo.attach (10); // bevestigt de schouderservo op pin 9 aan het servo-object elbowServo.attach (11); // bevestigt de elleboogservo op pin 9 aan het servo-object gripperServo.attach (6); // bevestigt de grijperservo op pin 9 aan het servo-object Serial.setTimeout (50); // zorgt ervoor dat de arduino niet te lang serieel leest Serial.println ("gestart"); baseServo.write (90); // beginposities van servo's shoulderServo.write (150); elbowServo.write (110); klaar = 0; }
5. servoParallelControl ()is een functie die wordt gebruikt om de huidige positie van de robotarm te detecteren en deze te verplaatsen volgens de opdracht die via de mobiele app wordt gegeven. Als de huidige positie kleiner is dan de werkelijke, beweegt de arm omhoog en vice versa. Deze functie retourneert de waarde van de huidige positie en de snelheid van de servo.
int servoParallelControl (int thePos, Servo theServo, int theSpeed) {int startPos = theServo.read (); // lees de huidige pos int newPos = startPos; // int theSpeed = snelheid; // definieer waar de pos zich bevindt met betrekking tot het commando // als de huidige positie kleiner is dan de daadwerkelijke verplaatsing omhoog if (startPos <(thePos-5)) {newPos = newPos + 1; theServo.write (newPos); vertraging (theSpeed); retourneer 0; } else if (newPos> (thePos + 5)) {newPos = newPos - 1; theServo.write (newPos); vertraging (theSpeed); retourneer 0; } else {return 1; }}
6. leegte lus ()is een functie die herhaaldelijk in een lus wordt uitgevoerd. Deze functie leest de gegevens die serieel binnenkomen en slaat de hoek van elke servo in de structuur op. Aanvankelijk wordt de status van alle servo's op nul gezet. Hier een functie servoParallelControl ()wordt aangeroepen en parameters worden erin doorgegeven. deze functie retourneert de waarde en wordt opgeslagen in een variabele met status.
void loop () {if (Serial.available ()) {ready = 1; gewensteAngle.base = Serial.parseInt (); gewensteAngle.shoulder = Serial.parseInt (); gewensteAngle.elbow = Serial.parseInt (); gewensteGrip = Serial.parseInt (); gewensteDelay = Serial.parseInt (); if (Serial.read () == '\ n') {// als de laatste byte 'd' is, stop dan met lezen en voer het commando 'd' uit dat staat voor 'done' Serial.flush (); // wis alle andere commando's die in de buffer zijn opgestapeld // stuur voltooiing van het commando Serial.print ('d'); }} int status1 = 0; int status2 = 0; int status3 = 0; int status4 = 0; int gedaan = 0; while (done == 0 && ready == 1) {// verplaats de servo naar de gewenste positie status1 = servoParallelControl (wantedAngle.base, baseServo, wantedDelay); status2 = servoParallelControl (wantedAngle.shoulder, shoulderServo, wantedDelay); status3 = servoParallelControl (wantedAngle.elbow, elbowServo, wantedDelay); status4 = servoParallelControl (gewenstGrip, gripperServo, gewenstDelay); if (status1 == 1 & status2 == 1 & status3 == 1 & status4 == 1) {done = 1}} // einde van tijd}
Dit was de hele procedure om een robotarm te maken. Na het branden van de code en het downloaden van de app, zou de robot perfect moeten werken als de schuifregelaars op de app worden verplaatst. U kunt de arm ook programmeren om autonoom te werken om de gewenste taak uit te voeren.