Contrôler le bras robotique Arduino avec l'application Android
Composants et fournitures
Applications et services en ligne
À propos de ce projet
Ce tutoriel est basé sur les ressources de cette page.
Le LittleArm est traditionnellement contrôlé à l'aide d'une application informatique de bureau gratuite qui fonctionne sous Windows et Linux. Mais cela nécessite que le LittleArm soit connecté à un ordinateur pour être contrôlé. Nous avons enfin terminé l'application pour le LittleArm afin que vous puissiez contrôler l'Arduino sans fil avec Bluetooth.
L'application vous permet de contrôler tous les DOF du LittleArm mais également d'enregistrer des ensembles de commandes et de les lire. Le code de l'Arduino ne change pas de notre code traditionnel dans les packages logiciels d'ici.
L'application LittleArm pour ce projet peut être téléchargée ici.
Code
Code ArduinoArduino
Ce code peut être utilisé avec l'application de bureau ou Android via Bluetooth ou usb#include //arduino library#include //standard c library#define PI 3.141Servo baseServo ; Épaule ServoServo; Servo coudeServo; Servo pincerServo;int command;struct jointAngle{ int base; épaule intérieure; int coude;};int desireGrip;int pincerPos;int desireDelay;int servoSpeed =15;int ready =0;struct jointAngle desireAngle; //angles souhaités des servos//++++++++++++++++++DECLARATIONS DE FONCTION++++++++++++++++++++++++ +++int servoParallelControl (int thePos, Servo theServo );//++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++ void setup(){ Serial.begin(9600); baseServo.attach(9) ; // attache le servo sur la broche 9 à l'objet servo épauleServo.attach(10); coudeServo.attach(11); préhenseurServo.attach(6) ; Serial.setTimeout(50); // s'assure que l'arduino ne lit pas la série trop longtemps Serial.println("started"); baseServo.write(90); //positions initiales des servos épauleServo.write(150); coudeServo.write(110); ready =0;} // boucle principale arduino loopvoid() { if (Serial.available()){ ready =1; Angle désiré.base =Serial.parseInt(); desireAngle.shoulder =Serial.parseInt(); Angle désiré.elbow =Serial.parseInt(); desireGrip =Serial.parseInt(); desireDelay =Serial.parseInt(); if(Serial.read() =='\n'){ // si le dernier octet est 'd' alors arrête la lecture et exécute la commande 'd' signifie 'done' Serial.flush(); //efface toutes les autres commandes empilées dans le tampon //envoie la fin de la commande Serial.print('d'); } } int état1 =0; int état2 =0 ; int état3 =0 ; int état4 =0 ; int fait =0; while(done ==0 &&ready ==1){ // déplace le servo vers la position souhaitée status1 =servoParallelControl(desiredAngle.base, baseServo, desireDelay); status2 =servoParallelControl(desiredAngle.shoulder, shoulderServo, desireDelay); status3 =servoParallelControl(desiredAngle.elbow, elbowServo, desireDelay); status4 =servoParallelControl(desiredGrip, pincerServo, desireDelay); if (status1 ==1 &status2 ==1 &status3 ==1 &status4 ==1){ done =1; } }// fin du moment }//++++++++++++++++++++++++++++++++ DÉFINITIONS DE FONCTIONNEMENT++++++++ +++++++++++++++++++++++++++++++++++++int servoParallelControl (int thePos, Servo theServo, int theSpeed ){ int startPos =leServo.read(); //lire la position actuelle int newPos =startPos; //int theSpeed =speed; //définir où se trouve la pos par rapport à la commande // si la position actuelle est inférieure au déplacement réel if (startPos <(thePos-5)){ newPos =newPos + 1; theServo.write(newPos); retard(laVitesse); renvoie 0 ; } else if (newPos> (thePos + 5)){ newPos =newPos - 1; theServo.write(newPos); retard(laVitesse); renvoie 0 ; } else { return 1; } }
Schémas