- Robot Maker
- → Contenu de axelou19
Contenu de axelou19
Il y a 21 élément(s) pour axelou19 (recherche limitée depuis 29-avril 13)
Par type de contenu
Voir pour ce membre
#49816 aide nunchuck sans fil et progra
Posté par axelou19 sur 22 octobre 2012 - 05:13 dans Programmation
bonne fin de soirée a tous
#49060 aide nunchuck sans fil et progra
Posté par axelou19 sur 28 septembre 2012 - 08:12 dans Programmation
Cela fait un moment que je ne me suis pas connecté au forum car la robotique m'avait un peu lâcher mais maintenant elle reviens et en ce moment je suis sur un projet utilisant une manette nunchuck sans fils mais voila tout ne marche pas comme je le souhaiterai
le robot sur le quelle je travaille est constituer de 2 servo et de 1 récepteur pour la manette nunchuck sans fil et j'ai plusieurs problèmes:
Ensuite mon 2eme problème est que quand je veut avancer( soit en utilisant les accéléromètre soit le joystick) le robot ne veut pas avancer je doit lui mètre un delay mais quand je met ce delay quand il recule, il recule pendant 3 sec alors que je ne voit pas pourquoi cela n'est pas logique. Auriez-vous une solution à ce second problème??
Voila tout est dit j’espère que vous pourrez m'aider.
voila mon code :
#include <Servo.h> int axel =0; #define AVANT 1 #define ARRIERE 0 #define GAUCHE 2 #define DROITE 3 #define STOP 321 #define SERVOG 1 #define SERVOD 0 #define SHARP 4 #define VMAX 5 Servo servog; Servo servod; int vLdr = 5; #include <Wire.h> #include <math.h> #include <utility/twi.h> #define RADIUS 210 #define numReadings 7 byte cnt; uint8_t status[6]; byte averageCounter; int i; int total; uint8_t zeroJoyX = 127; uint8_t zeroJoyY = 134; int ZEROX = 510; int ZEROY = 460; int ZEROZ = 0; int lastJoyX; int lastJoyY; int angles[3]; boolean lastZ, lastC; byte joyX; byte joyY; boolean buttonZ; boolean buttonC; const byte NunchuckID[6] = {0x00, 0x00, 0xA4, 0x20, 0x00, 0x00}; byte getID[6] = {0}; byte connection = 0; byte C; byte Z; int aveJX; int aveJY; int aveAX; int aveAY; int readJX[numReadings]; int readJY[numReadings]; int readAX[numReadings]; int readAY[numReadings]; int ledPin = 13; int getNeutral(int s) { if(s == SERVOG) return 90; else return 90; } void handleS(int s, int speed) { int tab[6] = {0,1,3,8,10,30}; int pos = getNeutral(s); int acc; if (speed < 0) acc = - tab[abs(speed)]; else acc = tab[speed]; if(s == SERVOG) servog.write(pos += acc); else servod.write(pos -= acc); } void move(int direction) { int m1 = 0, m2 = 0; switch(direction) { case DROITE: m1 = 1; m2 = -1; digitalWrite(8, LOW); break; case GAUCHE: m1 = -1; m2 = 1; digitalWrite(8, LOW); break; case AVANT: m1 = 1; m2 = 1; digitalWrite(8, LOW); break; case ARRIERE: m1 = -1; m2 = -1; digitalWrite(8, HIGH); break; case STOP: m1 = 0; m2 = 0; } handleS(SERVOG, m1*VMAX); handleS(SERVOD, m2*VMAX); } void sharp() { if (Z == 1 ){ axel = 0; } if (C == 1){ axel = 1; } if (Z == 1 & axel == 1 ){ axel = 0; } if (C == 1 & axel == 0 ){ axel = 1; } if(axel == 0){ if (aveAY < 70){ move(AVANT); delay(1500); } if (aveAY > 380) { move(ARRIERE); } else { move(STOP); } } if(axel ==1 ){ if ( aveJY < -80){ move(AVANT); delay(500); } if (aveJY > 80) { move(ARRIERE); } else { move(STOP); } } } void tourne(){ if(axel == 0){ if (aveAX < -280){ move(DROITE); delay(1); } if (aveAX > 70) { move(GAUCHE); } } if(axel ==1 ){ if (aveJX < -80){ move(DROITE); delay(1); } if (aveJX > 80) { move(GAUCHE); } } } void setup() { servog.attach(10); servod.attach(9); pinMode(ledPin, OUTPUT); Serial.begin(9600); Serial.println("Start"); Wire.begin(); #define TWI_FREQ_NUNCHUCK 400000L TWBR = ((CPU_FREQ / TWI_FREQ_NUNCHUCK) - 16) / 2; cnt = 0; averageCounter = 0; while(connection == 0) { Wire.beginTransmission (0x52); Wire.send (0xF0); Wire.send (0x55); if(Wire.endTransmission () == 0) { Serial.println("0x55 data send success"); Wire.beginTransmission (0x52); Wire.send (0xFB); Wire.send (0x00); if(Wire.endTransmission () == 0) Serial.println("0x00 data send success"); else Serial.println("0x00 data send failed"); do { Wire.beginTransmission (0x52); Wire.send (0xFA); delay(1); Serial.println(Wire.endTransmission(),DEC); } while(Wire.endTransmission() != 0); Wire.requestFrom(0x52, 6); if(Wire.available() == 0) connection = 2; else { byte i=0; while(Wire.available()) { getID[i] = Wire.receive(); i++; } for(byte j=0; j<6; j++) { if(getID[j] == NunchuckID[j]) { if(j==0) connection = 1; else if(j>0 && connection == 1) connection = 1; else connection = 0; } else connection = 0; Serial.println(connection,DEC); } } } else Serial.println("0x55 data send failed"); } if(connection == 1) { ZEROX = 610; ZEROY = 290; ZEROZ = 0; zeroJoyX = 128; zeroJoyY = 124; for(byte j=0;j<6;j++) { Serial.print(getID[j], HEX); Serial.print(" "); } delay(3000); } update(); for (i = 0; i<3;i++) angles[i] = 0; for(int j=0;j<=6;j++) readJX[j] = readJY[j] = readAX[j] = readAY[j] = 0; } void calibrateJoy() { zeroJoyX = joyX; zeroJoyY = joyY; } void update() { Wire.requestFrom (0x52, 6); while (Wire.available ()) { status[cnt] = _nunchuk_decode_byte (Wire.receive()); cnt++; } if (cnt > 5) { lastZ = buttonZ; lastC = buttonC; lastJoyX = readJoyX(); lastJoyY = readJoyY(); cnt = 0; joyX = (status[0]); joyY = (status[1]); for (i = 0; i < 3; i++) angles[i] = (status[i+2] << 2) + ((status[5] & (B00000011 << ((i+1)*2) ) >> ((i+1)*2))); buttonZ = !( status[5] & B00000001); buttonC = !((status[5] & B00000010) >> 1); _send_zero(); } } float readAccelX() { return (float)angles[0] - ZEROX; } float readAccelY() { return (float)angles[1] - ZEROY; } float readAccelZ() { return (float)angles[2] - ZEROZ; } boolean zPressed() { return (buttonZ && ! lastZ); } boolean cPressed() { return (buttonC && ! lastC); } boolean buttC() { return buttonC; } boolean buttZ() { return buttonZ; } boolean rightJoy(int thresh=60) { return (readJoyX() > thresh and lastJoyX <= thresh); } boolean leftJoy(int thresh=60) { return (readJoyX() < -thresh and lastJoyX >= -thresh); } int readJoyX() { return (int) joyX - zeroJoyX; } int readJoyY() { return (int)joyY - zeroJoyY; } int readRoll() { return (int)(atan2(readAccelX(),readAccelZ())/ M_PI * 180.0); } int readPitch() { return (int) (acos(readAccelY()/RADIUS)/ M_PI * 180.0); } byte _nunchuk_decode_byte (byte x) { return x; } void _send_zero() { Wire.beginTransmission (0x52); Wire.send (0x00); Wire.endTransmission (); } void loop() { sharp(); tourne(); update(); SGFilter(); if(Z == 1){ digitalWrite(ledPin, HIGH); } if(C == 1){ digitalWrite(ledPin, LOW); } Serial.print(aveJX, DEC); Serial.print("\t"); Serial.print(aveJY, DEC); Serial.print("\t"); Serial.print(aveAX, DEC); Serial.print("\t"); Serial.print(aveAY, DEC); Serial.print("\t"); Serial.print( Z, DEC ); Serial.print("\t"); Serial.print( C, DEC ); Serial.print("\t"); Serial.print( connection, DEC ); Serial.print("\r\n"); } void SGFilter() { for(int index = 0; index<6; index++) { readJX[index] = readJX[index+1]; readJY[index] = readJY[index+1]; readAX[index] = readAX[index+1]; readAY[index] = readAY[index+1]; } readJX[6] = readJoyX(); readJY[6] = readJoyY(); readAX[6] = (int)readAccelX(); readAY[6] = (int)readAccelY(); if(buttZ() == true) Z=1; else Z=0; if(buttC() == true) C=1; else C=0; aveJX = ((-2*readJX[0]) + (3*readJX[1]) + (6*readJX[2]) + (7*readJX[3]) + (6*readJX[4]) + (3*readJX[5]) - (2*readJX[6]))/21; aveJY = ((-2*readJY[0]) + (3*readJY[1]) + (6*readJY[2]) + (7*readJY[3]) + (6*readJY[4]) + (3*readJY[5]) - (2*readJY[6]))/21; aveAX = ((-2*readAX[0]) + (3*readAX[1]) + (6*readAX[2]) + (7*readAX[3]) + (6*readAX[4]) + (3*readAX[5]) - (2*readAX[6]))/21; aveAY = ((-2*readAY[0]) + (3*readAY[1]) + (6*readAY[2]) + (7*readAY[3]) + (6*readAY[4]) + (3*readAY[5]) - (2*readAY[6]))/21; }
merci d'avance
axe19
#37655 programmation serial
Posté par axelou19 sur 05 janvier 2012 - 08:12 dans Programmation
merci mais tu ne prend que le a moi j'aimerai controle en ecrivant un mot entier et pas juste une seul lettre
int ledPin = 9; // j'initialise une led //Déclaration de la variable contenant la valeur de la touche saisi au clavier int octetRecu; void setup() // inisialisation des interface { Serial.begin(9600); // je commence le serial a 9600 bit par seconde pinMode(ledPin, OUTPUT); //je define la led en sortie } void loop(){ if (Serial.available() > 0) { //si il y a une valeur dans le serial // Lecture de l'octet présent dans la mémoire tampon (buffer) octetRecu = Serial.read(); if (octetRecu == 'A' || octetRecu == 'a') //Si l'octet recuz est égal à A ou a { digitalWrite(ledPin, HIGH); //Allume la LED A Serial.println("allume"); //Affiche "allume" la LED série } if (octetRecu == 'E' || octetRecu == 'e') //Si l'octet recu est égal à E ou e { //Eteindre la LED connectées digitalWrite(ledPin, LOW); Serial.println("eteinte");//Affiche " eteinte" dans le moniteur série } } }
#37650 programmation serial
Posté par axelou19 sur 05 janvier 2012 - 04:37 dans Programmation
j'ai esayer sa
j'ai defini octet
if(octet == 'bonjour'(ce ne macrhe pas
puis j'ai essayer ca
if(octet == 'b' && octet == 'o'...(mais aucun des deux ne marche comment faire ?
#37482 programmation serial
Posté par axelou19 sur 31 décembre 2011 - 07:01 dans Programmation
#37417 programmation serial
Posté par axelou19 sur 29 décembre 2011 - 10:38 dans Programmation
Il faut lire le port série :
http://arduino.cc/en/Serial/Read
j'ai déjà essayer mais je n'ai pas réussi
je ne sais pas comment l'utiliser et même en regardant les exemple je ne comprend pas comment lire .
j'ai déjà fait ça mais je n’arrive pas a mettre plusieurs lettres a la fois pour faire un mot
(celons la lettre écrite il allume plus ou moins longtemps un LED)
nt ledPin = 9; // j'initialise une led void setup() // inisialisation des interface { Serial.begin(9600); // je commence le serial a 9600 bit par seconde pinMode(ledPin, OUTPUT); //je define la led en sortie } if (Serial.available() > 0) { //si il y a une valeur dans le serial char valeur = Serial.read(); // je lit les donne envoyer ( celle que jenvoie a arduino par le pc) switch(valeur) { //je defini les condition case 'a': // si il lit un a analogWrite(ledPin, HIGH); //j'allume la led delay(1000);//j'attend 1sec analogWrite(ledPin, LOW); //j'etain case 'c': //pareile analogWrite(ledPin, HIGH); delay(500); analogWrite(ledPin, LOW); case 'd': analogWrite(ledPin, HIGH); delay(100); analogWrite(ledPin, LOW); } }
#37411 programmation serial
Posté par axelou19 sur 29 décembre 2011 - 12:07 dans Programmation
j'ai un problème de code j'aimerai que quand j’écris quelque chose dans la moniteur arduino fasse une action bien précise mais je ne trouve pas de commande .
par exemple si j’écris avant dans le moniteur mes moteur tourne jusqu’à que j’écrive stop dans le moniteur.
que faire ? quelle est la fonction?
merci d'avance
#36838 aide schema
Posté par axelou19 sur 11 décembre 2011 - 02:30 dans Programmation
ok je penser qu'il y en avait un en particulier qui fesait caBonjour axelou19
Pour ta question moi perso j'utilise c'est logiciel la:
Photofiltre , paint , GoogleSketchUpWFR , Zmodeler2.1.1 , dxtbmpx , blender , photoshope.
T'en as plein d'autres , certain des logiciels que j'ai cités a l'écrie serve aussi pour faire de la 3D
#36835 aide schema
Posté par axelou19 sur 11 décembre 2011 - 02:07 dans Programmation
#36741 wiichuck
Posté par axelou19 sur 06 décembre 2011 - 05:43 dans Programmation
voulant modifier mon robot j'ai décider d'y ajouter une nunchuck de wii donc j'ai voulu faire des tests avant.
mais aucun n'a marchés . même les codes pour récupérer les données des accéléromètres sur le moniteur. j'ai donc essayer avec 2 autres manettes mais sans aucun résultat positif j'ai donc pris d'autre tutoriel et le même échec.
ce que j'ai trouver bizarre c'est quand je débrancher le câble de donne x des données s'afficher et quand je le rebrancher plus rien .
que faire ?? est-ce un problème d'arduino?? de wiichuck?? de branchement??
merci d'avance
#36497 un petit nouveau :) Androidus
Posté par axelou19 sur 30 novembre 2011 - 07:42 dans Et si vous vous présentiez?
#36496 debuter programmation
Posté par axelou19 sur 30 novembre 2011 - 07:40 dans Conseils et aide aux débutants, livres et kits en robotique
Pour faire des robot la mécanique ne me pose aucun problème l’électronique non plus ( au niveau ou je suis)par contre la programmation c'est une vrai catastrophe je ne connais rien le seul truck que je sais c'est allumer et éteindre un LED ou même un petit groupe de LED mais rien d'autre.
Connaîtriez-vous des livres, des tutoriel ou des kit pour apprendre la programmation sur arduino parce que j'aimerai crée mes propres robot mais sans code sa ne marchera jamais.
merci d'avance.
#36480 aide programmation
Posté par axelou19 sur 29 novembre 2011 - 08:46 dans Programmation
j'ai trouver le donc et j'ai donc put tester mon capteur et connaître ses valeurs
j'ai aussi regarder le site pobot qui est assez instructif au sujet de la robotique.
encore merci
#36434 aide programmation
Posté par axelou19 sur 28 novembre 2011 - 06:25 dans Programmation
#36329 Besoin d'aide pour idée de premier robot
Posté par axelou19 sur 26 novembre 2011 - 10:31 dans Conseils et aide aux débutants, livres et kits en robotique
C que j,aimerais en construire un aussi mes pas du genre cocotix.xd
faut bien commencer par quelque chose . moi j'ai commencer par une cocotix ( qui na pas marcher a cause de moteur non similaire ), après j'ai fait roddy ,puis je me suis acheter un bras et maintenant que j'ai une basse infime je commence a avoir des idée de projet qu'il faudra ensuite faire.
Même Mozart na pas composer la première symphonie en une nuit.
#36293 Rizer
Posté par axelou19 sur 26 novembre 2011 - 11:31 dans Et si vous vous présentiez?
#36292 Rizer
Posté par axelou19 sur 26 novembre 2011 - 11:31 dans Et si vous vous présentiez?
#36283 aide programmation
Posté par axelou19 sur 25 novembre 2011 - 10:06 dans Programmation
voila le code original:
int #include <Servo.h> #define AVANT 1 #define ARRIERE 0 #define GAUCHE 2 #define DROITE 3 #define SERVOG 1 #define SERVOD 0 #define UPDDG 3 #define UPDDD 4 #define SHARP 4 #define VMAX 5 Servo servog; Servo servod; int vLdr = 5; int getNeutral(int s) { if(s == SERVOG) return 86; else return 84; } void handleS(int s, int speed) { //Vitesse : // 0 -> 0; 1 -> 1; 2 -> 3; 3 -> 8; 4 -> 10; v => 5 -> 30 int tab[6] = {0,1,3,8,10,30}; int pos = getNeutral(s); int acc; if (speed < 0) acc = - tab[abs(speed)]; else acc = tab[speed]; if(s == SERVOG) servog.write(pos += acc); else servod.write(pos -= acc); } void move(int direction) { int m1 = 0, m2 = 0; switch(direction) { case DROITE: m1 = 1; m2 = -1; break; case GAUCHE: m1 = -1; m2 = 1; break; case AVANT: m1 = 1; m2 = 1; break; case ARRIERE: m1 = -1; m2 = -1; break; } handleS(SERVOG, m1*VMAX); handleS(SERVOD, m2*VMAX); } void handleUPDD(int updd) { if(digitalRead(updd) == HIGH) { move(ARRIERE); delay(500); if (updd == UPDDG) { move(DROITE); } else { move(GAUCHE); } delay(800); } } void sharp() { int v = analogRead(SHARP); if (v >= 180) { move(ARRIERE); delay(300); move(DROITE); delay(900); } else if (v >= 100) { handleS(SERVOG, VMAX); handleS(SERVOD, 0); delay(1500); } } void setup() { pinMode(UPDDG, INPUT); pinMode(UPDDD, INPUT); Serial.begin(9600); servog.attach(10); servod.attach(9); move(AVANT); } void loop() { handleUPDD(UPDDG); handleUPDD(UPDDD); sharp(); move(AVANT); delay(100); }
et voila le code que j'ai essaye de faire mais qui ne marche pas ( j'ai supprimer les micro-rupteur, jai modifier vood sharp() et jai modifier vood loop() pour qu'il tourne en rond au debut)
int #include <Servo.h> #define AVANT 1 #define ARRIERE 0 #define GAUCHE 2 #define DROITE 3 #define SERVOG 1 #define SERVOD 0 #define SHARP 4 #define VMAX 5 Servo servog; Servo servod; int vLdr = 5; int getNeutral(int s) { if(s == SERVOG) return 86; else return 84; } void handleS(int s, int speed) { //Vitesse : // 0 -> 0; 1 -> 1; 2 -> 3; 3 -> 8; 4 -> 10; v => 5 -> 30 int tab[6] = {0,1,3,8,10,30}; int pos = getNeutral(s); int acc; if (speed < 0) acc = - tab[abs(speed)]; else acc = tab[speed]; if(s == SERVOG) servog.write(pos += acc); else servod.write(pos -= acc); } void move(int direction) { int m1 = 0, m2 = 0; switch(direction) { case DROITE: m1 = 1; m2 = -1; break; case GAUCHE: m1 = -1; m2 = 1; break; case AVANT: m1 = 1; m2 = 1; break; case ARRIERE: m1 = -1; m2 = -1; break; } handleS(SERVOG, m1*VMAX); handleS(SERVOD, m2*VMAX); } void sharp() { int v = analogRead(SHARP); if (v >= 180) { move(ARRIERE); } else if (v <= 180) { move(AVANT); } } void setup() { Serial.begin(9600); servog.attach(10); servod.attach(9); move(AVANT); } void loop() { sharp(); move(AVANT); delay(100); }
#36278 aide programmation
Posté par axelou19 sur 25 novembre 2011 - 05:25 dans Programmation
j'ai deux problèmes:
-le premier étant que je ne comprend pas les valeurs des capteur Sharp
pourquoi la valeurs 180 signifie 10 cm et la valeur 100 signifie 30 cm??
-mon deuxième problème est que je voulait modifier roddy pour qu'il tourne en rond tout le temps et que quand il repère
un objet il le suive en gardant sa distance , si l'objet s’approche de roddy il reculera et si l'objet s’éloigne il le suivra.
j ai essaye de modifier le code original de roddy pour qu'il fasse ce que je voulait mais en vain
je n'y arrive pas!
pourriez-vous m'aidez pour mes 2 problèmes.
merci d'avances.
axelou19
#36276 axe19
Posté par axelou19 sur 25 novembre 2011 - 04:43 dans Et si vous vous présentiez?
#36249 axe19
Posté par axelou19 sur 24 novembre 2011 - 05:50 dans Et si vous vous présentiez?
je m’appelle Axel
j'ai 14ans
j'habite a Talence (prés de bordeaux)
cela fait déjà 2 ans que je me suis mi a la robotique j ai déjà acheter un bras robotique , puis il y a peu je me suis fabriquer roddy le robot auquel j'ai ajouter 6 LED clignotant les une après les autres et une 7eme qui s'allume quand roddy recule.
je m'inscrit car j'ai énormément envie de progresser dans ce domaine qui est si fantastique.
- Robot Maker
- → Contenu de axelou19
- Privacy Policy