Arduino - Control Arm Robot via internet
Componenten en benodigdheden
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Over dit project
Als je een beginner bent, raad ik je aan de volgende tutorials te lezen:
- Arduino - Motor
- Arduino - servomotor
- Arduino - Wifi
1. Demonstratie
2. Gebruikersinterface
De robotarm heeft 6 motoren.
- Zone A:Stuur motor 2, 3, 4 (stuur drie handgewrichten)
- Zone B:Besturingsmotor 1 (besturingsbasis)
- Zone C:Besturingsmotor 5 (besturingsrotatie van grijper)
- Zone D:Besturingsmotor 6 (besturingsgrijper)
3. Systeemarchitectuur
4. Werkstroom
Klantzijde (webgebruikersinterface - geschreven in JavaScript + HTML + CSS)
Wanneer een gebruiker de vinger aanraakt of veegt (of klikt of de muis beweegt), kunnen we de coördinaat (x, y) krijgen. De werkstroom is als volgt:
In het geval van Zone A, om de hoeken van motor 2, 3, 4 te berekenen, moeten we een geometrische berekening doen . U kunt ernaar verwijzen aan het einde van deze pagina.
Serverzijde (Arduino-code):
Nadat ze een reeks hoeken van klanten hebben ontvangen, gaan zes motoren geleidelijk van de huidige hoeken naar de nieuwe hoeken. Zes motoren moeten tegelijkertijd bewegen en nieuwe hoeken bereiken. Laten we, voordat we in detail treden over het besturen van alle motoren, eens kijken hoe we een enkele motor kunnen besturen. Stel dat we een motor van de huidige hoek (hoek) naar een nieuwe hoek (nieuwe hoek) willen verplaatsen. Aangezien de snelheid van de motor hoog is, moeten we deze vertragen. Om dat te doen, worden twee volgende stappen herhaald totdat de motor een nieuwe hoek bereikt:
- Verplaats de motor met een kleine stap.
- Pauzeer even en zet dan nog een stap.
Het volgende diagram illustreert het bovenstaande schema in het geval dat de nieuwe hoek groter is dan de huidige hoek:
Waarstep_numis het aantal stappen dat de motor moet zetten. stap en tijd
zijn vooraf gedefinieerde waarden. Twee latere bepalen de snelheid en soepelheid. Het bovenstaande is slechts voor één robot. Om ervoor te zorgen dat robots tegelijkertijd beginnen te bewegen en hun bestemming te bereiken, kunnen we het volgende doen:Zes motoren nemen hetzelfde step_num , maar stap
van elke motor is verschillend van elkaar. We moeten dus step_num choose kiezen in dit project is maximaal.
Over het algemeen is de werkstroom van Arduino als volgt:
5. Geometrische berekening
Laten we een robotarmberekening maken voor het volgende geometrieprobleem:
Bekend
- C is vast
- Een bekend punt - D is de invoer van de gebruiker
- Een bekend punt - CB, BA, AD (respectievelijk aangeduid met b, a, d)
- Lengtes van elk armsegment Vind: hoeken C, B, A Oplossing:
- Ga ervan uit dat hoek B en A hetzelfde zijn
- Voeg wat extra punten en segment toe
Berekening
- We kenden de punten C en D => we kunnen de lengte van DC berekenen (aangeduid met c)
- We kunnen ook de δ . berekenen
- Kijk naar driehoek ABE, we kunnen afleiden dat AE =BE en ∠E =π - 2α.
- Dus:
- De wet van cosinus in driehoek CDE:
- Verander (1) en (2) in (3), we hebben:
Vereenvoudig
- Vereenvoudig het bovenstaande:
- Omdat we a, b, c en d kennen, de bovenstaande kwadratische vergelijking oplossen, kunnen we de waarde van α berekenen. - En β =π – α - Tot nu toe hebben we β gevonden, laten we γ zoeken - De wet van cosinus in driehoeken BDC en BDA:
- Los deze reeks vergelijkingen op, we kunnen γ berekenen.
- Dus hun vereiste hoeken zijn:(δ+γ), β en β. Dit zijn hoeken van respectievelijk motoren 2, 3 en 4.
6. Broncode
Broncode bevat twee bestanden:
- RobotArmWeb.ino :Arduino-code
- Remote_arm.php :Webapp-code, die wordt geüpload naar PHPoC WiFi Shield of PHPoC Shield. (Zie de instructies in dit artikel.)
Je moet ook het afbeeldingsbestand flywheel.png uploaden naar PHPoC Shield.
De beste Arduino-starterkit voor beginners
Als u op zoek bent naar een Arduino-kit, zie dan De beste Arduino-kit voor beginners
Functiereferenties
- Arduino - Servobibliotheek
- Servo.attach()
- Servo.write()
- Servo.writeMicroseconds()
- Servo.read()
- Servo.attached()
- Servo.detach()
- Serial.begin()
- Serial.println()
Code
- RobotArmWeb
- remote_arm.php
RobotArmWebArduino
Dit is Arduino Code#include#include int angle_init[] ={90, 101, 165, 153, 90, 120}; // wanneer de motor rechtop staat. In web is de hoek wanneer de motor recht staat {0, 90, 130, 180, 0, 0};int angle_offset[] ={0, 11, -15, -27, 0, 137}; // offset tussen echte servomotor en hoek op webint cur_angles [] ={90, 101, 165, 153, 90, 120}; // huidige hoeken van zes motoren (graden) int dest_angles [] ={0, 0, 0, 0, 0, 0}; // voorbestemde hoekenint angle_max[] ={180, 180, 160, 120, 180, 137};int angle_min[] ={0, 0, 0, 20, 0, 75};int richting[] ={1, 1 , 1, 1, 1 ,-1};int angleSteps[] ={3, 2, 2, 2, 4 ,4}; // bewegende stappen van elke motor (graden)Servo servo1;Servo servo2;Servo servo3;Servo servo4;Servo servo5;Servo servo6;Servo servo[6] ={servo1, servo2, servo3, servo4, servo5, servo6};PhpocServer server (80);PhpocClient-client;int stepNum =0;void setup(){Serial.begin(9600); Phpoc.begin(PF_LOG_SPI | PF_LOG_NET); server.beginWebSocket("remote_arm"); servo1.bevestigen (2); // hecht de servo op pin 2 aan het servo-object servo2.attach (3); // hecht de servo op pin 3 aan het servo-object servo3.attach (4); // bevestigt de servo op pin 4 aan het servo-object servo4.attach (5); // bevestigt de servo op pin 5 aan het servo-object servo5.attach (6); // hecht de servo op pin 6 aan het servo-object servo6.attach (7); // hecht de servo op pin 7 aan het servo-object for (int i =0; i <6; i++) servo [i].write(angle_init[i]);}void loop() { PhpocClient client =server.available (); if(client) { String angleStr =client.readLine(); if(angleStr) {Serial.println(angleStr); int kommaPos1 =-1; int kommaPos2; for(int i =0; i <5; i++) { commaPos2 =angleStr.indexOf(',', commaPos1 + 1); int hoek =angleStr.substring(commaPos1 + 1, commaPos2).toInt(); dest_angles[i] =hoek * richting[i] + angle_offset[i]; kommaPos1 =kommaPos2; } int hoek5 =hoekStr.substring(commaPos1 + 1).toInt(); dest_angles[5] =angle5 * direction[5] + angle_offset[5]; stapNum =0; // verplaats motoren in veel kleine stappen om de motor soepel te laten bewegen en vermijd plotselinge bewegingen van de motor. Het onderstaande is een stapberekening voor (int i =0; i <6; i++) {int dif =abs (cur_angles[i] - dest_angles[i]); int step =dif / angleSteps[i]; if(stepNum 0) { for (int i =0; i <6; i++) { int angleStepMove =(dest_angles[i] - cur_angles[i]) / stepNum; cur_angles[i] +=angleStepMove; if(cur_angles[i]> angle_max[i]) cur_angles[i] =angle_max[i]; else if(cur_angles[i] remote_arm.phpPHP
Deze code is een webapp.Arduino - Arm Robot - Web Arduino - Controlearmrobot via internet
WebSocket:null
Schema's
Het moet de externe stroombron voor 6 motoren leveren;
Productieproces
- Simple Pi Robot
- Arduino-controlecentrum
- Ioed gebruiken om een robotarm op afstand te bedienen
- Obstakels vermijden robot met servomotor
- Lijnvolger Robot
- Arduino-luchtbevochtigerbediening
- Arduino - Stuur temperatuur naar internet via serieel
- Littlearm 2C:bouw een 3D-geprinte Arduino-robotarm
- Autonome Home Assistant-robot
- Bewegingsgevoelige circuitbesturing via Intel Curie
- Robot voor supercoole indoornavigatie