Aller au contenu


Contenu de arthael

Il y a 410 élément(s) pour arthael (recherche limitée depuis 04-mai 13)



#28458 [Question] Télécommande

Posté par arthael sur 08 mars 2009 - 07:42 dans Electronique

[quote"hedi07"]oh non!
tout le monde, la question c'est comment transmettre des données a travers un fil.
[/quote]

pour t'aider voici le schéma de ma commande filaire. je l'utilise pas pcq le cable enpeche mon robot d'avancer -_- c'est pour ça que j'essaie d'en faire une sans fil :D




#27120 [Maximus] Un empileur de pions !

Posté par arthael sur 12 avril 2011 - 06:39 dans Robots roulants, chars à chenilles et autres machines sur roues


J'ai adoré la méca de APBTeam !




Faut avouer la structure est class. et j'aime bien le principe pour la pince. (meme si je voit pas comment ils la font monter)



#27033 [Maximus] Un empileur de pions !

Posté par arthael sur 15 décembre 2010 - 05:04 dans Robots roulants, chars à chenilles et autres machines sur roues

il est vraiment bien ce robot. bien joué ;)



#22323 [c+] Arduino: Questions diverses

Posté par arthael sur 28 mars 2011 - 07:34 dans Programmation

j'utilise processing, et l'a console de l'arduino m'affiche les bonne valeurs..


le code complet de l'arduino:


#include
#include


Servo mservo;

int angle = 90;

int MDAV = 2;
int MDAR = 3;
int MGAV = 4;
int MGAR = 5;

int L = 7;
int V = 8;

int BA = 9;
int BB = 10;

int Tension = 0;

int TBA = 0;
int TBB = 0;

int Move = 0;
int Cam = 0;



void setup() {

Serial.begin(115200);

MsTimer2::set(10 , serie);
MsTimer2::start();

pinMode(MDAV,OUTPUT);
pinMode(MDAR,OUTPUT);
pinMode(MGAV,OUTPUT);
pinMode(MGAR,OUTPUT);

pinMode(L,OUTPUT);
pinMode(V,OUTPUT);

pinMode(BA,OUTPUT);
pinMode(BB,OUTPUT);

mservo.attach(6);
mservo.write(angle);

digitalWrite(BA, HIGH);

delay(100);

TBA = (int) ((analogRead(Tension)*5./1024.)*2000.);

Serial.println(TBA);
delay(10);


digitalWrite(BA, LOW);
digitalWrite(BB, HIGH);

delay(100);

TBB = (int) ((analogRead(Tension)*5./1024.)*200.);
Serial.println(TBB);
delay(10);

digitalWrite(BB, LOW);
digitalWrite(BA, HIGH);




}


void loop() {

move();
cam();
Batt();

}

void cam() {

switch(Cam) {

case 1:

angle = angle + 1;

if(angle > 180)
{
angle = 180;
}

mservo.write(angle);
delay(25);
break;

case 2:

angle = angle - 1;

if(angle < 0)
{
angle = 0;
}

mservo.write(angle);
delay(25);
break;
}


}

void move() {

switch(Move) {

case 1:

digitalWrite(MDAV,HIGH);
digitalWrite(MDAR,LOW);
digitalWrite(MGAV,HIGH);
digitalWrite(MGAR,LOW);
break;

case 2:

digitalWrite(MDAV,LOW);
digitalWrite(MDAR,HIGH);
digitalWrite(MGAV,LOW);
digitalWrite(MGAR,HIGH);
break;

case 3:

digitalWrite(MDAV,LOW);
digitalWrite(MDAR,HIGH);
digitalWrite(MGAV,HIGH);
digitalWrite(MGAR,LOW);
break;

case 4:

digitalWrite(MDAV,HIGH);
digitalWrite(MDAR,LOW);
digitalWrite(MGAV,LOW);
digitalWrite(MGAR,HIGH);
break;

case 0:

ini();
break;

}
}


void ini() {

digitalWrite(MDAV,LOW);
digitalWrite(MDAR,LOW);
digitalWrite(MGAV,LOW);
digitalWrite(MGAR,LOW);

}

void Batt () {

if (TBA < 5600 && digitalRead(BA) == HIGH) {

digitalWrite(BA, LOW);
digitalWrite(BB, HIGH);

}

else if (TBB < 560 && digitalRead(BB) == HIGH) {

digitalWrite(BB, LOW);
digitalWrite(BA, HIGH);

}

else if (digitalRead(BA) == HIGH) {

TBA = (int) ((analogRead(Tension)*5./1024.)*2000.);

}

else if (digitalRead(BB) == HIGH) {

TBB = (int) ((analogRead(Tension)*5./1024.)*200.);

}

Serial.println(TBA);
delay(10);
Serial.println(TBB);
delay(10);

}

void serie () {

if (Serial.available() > 0) {


switch (Serial.read()) {

case 'd':
Move = 3;
break;

case 'q':
Move = 4;
break;

case 'z':
Move = 1;
break;

case 's':
Move = 2;
break;

case 'p':
Cam = 1;
break;

case 'm':
Cam = 2;
break;

case 'l':
digitalWrite(L,HIGH);
break;

case 0:
Move = 0;
break;

case 1:
Cam = 0;
break;

case 2:
digitalWrite(L,LOW);
break;

case 'v':
digitalWrite(V,HIGH);
break;

case 3:
digitalWrite(V,LOW);
break;

}
}
}



[/code]


le code complet processing (c'est un programme test) :


import processing.serial.*;
import processing.video.*;

Serial MySerialPort;

int[] touche = new int[10];
float[] batt = new float[4];

int x = 65;
int y = 110;


void setup() {

println(Serial.list());

MySerialPort = new Serial(this, Serial.list()[0], 115200);

size (1350, 690);
background(0, 0, 0);

PImage robot;
robot = loadImage("DSC02788.JPG");

image(robot,230,10,890,670);



rectMode(CENTER);

fill(127);
rect(x + 50, y + 50, 50, 50);
rect(x , y + 100, 50, 50);
rect(x + 50, y + 100, 50, 50);
rect(x + 100, y + 100, 50, 50);

rect(x , y + 250, 50, 50);
rect(x, y + 300, 50, 50);
rect(x , y + 450, 50, 50);
rect(x, y + 500, 50, 50);

fill(255);
text("Interface de controle", x - 5 , y - 85);
text("DELTA 1715", x + 20 , y - 65);
text("Commande Mouvement", x - 15 , y - 5);
text("Commande Camera", x - 10, y + 195);
text("Commande Fonction", x - 15, y + 395);

text("Haut", x + 50, y + 250);
text("Bas", x + 50, y + 300);
text("Eclairage", x + 50, y + 450);
text("Viseur", x + 50, y + 500);

serie();




}



void draw() {

if (MySerialPort.available() != 0) {

println(MySerialPort.read());

}



}




void keyPressed() {

switch (key) {

case 'p':

touche[4] = 'p';
break;

case 'm':

touche[5] = 'm';
break;

case 'd':

touche[0] = 'd';
break;

case 'q':

touche[1] = 'q';
break;

case 'z':

touche[2] = 'z';
break;

case 's':

touche[3] = 's';
break;


case 'l':

if (touche[6] == 'l') {
touche[6] = 2;
}
else {
touche[6] = 'l';
}

break;

case 'v':

if (touche[7] == 'v') {
touche[7] = 3;
}
else {
touche[7] = 'v';
}

break;

}

serie();

}

void keyReleased() {


switch (key) {

case 'p':

touche[4] = 1;
break;

case 'm':

touche[5] = 1;
break;

case 'd':

touche[0] = 0;
break;

case 'q':

touche[1] = 0;
break;

case 'z':

touche[2] = 0;
break;

case 's':

touche[3] = 0;
break;

}

serie();
}


void Batt () {

if (MySerialPort.read() > 100 && MySerialPort.read() < 200) {

batt[0] = (MySerialPort.read() - 105.6) * 100. / 1.5;




}

if (MySerialPort.read() > 300 && MySerialPort.read() < 400) {

batt[1] = (MySerialPort.read() - 305.6) * 100. / 1.5;

}

println(batt[0]);
println(batt[1]);

}

void serie () {


fill(225);
rect(x + 50, y + 50, 40, 40);
rect(x , y + 100, 40, 40);
rect(x + 50, y + 100, 40, 40);
rect(x + 100, y + 100, 40, 40);

rect(x , y + 250, 40, 40);
rect(x , y + 300, 40, 40);


fill(127);

if (touche[0] == 'd') {
MySerialPort.write('d');
rect(x + 100, y + 100, 40, 40);
}
else if (touche[1] == 'q') {
MySerialPort.write('q');
rect(x , y + 100, 40, 40);
}
else if (touche[2] == 'z') {
MySerialPort.write('z');
rect(x + 50, y + 50, 40, 40);
}
else if (touche[3] == 's') {
MySerialPort.write('s');
rect(x + 50, y + 100, 40, 40);
}
else {
MySerialPort.write(0);
}



if (touche[4] == 'p') {
MySerialPort.write('p');
rect(x , y + 250, 40, 40);
}
else if (touche[5] == 'm') {
MySerialPort.write('m');
rect(x , y + 300, 40, 40);
}
else {
MySerialPort.write(1);
}

if (touche[6] == 'l') {
MySerialPort.write('l');
rect(x , y + 450, 40, 40);
}

else {
fill(225);
MySerialPort.write(2);
rect(x , y + 450, 40, 40);
}

if (touche[7] == 'v') {

fill(127);
MySerialPort.write('v');
rect(x , y + 500, 40, 40);

}
else {

fill(225);
MySerialPort.write(3);
rect(x , y + 500, 40, 40);

}


fill(0);
text("Z", x + 45, y + 55);
text("Q", x - 5, y + 105);
text("S", x + 45, y + 105);
text("D", x + 95, y + 105);

text("P", x - 5 , y + 255);
text("M", x - 5, y + 305);
text("L", x - 5 , y + 455);
text("V", x - 5, y + 505);



}
[/code]



#22289 [c+] Arduino: Questions diverses

Posté par arthael sur 11 février 2011 - 03:42 dans Programmation

ok, je comprend parfaitement le principe :)

par contre, j'ai cherché (peut être pas avec les bon termes)mais je trouve rien sur le sujet :(

Un schéma de montage m'aiderai beaucoup, si c'est pas trop demander :D


edit: J'ai trouvé! http://www.sonelec-musique.com/electronique_realisations_conv_pwm_tension_001.html

donc du coup juste un résistance et un condo ca suffit ?, c'est génial!!

par contre comment je calcule leur valeur ?,



#22332 [c+] Arduino: Questions diverses

Posté par arthael sur 29 mars 2011 - 05:28 dans Programmation

bon ok, tu explique assez bien rassure toi :)

pour ce qui est de confondre le z avec la batterie ca risque pas, c'est pas dans le même sens :) (la batterie part du robot, le z part du pc)

ensuite pour ce qui est de différencié les deux batterie j'en multiplie une par 1000, et l'autre par 100. et aprés un simple teste me permet de les différencié.

bref, si j'utilise ce protocole pour transmettre c'est deux tension au pc, je doit donc écrire ce code en processing c'est ca ?.






#22291 [c+] Arduino: Questions diverses

Posté par arthael sur 13 février 2011 - 06:11 dans Programmation


ok, (je peut pas encore tester, j'ai pas mon récepteur avec moi pour le moment).

en attendant je teste certaine chose: je voulais faire tourné un servo avec deux bouton. L'un pour tourné dans un sens, l'autre pour tourné dans le sens opposé.
mais visiblement ce que j'ai tester ne fonctionne pas trés bien.

voici, mon code:

#include

int angle;
int inPin = 0;
int in2Pin = 1;
Servo mservo;

void setup() {

pinMode(0, INPUT);
pinMode(1, INPUT);
mservo.attach(2);
angle = 90;
mservo.write(angle);

}

void loop() {

if(digitalRead(inPin) == HIGH)
{
angle = angle + 10;
mservo.write(angle);
}

if(digitalRead(in2Pin) == HIGH)
{
angle = angle - 10;
mservo.write(angle);
}

}

[/code]



#22293 [c+] Arduino: Questions diverses

Posté par arthael sur 15 février 2011 - 06:55 dans Programmation

ok (je connais pas les balise ^^).

le probleme que j'ai avec mon code, c'est que lorsque j'apuie sur un bouton, au lieu de se placé a 80° ou 100° (selon le cas), il va se mettre a 0 ou a 180...

alors je sais pas trop d'ou ca peut venir




#22328 [c+] Arduino: Questions diverses

Posté par arthael sur 28 mars 2011 - 08:58 dans Programmation

ha oui, ça correspond parfaitement au valeur que je trouve, ca envoie a la suite une série de valeur de ce genre. (je me disait bien qu'il y avait un lien ^^)

sinon j'ai trouvé ceci, qui corespond exactement a mon probleme. par contre je ne comprend pas bien ce que fait le code :/

http://forum.pobot.org/topic45.html



#22287 [c+] Arduino: Questions diverses

Posté par arthael sur 09 février 2011 - 07:44 dans Programmation

Et bien voila en cherchant j'ai trouvé ceci (qui est trés intéressant): http://www.maximummt.com/electronique-rc-f23/visualisation-du-dialogue-recepteur-servo-t20938.html

mais du coup une question se pose ? comment je fait pour mesuré la duré des impulsion ??

comment je fait pour comparé le temps de l'impulsion avec un temps que je définit arbitrairement ?



#22336 [c+] Arduino: Questions diverses

Posté par arthael sur 29 mars 2011 - 08:55 dans Programmation

bah oui j'envoie des commande a l'arduino depuis processing.

Et je veut recevoir les 2 tensions de mes deux batterie de l'arduino vers processing, a 0.1V prés ca me va.




#22295 [c+] Arduino: Questions diverses

Posté par arthael sur 15 février 2011 - 10:03 dans Programmation

oui!! merci, je vient d'y penser dans la voiture! je me suis dit "bon sang mais c'est bien sur!"

je teste demain soir, après le boulot (enfin le stage)

Edit (16/02/11): C'est bon, ca fonctionne exactement comme je le voulais.



#22296 [c+] Arduino: Questions diverses

Posté par arthael sur 19 février 2011 - 09:58 dans Programmation

Nouveau problème, j'ai bien avancé dans le futur programme de mon robot. mais en voulant l'amélioré je me suis heurté a ce problème.





#include

int A=1;


void setup() {

pinMode(0,INPUT);
pinMode(1,OUTPUT);

}


void loop() {

if (digitalRead(0) == HIGH)
{
if (A = 1)
{
digitalWrite(1,HIGH);
}
else
{
digitalWrite(1,LOW);
}

A = 0;
}

if (digitalRead(0) == LOW)
{
A = 1;
}
}




[/code]


En théorie ca devrait être une bascule D, si j'appuie sur mon interrupteur en 0 la diode en 1 s'allume, et elle s'éteint uniquement si j'ai relâché le bouton avant de le re-actionné.



#22321 [c+] Arduino: Questions diverses

Posté par arthael sur 28 mars 2011 - 06:28 dans Programmation

Bah moi ca n'est pas ca.. il sont tous régler a 115200 bauds..

je me suis dit que c'etait peut etre du au type de donné que j'envoyé (un float) alors je l'ai converti en int mais ca na rien changer. je recoit des 50 des 13 au lieu de 6800 et 680..




#22298 [c+] Arduino: Questions diverses

Posté par arthael sur 19 février 2011 - 11:13 dans Programmation

c'est justement ce que je veut, quand j'appuie sur le bouton la diode change d'état.

c'est pour me permettre d'évité a la diode de changer d'état 50 fois a chaque fois que j'appuie.

la, j'appuie elle s'allume, je relâche et quand je r appuie elle s'éteint.


Edit: j'ai reussi c'est bon :D


boolean A=1;
boolean etat = LOW;

void setup() {

pinMode(0,INPUT);
pinMode(1,OUTPUT);

}


void loop() {

if (digitalRead(0) == HIGH)
{

switch(A)
{
case 0:
break;

case 1:
etat = !etat;
A = 0;
break;
}

digitalWrite(1,etat);


}

if (digitalRead(0) == LOW)
{
A = 1;
}


}

[/code]



#22326 [c+] Arduino: Questions diverses

Posté par arthael sur 28 mars 2011 - 08:34 dans Programmation

si j'ai bien compris dans son code il utilise un tableau pour les valeur qu'il recoit sur l'arduino. j'ai fait plus ou moins la meme chose mais coté processing (et surement pas aussi optimiser).

et la n'est pas le probleme. la fonction Batt() je l'ai enlever pour fair des teste justement, et je m’aperçois que dans tout les cas les valeur reçu sur process ne sont pas celles envoyé par l'arduino. ni celles reçu par le serial monitor (qui sont les bonnes).

et je n'utilise pas le monitor en meme temps que le process.



#22306 [c+] Arduino: Questions diverses

Posté par arthael sur 21 mars 2011 - 12:36 dans Programmation

Voila du coup j'ai commencé un code processing pour piloter mon arduino de manière plus fluides.

le code en lui même est assez simple, mais pas moyen de le lancer. ca bloque au niveau des déclaration de liaison série et je ne trouve pas du tout :(

voici le code en question:


import processing.serial.*;
Serial MySerialPort;


void setup() {

println(Serial.list());
MySerialPort = new Serial(this, Serial.list()[1], 9600);

}

void draw() {

}


void keyPressed() {

switch (key) {

case 'z':

MySerialPort.write('z');
break;

case 's':

MySerialPort.write('s');
break;

case 'd':

MySerialPort.write('d');
break;

case 'q':

MySerialPort.write('q');
break;

case 'p':

MySerialPort.write('p');
break;

case 'm':

MySerialPort.write('m');
break;

}
}
[/code]



#22330 [c+] Arduino: Questions diverses

Posté par arthael sur 29 mars 2011 - 06:49 dans Programmation

Dans mon cas je n'ai besoin d'envoyé que deux valeur: les tension de mes 2 batterie.
je n'ai peut être pas besoin d'un tableau. (même je crois que je commence a comprendre sont code)

dans l'autre cas, si je recopie tel quel le code, es qu'il supporte des valeur entre 600 et 7000 ??



#22308 [c+] Arduino: Questions diverses

Posté par arthael sur 21 mars 2011 - 03:16 dans Programmation

com 1 ?? c'est le "[1]" a la ligne 10 ?. pcq c'est effectivement ca qui bloque au lancement. et si je met un 3 (puisque mon arduino est com 3) ca marche pas non plus.

il me dit : ArrayIndexOutOfBoundsExeption: 3



#22334 [c+] Arduino: Questions diverses

Posté par arthael sur 29 mars 2011 - 08:00 dans Programmation

bon et bien, j'ai essayé de recopié le code, puisque j'ai que deux valeur a envoyé ca devrait fonctionné assez bien..
Mais sur processing, pas moyen d'avoir la deuxième valeur (celle situé sur les bite de poid fort).

je t'envoie l'code.

arduino: (la fonction Batt est appeler environ toute les seconde)


void Batt () {

if (TBA < 560 && digitalRead(BA) == HIGH) {

digitalWrite(BA, LOW);
digitalWrite(BB, HIGH);

}

else if (TBB < 560 && digitalRead(BB) == HIGH) {

digitalWrite(BB, LOW);
digitalWrite(BA, HIGH);

}

else if (digitalRead(BA) == HIGH) {

TBA = (int) ((analogRead(Tension)*5./1024.)*200.);

}

else if (digitalRead(BB) == HIGH) {

TBB = (int) ((analogRead(Tension)*5./1024.)*200.);

}

calculOutValue (TBA,TBB);

//Serial.println(TBA);

//Serial.println(TBB);

Serial.println(outValue);

}




void calculOutValue ( int valeur_A, int valeur_B) {


outValue=0;
outValue=valeur_B;
outValue=outValue<<16;
outValue=outValue+valeur_A;

}


[/code]


processing:


void serialEvent (Serial MySerialPort) {


String inString = MySerialPort.readStringUntil('\n');

if (inString != null) {

inString = trim(inString);


int inValue = int(inString);



batt[0] = inValue & 65535;

batt[1] = inValue>>16;

batt[0] = batt[0] / 100;

batt[1] = batt[1] / 100;



}

}

[/code]

quand j'affiche le tableau Batt j'ai [0] = 6.88 (environ) et [1] = 0




#22285 [c+] Arduino: Questions diverses

Posté par arthael sur 09 février 2011 - 07:11 dans Programmation

ha ?.. ca a l'air compliqué.. comment tu fait ca ?.

moi je penser plus a un code du genre angle.read! (on peut toujours rêver ^^)



#22338 [c+] Arduino: Questions diverses

Posté par arthael sur 29 mars 2011 - 09:18 dans Programmation

ok la ca me va ^^ a la différence que je n'ai qu'une pin analog pour tester les deux batterie (je les teste une fois a tour de rôle dans le setup, puis je prend en compte que celle utilisé ;))






#22283 [c+] Arduino: Questions diverses

Posté par arthael sur 09 février 2011 - 06:21 dans Programmation

Plutôt que de "polluer" le poste de mon Robot en cours, je fait refait un sujet dans le forum approprié.
Comme ca je pose mes petite question de programmation ici.


La grosse question que je me pose et dont j'ai besoin pour commencé a programmer mon robot, c'est: comment récupéré a la sorti d'un récepteur radio (de modélisme), l'angle imposé au servo.

si quelqu'un a une solution simple je suis preneur. sinon je vais mesuré a l'oscilo (enfin avec l'arduino) les fréquence de sorti pour diffèrent angle et les réutilisé après.




#22312 [c+] Arduino: Questions diverses

Posté par arthael sur 21 mars 2011 - 08:13 dans Programmation

ha tout s'explique!! voyant qu'a ca ne fonctionné pas j'ai essayé de mettre de 1 a 10, et ca ne changer rien! par ce que c'était le 0!!

du cou ca fonctionne assez bien, je doit simplement adapter un peut plus mon code arduino et c'est bon :)

merci bien !





#22313 [c+] Arduino: Questions diverses

Posté par arthael sur 21 mars 2011 - 09:10 dans Programmation

Bon et bien, un problème résolu en soulève un autre...

mes programmes fonctionne correctement, par contre au niveau du processing le programme est sensé envoyé constamment la valeur de la touche qui est appuyer. Le probleme c'est qu'avec la fonction "keypressed" lorsque j'appuie sur z par exemple, le code envoie z une micro seconde attend une demi seconde et envoi z jusqu'a ce que la touche soit laché.

ce qui arrive sur un traitement de texte lorsque l'on laisse une touche appuyé, elle marque un temps d'arrêt avant d'écrire constament.

moi ce que j'aimerai savoir c'est comment supprimé ce laps de temps, pour évité que le robot marque des pause entre deux commande.