Tente de trouver du électrochimique, sinon oui prends celui-ci (attention, polarisé !!)
bonjours,
J'ai du mal à extraire les donnés d'accéleromètre en vue de les afficher sur une courbe .
J'ai regardé le code utilisé dans le site arduino pour faire bouger un carré dans processing
http://playground.arduino.cc/Main/WiiChuckClass (tout à la fin de la page )
lorsque j'utilise le code , il marche et le carré s'affiche dans une page mais je ne parvient pas à le bouger à l'aide de la télecommande ??
Lorsqu'on utilise processing .il ne faut pas ouvrir arduino avec ??
En faite j'essaye non plus de faire bouger un servo avec l'accéléromètre 3 AXES mais j'essaye d'utiliser le joystick mais je n'arrive pas .
voici ce que j'ajoute au code .le code lorsque je l' ajoute est bon mais lorsque je bouge le joystik rien ne marche .
bizare car ca marche pas , meme lorque j'utilise une autre manette . De plus les valeurs du joystick varient lorsque je bouge le joystck
if (counter = 5)
{
// on extrait les données
// dans mon exemple j’utilise uniquement les données d’accélération sur l’axe Y
double joyX = ((data[0] && 2) - ZEROX);
double joyY = ((data[1] && 2) - ZEROY);
// on limite la valeur entre -180 et 180
int value = constrain(joyY, -180, 180);
// on mappe cette valeur pour le servomoteur soit entre 0 et 180
value = map(value, -180, 180, 0, 180);
// on écrit sur le servomoteur la valeur
servomoteur.write(value);
}
On avance pas, malgré ce que je me tanne à te répéter...
Déjà, pourquoi repartir sur une nouvelle version de code ? La première était une bonne base... Si, dès qu'il y a un problème, tu pars en quête d'un autre code en espérant qu'il marche, tu ne vas pas y arriver ! Il faut réfléchir, et ne pas se contenter de dire, "ça marche pas, je vais regarder un truc complètement différent."
Dans ton code arduino message précédent, il n'y a RIEN qui envoie des données sur le port série. Pas étonnant que ça ne fonctionne pas ! Je ne comprends pas que tu n'ai toujours pas saisi comment fonctionne le couple arduino + processing !!
Pour le PREMIER code, poste le code arduino ET processing. Je ne peux rien analyser sinon...
A éviter !Lorsqu'on utilise processing .il ne faut pas ouvrir arduino avec ??
Bref, prends une version de code, et travaille uniquement sur celle là. Analyse le code, étudie les instructions utilisées, et voit comment le faire marcher. Et les remarques du genre "ça marche pas" ne font rien avancer du tout. Et ce genre de remarques :
Prouve que tu ne t'es pas donné la peine de lire le manuel...quelle est l'utilité de rajouter ça textFont(font, 11);
Il est vrai que j'ai tendance à aller dans tout les sens .
Mais j'essaye de te poser plusieurs question pour avancer le plus possible et étant donné qu'on ne peux pas echanger
en direct .
En effet le code marché , mais je veux faire marcher 6 servo dans le but de faire marcher un bras robotisé . 2 servo parallax avec les informations des accéléromètres et 2 micro servo à l'aide des informations du joystik (axe X et Y) et 2 micro servo pour faire bouger une pince à l'aide des bouton C et Z
D'ou pourquoi j'essaye d'utiliser le joystik mais celui-ci ne veux pas fonctionner ?
Les axes du joysticks sont dans les octets 1 et 2 donc j'essaye de faire in truc comme ca met.
Met , c'est que je ne suis pas à laisse avec les histoire d'octet je dois mettre le numéros d'ctet ou de bits entre les []
data[0]
il est clair que je n'est pas compris l’intérêt du port série . Éclair moi si tu le veux bien
car pour moi le port serie permet je de faire défiler sur l'écran les donnés d'accé , de joystik et c et d
et pour les obtenir on utilise Serial.print() et non lcd.print()
Pour moi , les lignes Sérial.print() ne sont pas indispensable
Que veux tu dire en disant quetu parles bien du code arduino et non de processingil n'y a RIEN qui envoie des données sur le port série
C'est bizare que le code ardui marche pour l'acce et non pour le joystik etant donné que j'ai juste changé la partie accéleratio par celle joystick
voici le code cube open source
http://playground.arduino.cc/Main/Wi...rceblock&num=6
Lequel ?En effet le code marché ,
Aie... Comment tu veux fixer une position angulaire d'un servo avec une accélération ? Tu n'aurais pas oublié une intégration quelque part ? Disons que fixer la position angulaire à partir d"une info d'accélération est assez peu utile... J'ai peur que tu fasses fausse route...? (L'accélération est la dérivée en fonction du temps de la vitesse, tu le sais ça ?)mais je veux faire marcher 6 servo dans le but de faire marcher un bras robotisé . 2 servo parallax avec les informations des accéléromètres
Chaque chose en son temps... Faudrait aussi que tu me reprécises la différence entre les différents éléments de la manette, la wii c'est pas ma spécialité !!et 2 micro servo à l'aide des informations du joystik (axe X et Y) et 2 micro servo pour faire bouger une pince à l'aide des bouton C et Z
D'ou pourquoi j'essaye d'utiliser le joystik mais celui-ci ne veux pas fonctionner ?
???Les axes du joysticks sont dans les octets 1 et 2 donc j'essaye de faire in truc comme ca met.
???? C'est nouveau ces histoires d'octet ? C'est quoi pour toi un octet ? J'ai peur pour la suite !!Met , c'est que je ne suis pas à laisse avec les histoire d'octet je dois mettre le numéros d'ctet ou de bits entre les []
data[0]
C'est bien ça... Mais, pour tracer des courbes, il faut que la arduino envoie des données au pc. Et ce transfert s'effectue via cette même liaison. Tu envoies les données de la même façon, (avec serial.print) mais sans mettre d'écran, car là c'est le pc qui va exploiter les données. Cette exploitation va être réalisée par le code processing qui va récupérer ces données et effectuer le tracé.il est clair que je n'est pas compris l’intérêt du port série . Éclair moi si tu le veux bien car pour moi le port serie permet je de faire défiler sur l'écran les donnés d'accé , de joystik et c et d
et pour les obtenir on utilise Serial.print() et non lcd.print()
Hé bin si... Sans ces lignes, le PC ne reçoit rien !Pour moi , les lignes Sérial.print() ne sont pas indispensable
Oui peut être, mais si tu n'envoies pas de données...C'est bizare que le code ardui marche pour l'acce et non pour le joystik etant donné que j'ai juste changé la partie accéleratio par celle joystick
les 2 codes ( le code arduino fessant bouger juste les joystiks et le code processing ce qui n'est pas étonnant vu qu'il est opensource)En effet le code marché ,
Lequel ?
le code arduino est validé mais les joystick ne bougent pas et le code processing n'as pas d'erreurs mais le carrée s'affiche mais je ne peux pas le bouger à l'aide des accéleromètres soit en bougeant la manette!
(si tu veux on peut oublier processing pour le moment et se consacrer sur les autres points)
j'avoue que là je n'ai pas compris ? déjà la position angulaire varie si le servo tourne et s'est ce que j'obtient .Comment tu veux fixer une position angulaire d'un servo avec une accélération
Pourquoi devrais-je fixer une position angulaire d'un servo avec une accélération.
Tu tout à fait raison de soulever ce problème car il faut bien que je comprenne cela avant de passer à la suite(L'accélération est la dérivée en fonction du temps de la vitesse, tu le sais ça ?)
veux tu dire que je n'obtient pas la position car il n'y à pas de calcul permettant de passer d'une accéleration en une position??
l'accéleromètre ADXL 330 de la wii donne l'accélération de l'objet suivant 3 axes et il faut dériver 2 fois pour obtenir la position de cette objet ( quand tu parles de position il s'agit biend eposition angulaire des servos)
Mais je ne sais plus quoi dire . Que dois je integrer et comment ?? car pour moi l'accéléromètre permet de faire tourner les servos donc j'en ai déduis que j'obtient à partir des donnés brutes d'accéleration , une position angulaire car les servo tourne .
Peut tu m'expliquer pourquoi ce n'est pas le cas et comment le faire?
car d'àprès cette video https://www.youtube.com/watch?v=iXCkfVol3oo
on à bien une position ,et le système peux se rapprocher d'un bras motorisé (avec des servos)
nunchuck=tu me reprécises la différence entre les différents éléments de la manette
un accéléromètre à 3 axes(xyz)
une croix analogique à 2 axes(xy)=joystick
utilise la communication I2C
les informations numériques de na nunchuck sont codé sous la forme de 0 et 1 .Chacun de ces chiffre étant 1 bit et un octet s'est 8 bitsC'est quoi pour toi un octet ? J'ai peur pour la suite !!
La nunchuck envoit 6 octets ( des infos étant ds ces octets)
avec ca on demande un tableau de donnée de 6 octet ?? uint8_t data[6]Octet 1 :
Position du joystick sur l’axe x
Octet 2 :
Position du joystick sur l’axe y
Octet 3 :
Accélération sur l’axe x bit 9 à 2
Octet 4 :
Accélération sur l’axe y bit 9 à 2
Octet 5 :
Accélération sur l’axe z bit 9 à 2
Octet 6 :
Accélération sur l’axe z bit 1 et 0
Accélération sur l’axe y bit 1 et 0
Accélération sur l’axe x bit 1 et 0
infos bouton C
infosboutonD
donc entre les [] ,il s'agit bien du nbre octet ??
on demande 6 octets au nunchuck
Wire.requestFrom(WII_NUNCHUK_I 2C_ADDRESS, 6)
mais après ce que j'utilise est en contraduictionavec mon code car observe le sumero dans le data[] cela ne correspond pas au octet évoqué
[B]Peut tu m'expliquer comment coder avec les octets ?? [/B.
] le sujet repose sur ça car on fait extrait les infos accél, joystik , bouton à l'aides des octets ou bites (je t'avoue que je n'ai pas bien compris)en tout cas ,Cela ne sert à rien de passer à la suite sans comprendre cela.C'est nouveau ces histoires d'octet ?
sans mettre d'écran?? c'est quoi çaTu envoies les données de la même façon, (avec serial.print) mais sans mettre d'écran
Est-ce qu'il manque juste des Serial.print() pour que losque je bouge la manette le carrée bouge ??
car dans le code carrée il n'y à aucun Serial.print()
Comment envoyer ces données car en faite j'ai pris le code avec les accélérations et j'ai modifié avec juste la partie envoyé des donnée de l'accéleration par celle du joystik (utilisation d'octet différents)?? Il y a les Serial.print()C'est bizare que le code ardui marche pour l'acce et non pour le joystik etant donné que j'ai juste changé la partie accéleratio par celle joystick
Oui peut être, mais si tu n'envoies pas de données...
PS : il vaudrais mieux mettre au clair les histoire d'octet , de position angulaire et le joystique qui ne marche pas avant de passer à la suite
si tu veux ,on peut oublier processing pour le moment !
pour le joystique j'ai dans le code
lcd.print(chuck.readJoyY());
donc j'ai essayé de faire
lcd.print((int)chuck.readJoyY( ));
mais rien à faire .
voici un bras fonctionnant à l'aide d'une nunchuck
https://www.youtube.com/watch?v=uzj0HpxRW4s
C'est pas parce que le code arduino compile qu'il envoie correctement les valeurs. Il faut faire marcher le couple arduino + processing, tu ne peux rien faire l'un sans l'autre.les 2 codes ( le code arduino fessant bouger juste les joystiks et le code processing ce qui n'est pas étonnant vu qu'il est opensource)
le code arduino est validé
C'est que soit l'arduino envoie rien/des données erronées soit que le code processing déconne... Poste les DEUX codes. Et c'est QUOI cette histoire de carré ? Tu veux plus tracer de courbes ?mais les joystick ne bougent pas et le code processing n'as pas d'erreurs mais le carrée s'affiche mais je ne peux pas le bouger à l'aide des accéleromètres soit en bougeant la manette!
C'est bien la question que je te pose ! Si toi même tu ne sais pas...Pourquoi devrais-je fixer une position angulaire d'un servo avec une accélération.
Oui ! Ca ne sert à rien (pour moi) de faire qu'un angle soit égal à une accélération...veux tu dire que je n'obtient pas la position car il n'y à pas de calcul permettant de passer d'une accéleration en une position??
INTEGRER !!l'accéleromètre ADXL 330 de la wii donne l'accélération de l'objet suivant 3 axes et il faut dériver 2 fois pour obtenir la position de cette objet
Le servo est "bête"... Il fait ce que tu lui dit de faire... Tu pourrais très bien le faire tourner en fonction de l'humidité ambiante de la pièce, que ça serait pareil. Une accélération lue par ce genre de capteurs est pas lisse du tout (tu as bien vu sur tes premiers résultats). Lui, il y va bêtement !!Mais je ne sais plus quoi dire . Que dois je integrer et comment ?? car pour moi l'accéléromètre permet de faire tourner les servos donc j'en ai déduis que j'obtient à partir des donnés brutes d'accéleration , une position angulaire car les servo tourne .
Il faut intégrer 2 fois pour revenir sur une position...Peut tu m'expliquer pourquoi ce n'est pas le cas et comment le faire?
Tu comprends ce que signifie tout ça ou pas ?les informations numériques de na nunchuck sont codé sous la forme de 0 et 1 .Chacun de ces chiffre étant 1 bit et un octet s'est 8 bits
La nunchuck envoit 6 octets ( des infos étant ds ces octets)
Laisse tomber, je me suis embrouillé...sans mettre d'écran?? c'est quoi ça
Possible...Est-ce qu'il manque juste des Serial.print() pour que losque je bouge la manette le carrée bouge ??
Quel code ? Processing (normal qu'il n'y en ai pas) ou arduino (normalement indispensable) ?car dans le code carrée il n'y à aucun Serial.print()
Comment envoyer ces données car en faite j'ai pris le code avec les accélérations et j'ai modifié avec juste la partie envoyé des donnée de l'accéleration par celle du joystik (utilisation d'octet différents)?? Il y a les Serial.print()
PS : il vaudrais mieux mettre au clair les histoire d'octet , de position angulaire et le joystique qui ne marche pas avant de passer à la suite
Pourquoi d'un coup tu t'embêtes avec les octets ? C'est la librairie qui fait tout ça ! A à priori, ça fonctionne...
PS : Va falloir penser à faire un livre avec nos échanges passionnants
voici le code pour le jotystick qui ne fonctionne pas
je ne vis vraiment pas pourquoi ca ne marche pas#include <math.h>
#include <Servo.h>;
#include <Wire.h>;
#include "Wire.h" // voir son utilité?
#include "WiiChuck.h"
#include "LiquidCrystal.h"
#define MAXANGLE 90
#define MINANGLE -90
// Doit être ajusté en fonction de chaque nunchuck
#define ZEROX 530
#define ZEROY 530
#define ZEROZ 530
// adresse I2C du nunchuck
#define WII_NUNCHUK_I2C_ADDRESS 0x52
// définition d'une variable Servo (Creer un objet servo pour controler un servo)
Servo servomoteur;
// définition d'une variable counter
int counter;
WiiChuck chuck = WiiChuck();
int angleStart, currentAngle;
int tillerStart = 0;
double angle;
// définition d'un tableau de données
uint8_t data[6];
void setup() {
//nunchuck_init();
lcd.begin(16, 2);
// on attache le servomoteur à la pin 11 (PWM)
servomoteur.attach(13);
Serial.begin(115200);
chuck.begin();
chuck.update();
//chuck.calibrateJoy();
// initialisation du nunchuck
Wire.begin();
Wire.beginTransmission(WII_NUN CHUK_I2C_ADDRESS);
Wire.write(0xF0);
Wire.write(0x55);
Wire.endTransmission();
Wire.beginTransmission(WII_NUN CHUK_I2C_ADDRESS);
Wire.write(0xFB);
Wire.write(0x00);
Wire.endTransmission();
}
void loop(){
// on demande 6 octets au nunchuck
Wire.requestFrom(WII_NUNCHUK_I 2C_ADDRESS, 6);
counter = 0;
// tant qu'il y a des données
while(Wire.available())
{
// on récupère les données
data[counter++] = Wire.read();
}
// on réinitialise le nunchuck pour la prochaine demande
Wire.beginTransmission(WII_NUN CHUK_I2C_ADDRESS);
Wire.write(0x00);
Wire.endTransmission();
if (counter = 5)
{
// on extrait les données
// dans mon exemple j’utilise uniquement les données d’accélération sur l’axe Y
double joyX = ((data[0] && 2) - ZEROX);
double joyY = ((data[1] && 2) - ZEROY);
// on limite la valeur entre -180 et 180
int value = constrain(joyY, -180, 180);
// on mappe cette valeur pour le servomoteur soit entre 0 et 180
value = map(value, -180, 180, 0, 180);
// on écrit sur le servomoteur la valeur
servomoteur.write(value);
}
//nunchuk.update();
// ce q j'ai enlevé
//nunchuk.update();
chuck.update(); // (voir si on peut creer une parenthese et la fermer avant celle finale)
lcd.setCursor(0, 0);
lcd.print(chuck.readJoyX());
lcd.print(' ');
lcd.print(chuck.readJoyY());
lcd.print(' ');
lcd.print(chuck.cPressed()?"c1 ":"c0");
lcd.print(' ');
lcd.print(chuck.zPressed()?"z1 ":"z0");
lcd.print(' ');
lcd.setCursor(0, 1);
lcd.print((int)chuck.readAccel X());
lcd.print(' ');
lcd.print((int)chuck.readAccel Y());
lcd.print(' ');
lcd.print((int)chuck.readAccel Z());
lcd.print(' ');
lcd.print((int)chuck.readJoyY( ));
lcd.print(' ');
// un petit delai pour pas saturer le servomoteur (attend quelques ms pr q le servo etteigne la position)
delay(100);
lcd.clear();
}
Tu as des problèmes avec la langue française ou tu ne t'es pas donné la peine de me lire ? J'ai déjà dit (plusieurs fois) que :
-poster un seul code sur les 2 est inutile;
-il faut des serial.print pour envoyer les données dans le code arduino.
voila le code je te l'ai envoyé en message privé
[/QUOTE]
a mon avis le soucis se situe là car je ne comprends pourquoi ce serait d'utiliser lcd.print() à la place de Serial.print qui serait à l'origine du problème car le code avec les accélerations à des lcd.print() mais il marche?
et la librairie wiichuck car je crois que le souci est ici au niveau de la transmition
je crois qu'il y à un & en trop n'est ce pas et
je crois qu'il faut que j'utilise joyX = ((data[0] && 2) - ZEROX); à la place de double joyX = ((data[0] & 2) - ZEROX);
Je pense que le double permet d’intégrer 2 fois les données d'accélération , et dans ce cas il n'est pas utile
mais j'obtient ces erreurs en modifiant
autre possibilité . se conformer à la librairie wiichuck et balancervarie_fina4.ino: In function 'void loop()':
varie_fina4:96: error: 'joyX' was not declared in this scope
varie_fina4:97: error: 'joyY' was not declared in this scope
JoyX = (data[0]) ;
JoyY = (data[1]) ;
Comment expliques tu que le code avec les acceleration que je t'es envoyé en message privé marche avec des lcd.print() et le code avec les joystik ne marcherais pas avec des lcd.print() mais des Serial.print() .il faut des serial.print pour envoyer les données dans le code arduino.
Comment ce fait il que je code alors avec les accé marche??
Si tu veux de l'aide, inutile de me passer les codes en MP. C'est ici, ou nulle part.
ok d'accord
peut tu répondre s'il te plait à mes questions car je ne comprend pas pourquoi le lcd.print() serait à l'origine du fais que le joystik ne fonctionne pas ?
Sans code...
A priori il n'y a aucun rapport entre les 2.
Après j'ai du mal à te suivre, tu mélanges (encore...) 36 sujets : cette nouveauté avec le joystick dont on a pas entendu parler, ton histoire d'octet, ton histoire d'intégration, tes problèmes d'affichage de courbe... Soit tu précises, avec les codes entiers associés, soit je laisse tomber.
Quand je vois des horreurs comme ça, j'ai vraiment envie de te dire de laisser tomber complètement le projet...Je pense que le double permet d’intégrer 2 fois les données d'accélération , et dans ce cas il n'est pas utile
Tu penses vraiment pouvoir être crédible face à un prof ? Si tu cherches à les impressionner avec un projet complexe, c'est raté. Tu va te faire allumer à la première question !!
ok
le double est comme le float soit il permet d'exprimer une variable mais de manière plus précise donc
double joyX = ((data[0] & 2) - ZEROX); et joyX = ((data[0] & 2) - ZEROX); c'est la meme chose mais l'ajout du double permet d'avoir une précision plus importante?
J’essaye de code en utilisant précisément les termes de la librairie WiiChuck .ICI j'essaye de voir comment coder juste le joystick de la nunchuck en utilisant juste la librairie Wiichuck
Voilà selon moi ce que je dois mettre dans mon code . Je vais introduire ce code dans l'original et voir ce qu'il se passe !
Voici la librairie Wichuck que j'utilise . Merci de m'informer d'une possible mauvaise démarche de ma part. Tu me dis qu'il faut partir de la librairie pour coder et c'est ce que j'essaye de faire#define DEFAULT_ZERO_JOY_X 124
#define DEFAULT_ZERO_JOY_Y 132
zeroJoyX = DEFAULT_ZERO_JOY_X;
zeroJoyY = DEFAULT_ZERO_JOY_Y;
void setup() {
//il ya des informations bien sur à rajouter
}
void loop(){
if (counter > 5){
joyX = ((status[0] & 2)-zeroJoyX)
joyY = ((status[1] & 2)-zeroJoyY)
int value = constrain(joyX, -180, 180);
int value = constrain(joyY, -180, 180);
value = map(value, -180, 180, 0, 180);
Serial.print(chuck.readJoyX()) ;
Serial.print(' ');
Serial.print(chuck.readJoyY()) ;
Serial.print(' ');
}
delay(100)
}
#ifndef WiiChuck_h
#define WiiChuck_h
#include "WProgram.h"
#include <Wire.h>
#include <math.h>
// these may need to be adjusted for each nunchuck for calibration
#define ZEROX 510
#define ZEROY 490
#define ZEROZ 460
#define RADIUS 210 // probably pretty universal
#define DEFAULT_ZERO_JOY_X 124
#define DEFAULT_ZERO_JOY_Y 132
class WiiChuck {
private:
byte cnt;
uint8_t status[6]; // array to store wiichuck output
byte averageCounter;
//int accelArray[3][AVERAGE_N]; // X,Y,Z
int i;
int total;
uint8_t zeroJoyX; // these are about where mine are
uint8_t zeroJoyY; // use calibrateJoy when the stick is at zero to correct
int lastJoyX;
int lastJoyY;
int angles[3];
boolean lastZ, lastC;
public:
byte joyX;
byte joyY;
boolean buttonZ;
boolean buttonC;
void begin()
{
Wire.begin();
cnt = 0;
averageCounter = 0;
// instead of the common 0x40 -> 0x00 initialization, we
// use 0xF0 -> 0x55 followed by 0xFB -> 0x00.
// this lets us use 3rd party nunchucks (like cheap $4 ebay ones)
// while still letting us use official oness.
// only side effect is that we no longer need to decode bytes in _nunchuk_decode_byte
// see http://www.arduino.cc/cgi-bin/yabb2/...num=1264805255
//
Wire.beginTransmission(0x52); // device address
Wire.send(0xF0);
Wire.send(0x55);
Wire.endTransmission();
delay(1);
Wire.beginTransmission(0x52);
Wire.send(0xFB);
Wire.send(0x00);
Wire.endTransmission();
update();
for (i = 0; i<3;i++) {
angles[i] = 0;
}
zeroJoyX = DEFAULT_ZERO_JOY_X;
zeroJoyY = DEFAULT_ZERO_JOY_Y;
}
void calibrateJoy() {
zeroJoyX = joyX;
zeroJoyY = joyY;
}
void update() {
Wire.requestFrom (0x52, 6); // request data from nunchuck
while (Wire.available ()) {
// receive byte as an integer
status[cnt] = _nunchuk_decode_byte (Wire.receive()); //
cnt++;
}
if (cnt > 5) {
lastZ = buttonZ;
lastC = buttonC;
lastJoyX = readJoyX();
lastJoyY = readJoyY();
//averageCounter ++;
//if (averageCounter >= AVERAGE_N)
// averageCounter = 0;
cnt = 0;
joyX = (status[0]);
joyY = (status[1]);
for (i = 0; i < 3; i++)
//accelArray[i][averageCounter] = ((int)status[i+2] << 2) + ((status[5] & (B00000011 << ((i+1)*2) ) >> ((i+1)*2)));
angles[i] = (status[i+2] << 2) + ((status[5] & (B00000011 << ((i+1)*2) ) >> ((i+1)*2)));
//accelYArray[averageCounter] = ((int)status[3] << 2) + ((status[5] & B00110000) >> 4);
//accelZArray[averageCounter] = ((int)status[4] << 2) + ((status[5] & B11000000) >> 6);
buttonZ = !( status[5] & B00000001);
buttonC = !((status[5] & B00000010) >> 1);
_send_zero(); // send the request for next bytes
}
}
// UNCOMMENT FOR DEBUGGING
//byte * getStatus() {
// return status;
//}
float readAccelX() {
// total = 0; // accelArray[xyz][averageCounter] * FAST_WEIGHT;
return (float)angles[0] - ZEROX;
}
float readAccelY() {
// total = 0; // accelArray[xyz][averageCounter] * FAST_WEIGHT;
return (float)angles[1] - ZEROY;
}
float readAccelZ() {
// total = 0; // accelArray[xyz][averageCounter] * FAST_WEIGHT;
return (float)angles[2] - ZEROZ;
}
boolean zPressed() {
return (buttonZ && ! lastZ);
}
boolean cPressed() {
return (buttonC && ! lastC);
}
// for using the joystick like a directional button
boolean rightJoy(int thresh=60) {
return (readJoyX() > thresh and lastJoyX <= thresh);
}
// for using the joystick like a directional button
boolean leftJoy(int thresh=60) {
return (readJoyX() < -thresh and lastJoyX >= -thresh);
}
int readJoyX() {
return (int) joyX - zeroJoyX;
}
int readJoyY() {
return (int)joyY - zeroJoyY;
}
// R, the radius, generally hovers around 210 (at least it does with mine)
// int R() {
// return sqrt(readAccelX() * readAccelX() +readAccelY() * readAccelY() + readAccelZ() * readAccelZ());
// }
// returns roll degrees
int readRoll() {
return (int)(atan2(readAccelX(),readA ccelZ())/ M_PI * 180.0);
}
// returns pitch in degrees
int readPitch() {
return (int) (acos(readAccelY()/RADIUS)/ M_PI * 180.0); // optionally swap 'RADIUS' for 'R()'
}
private:
byte _nunchuk_decode_byte (byte x)
{
//decode is only necessary with certain initializations
//x = (x ^ 0x17) + 0x17;
return x;
}
void _send_zero()
{
Wire.beginTransmission (0x52); // transmit to device 0x52
Wire.send (0x00); // sends one byte
Wire.endTransmission (); // stop transmitting
}
};
#endif
En gros oui, mais dans ton cas un float peut à priori suffire...le double est comme le float soit il permet d'exprimer une variable mais de manière plus précise donc
double joyX = ((data[0] & 2) - ZEROX); et joyX = ((data[0] & 2) - ZEROX); c'est la meme chose mais l'ajout du double permet d'avoir une précision plus importante?
http://arduino.cc/en/Reference/Float
http://arduino.cc/en/Reference/Double
Si tu testes un truc nouveau (le joystick) tu peux aussi si ça peut te simplifier la vie faire le test du joystick uniquement dans un petit programme, à part. Si l'essai est concluant, tu balances dans ton "gros" code (ton code principal). Il est en effet plus facile en cas de problèmes de corriger un "petit" code plutôt qu'un gros.J’essaye de code en utilisant précisément les termes de la librairie WiiChuck .ICI j'essaye de voir comment coder juste le joystick de la nunchuck en utilisant juste la librairie Wire
J'utilise cela .Voilà selon moi ce que je dois mettre dans mon code . Je vais introduire ce code dans l'original et voir ce qu'il se passe !
Code lu en diagonale, tente effectivement, ça semble pas trop mal...Voici la librairie Wichuck que j'utilise . Merci de m'informer d'une possible mauvaise démarche de ma part. Tu me dis qu'il faut partir de la librairie pour coder et c'est ce que j'essaye de faire
Voici le code qui marche .Bien sur marché est un très grand mot car je voulais obtenir les 2axes mais je ne peux faire tourner le servo juste avec l'axe X du joystik . Comment ce fait -il que les 2 axes ne fonctionnent pas en meme temps .
mais j'ai été confronté à de nombreux soucis que je ne comprend pas
deja le code ne marche pas si je ne rajoute pas le double avant le joyX = ((data[0]));
l'erreur qu'il me donne c'est joyX was not declared in this scope si je n'utilise pas le double
peut tu m'expliquer pourquoi ?car je penser que se n'était pas indispensable
j'ai essayé le floatque tu m'a dis et sa marche ?
De plus, j'ai fais comme avec les accé et mis les valeurs du joystiq de début pour améliorer comme cela
#define DEFAULT_ZERO_JOY_X 124
#define DEFAULT_ZERO_JOY_Y 132
....
double joyX = ((data[0] & 2)-DEFAULT_ZERO_JOY_X );
double joyY = ((data[1] & 2)-DEFAULT_ZERO_JOY_Y );
mais avec cela quand je téleverse le code déja un truc bizarre le servo ne bouge meme pas ce qui est le cas avec les autres codes et je vois par la suite que le joystik ne fais rien bougé donc je vais voir le moniteur série et là je vois que les valeurs du joystique ne varie pas l'orque je bouge le joystik
Peut tu m'aider à rajouter ce DEFAULT_ZERO_JOY_X et Y
par contre le joystik de l'axe X fait tourner le servo . Mais celui de l'axe Y ne fait rien bouger?
Autre chose le servo semble bouger juste de 45 degrès ce qui est très faible comment corriger cela car dans le code j'ai mis -180 à 180#include <math.h>
#include <Servo.h>;
#include <Wire.h>;
#include "Wire.h"
#include "WiiChuck.h"
#define WII_NUNCHUK_I2C_ADDRESS 0x52
Servo servomoteur;
int counter;
WiiChuck chuck = WiiChuck();
int angleStart, currentAngle;
int tillerStart = 0;
double angle;
uint8_t data[6];
void setup() {
servomoteur.attach(13);
Serial.begin(9600);
chuck.begin();
chuck.update();
Wire.begin();
Wire.beginTransmission(WII_NUN CHUK_I2C_ADDRESS);
Wire.write(0xF0);
Wire.write(0x55);
Wire.endTransmission();
Wire.beginTransmission(WII_NUN CHUK_I2C_ADDRESS);
Wire.write(0xFB);
Wire.write(0x00);
Wire.endTransmission();
}
void loop(){
Wire.requestFrom(WII_NUNCHUK_I 2C_ADDRESS, 6);
counter = 0;
while(Wire.available())
{
data[counter++] = Wire.read();
}
Wire.beginTransmission(WII_NUN CHUK_I2C_ADDRESS);
Wire.write(0x00);
Wire.endTransmission();
if (counter >= 5){
double joyX = ((data[0]));
double joyY = ((data[1]));
int valueX = constrain(joyX, -180, 180);
int valueY = constrain(joyY, -180, 180);
valueX = map(valueX, -180, 180, 0, 180);
valueY = map(valueY, -180, 180, 0, 180);
servomoteur.write(valueX);
servomoteur.write(valueY);
}
chuck.update();
Serial.print(chuck.readJoyX()) ;
Serial.print(' ');
Serial.print(chuck.readJoyY()) ;
Serial.print(' ');
delay(100);
}
PS: pouvons nous changer de post il commence par y avoir beaucoup de pages
Voila , j'aimerais également que l'on parle de ses lignes .Je m'excuse d'avance car on risque de parler de bits
double joyX = ((data[0] && 2) - ZEROX);
et
double accelX = ((data[2] << 2) + ((data[5] >> 2) & 0x03) - ZEROX);
Bon le double ou float est indispenssable ce que je n'ai pas compris donc comprends maintenant pourquoi il m'a fallut du temps avant de comprendre mon erreur (celle la : j'avais oublié le int ici dans les instruction avant le setup)
#define DEFAULT_ZERO_JOY_X -4
#define DEFAULT_ZERO_JOY_Y -4
int zeroJoyX = DEFAULT_ZERO_JOY_X;
int zeroJoyY = DEFAULT_ZERO_JOY_Y;
c'est pas pour autant que j'arrive à utiliser le zeroJoyX dans cette ligne joyX = ((data[0] && 2) - ZEROX); car je ne parvient toujours pas à le faire
Voilà , ça je comprend double joyX = ((data[0]) && 2) - ZEROX); soit j'extrait les données du joystick suivant l'axe X et j'enlève la valeur initiale pour partir de ZERO mais ça je ne comprend pas à quoi sert le & ( tu as du le comprendre car je t'ai dis qu'il y avait une erreur car il y en avait 2 qui se suivaient mais en faite je n'avais pas compris ) .je sais que s'est un opérateur binaire mais à quoi sert il dans ce cas là pourquoi il y à un 2 juste après pour le joystick et un 0x03 pour l'accélération .
accelX = ((data[2] << 2) + ((data[5] >> 2) & 0x03) - ZEROX);
Maintenant , ayant utilisé la joystick je comprend pourquoi tu parle de position fixe du servo . Et si tu avais queleques remarques là dessus je suis prenant . Comment y parvenir ?
Tu déclares une variable de type X, et ensuite tu restes avec le même type. Mélanger float/double est casse-gu***. Fait comme le code est prévu.deja le code ne marche pas si je ne rajoute pas le double avant le joyX = ((data[0]));
l'erreur qu'il me donne c'est joyX was not declared in this scope si je n'utilise pas le double
peut tu m'expliquer pourquoi ?car je penser que se n'était pas indispensable
j'ai essayé le floatque tu m'a dis et sa marche ?
Je ne comprends toujours pas... Ton servo, il tourne avec le joystick OU avec tes fameux relevés d’accélération (qui, on l'a vu, ne peuvent pas marcher en l'état).De plus, j'ai fais comme avec les accé et mis les valeurs du joystiq de début pour améliorer comme cela
#define DEFAULT_ZERO_JOY_X 124
#define DEFAULT_ZERO_JOY_Y 132
....
double joyX = ((data[0] & 2)-DEFAULT_ZERO_JOY_X );
double joyY = ((data[1] & 2)-DEFAULT_ZERO_JOY_Y );
mais avec cela quand je téleverse le code déja un truc bizarre le servo ne bouge meme pas ce qui est le cas avec les autres codes et je vois par la suite que le joystik ne fais rien bougé donc je vais voir le moniteur série et là je vois que les valeurs du joystique ne varie pas l'orque je bouge le joystik
Peut tu m'aider à rajouter ce DEFAULT_ZERO_JOY_X et Y
par contre le joystik de l'axe X fait tourner le servo . Mais celui de l'axe Y ne fait rien bouger?
Pour le joystick, il faut voir aussi quel type d'infos il renvoie : du digital (détection d'un coup de flèche à droite ou à gauche) ou de l'analogique (genre une position angulaire). Selon le type d'infos, le pilotage sera complètement différent !
Prends 10 minutes pour rédiger un cahier des charges complet de ton truc en expliquant de A à Z ce à quoi sert le tout, et comment il fonctionne.
NAN. S'il y a beaucoup de pages, c'est que ton sujet n'est pas clair / qu'il te manque des compétences / que je suis bien sympa de t'aider malgré le peu d'entrain que tu sembles mettre pour avancer correctement. Ouvrir un énième sujet ne fera que rendre le tout encore plus incompréhensible.
Le servo peut fonctionner soit avec les données d'accé ,des 2 axes en crois du joystik (ou avec les boutons c et z .A voir par la suite )Je ne comprends toujours pas... Ton servo, il tourne avec le joystick OU avec tes fameux relevés d’accélération
Mon but c'est de faire bouger 6 servo (2 avec les accé X et Y , 2 avec les joyX et Y et 2 por un pince avec les bouton c et z
Donc j'ai déja utilisé les accé et maintenant j'essaye d'utiliser les données des joy sur les axes X et Y
S'il te plait , explique moi pourquoi .tes fameux relevés d’accélération (qui, on l'a vu, ne peuvent pas marcher en l'état)
Est-ce du au 2 integrations ?? .Il est vrai , que j'au vu que pour faire une centrale inertielle , certaines personnes utilisées le mème
acceleromètre que celui de la nunchuck (ADXL 330 ) et qu'ils ajoutés une carte pour récupérer les données et faire les calculs sur un ordi.
Je suis plus quoi penser .Certains site parlent d' accéléromètre intégré de la Nunchuck ( je ne sais pas si il est déja intégré ou pas )
et le site internet d'une université anglais dis (tu m'excusera de ne pas avoir fait la traduction car j'ai l'impression que lorque j'essaye de la traduire je modifie le sens
donc il semblerais qu'il faut incorporer une integration mais comment ??use the acceleration information to estimate the position of
the accelerometer in the 2D space (table). As discussed in lecture, a double
integration may be a first approximation, but may have some issues. Please
incorporate such double integration into the XY calibration VI above. For your
reference, the VI Calibrate and Plot location XY Accelerometer
(Shell).vi has some of the user interface components that you can use to
visualize the position and to reset the integrators. (For the integration step use the
point-by-point VI provided in the Signal Processing palette.)
voilà ce qui donnent dans les sites de vente, un stick analogiquePour le joystick, il faut voir aussi quel type d'infos il renvoie
Ceux ci était prévisible car lorque je parlais d'octet je t'ais dis que les informations numériques(donc analogique) de na nunchuck sont codé sous la forme de 0 et 1 [/I]
Voila les problème que je rencontre .Lorsque j'utilise un joystik sur un axes par exemple X(le code marche mais de manière pas efficace du tout) ,lorque je tourne le joystik à droite le servo tourne de presque 45degrès mais lorsque je tourne le joystiq à gauche le servo toune mais avec une rotation très faible (environ10 degrès ) ce qui est pas normal . Que puis-je faire ?
j'ai utilisé sa pour être plus précis mais la rotation est plus faible .
servomoteur.write(90+joyX/2);
// on divise par 2 la valeur reçue pour moins d'amplitude et plus de précision
je voulais une amplitude plus grande et avec de la précision donc je vois pas comment faire !
Faire bouger un bras ( bras un très grand mot disons plutot 6 servosrédiger un cahier des charges complet de ton truc
2 avec les accé X et Y , 2 avec les joyX et Y et( 2 pour un pince avec les bouton c et z , a voir par la suite)
et je souhaite afficher les valeurs prises avec une lcd (déja fait)
Exact.S'il te plait , explique moi pourquoi .
Est-ce du au 2 integrations ?? .
Les relevés d’accélération dont on parle depuis 3 semaines, ils viennent d'où à ton avis ?Certains site parlent d' accéléromètre intégré de la Nunchuck ( je ne sais pas si il est déja intégré ou pas )
Sors tes cours de maths et de traitement du signal... Mais là ça va se corser !!donc il semblerais qu'il faut incorporer une integration mais comment ??
Tu n'as visiblement rien compris.. Quelle est la différence, pour toi, entre un signal analogique et numérique ? Et la différence entre un joystick analogique et numérique ?Ceux ci était prévisible car lorque je parlais d'octet je t'ais dis que les informations numériques(donc analogique) de na nunchuck sont codé sous la forme de 0 et 1 [/I]
Augmente l'amplitude avec un coef multiplateur...je voulais une amplitude plus grande et avec de la précision donc je vois pas comment faire !
Donc on oublie le tracé ?Faire bouger un bras ( bras un très grand mot disons plutot 6 servos
2 avec les accé X et Y , 2 avec les joyX et Y et( 2 pour un pince avec les bouton c et z , a voir par la suite)
et je souhaite afficher les valeurs prises avec une lcd (déja fait)
Laisse tomber l'histoir du joystik et du code .
Il faut faire cela avant et selon moi on devra faire appelle au filtre khalman énoncé précédemment
Laisse tomber l'histoir du joystik et du code . Il faut faire cela avant et selon moi on devra faire appelle au filtre khalman énoncé précedement
En effet , il y à un souci . Selon moi ,il faut filtrer les données provenant de l'accéleromètre dans le but d'obtenir la vitesse et la position dans l'espace
Mais integrer comment ?(d'après mon cours ,je sais juste que le filtre passe bas à a un comortement integrateur et cela ne m'avance pas vraiment. Comment puis-je integrer selon toi
directement sur le code arduino avec un algorithme ( de lignes de codes en plus ) ou filtrer électroniquement (soit faire un montage et rajouter des composants )
Or ,le fait d'intégrer la vitesse et la position entraine de nombreuses erreurs
L'idée serait de corriger dynamiquement les erreurs (notamment le jitter de l'accéléro) en implémentant un algo (celui ci devant etre selon moi dans arduino en important la librairie Khalman et en codant )qui reconnait les invariants dans le signal qui sont du bruit et ceux qui sont du déplacement sur les filtres de kalman
J'ai déja vu certaines personnes utiliser le filtre kalman mais pour filtrer des mesures brutes (et piloter un servo de manière plus fluide sans vibration . Cette initiative etant similaire à celle de la moyenne glissante
toutes les personnes que j'ai vu utilisant la nunchuck . Utilise seulement les données brutes et ne passe pas des données d'accé à de sdonnés
de position et utilise un filtre kalman non pas pour corriger le 1er filtre qui a réalisé une integration mais pour rendre plus lisse le mvt du servo
comme la moyenne qui lisse .
Peut tu regarder sur ce site http://www.pobot.org/Wii-Nunchuck-Ar...vomoteurs.html
la partie Lisser les valeurs de l’accéléromètre
Car on peut voir que la personne passe des donnés brutes et aux donnés d'angles . J'ai peur qu'on fasse fausse route car les personnes qui integrent sont celles qui n'utilisent pas la nunchuck car il n'ont pas accé au librairies WIIchuck
Et dans ce cas pas besoin d'integrer et si j'utilise le filtre kalman c'est juste pour lisser comme avec une moyenne de lissage
LA PARTIE QU4ILS DONNENT FAIT PARTIE DE LA LIBRAIRIE WIICHUCK
est ce que si on met en place un algorithme permettant de lisser
la valeur de l’accéléromètre. Tout d’abord, on ne va pas utiliser
les valeurs brutes des 3 axes mais les convertir en angles "roll" et "pitch".
Est-ce que cela pourrais regler les problème d'integration ??
Nous devons voir quel genre de données
nous recevions de l'accéléromètre dans la Wii Nunchuck.
L'Arduino dispose d'une bibliothèque prête à l'emploi pour l'interfaçage
la librairie WiiChuck prend soin de calculer les données de tangage et de roulis
pour des valeurs
(roulis, tangage, accel x, accel y, accel z)
(57 , 77 , 385 , 45 , 243 )
Il faut savoir ue les données de roulli (roll) fonctionne de -90 à 90 degrés
et les donnés de tangage (pitch) fonctionne de 0 à 180 degrès
Servo servoRoll;
Servo servoPitch;
WiiChuck chuck = WiiChuck();
void setup() {
servoRoll.attach();
servoPitch.attach();
roll = max(roll, -90);
roll = min(roll, 90);
pitch = max(pitch, 0);
pitch = min(pitch, 180);
}
void loop() {
Serial.print(chuck.readRoll()) ;
Serial.print(", ");
Serial.print(chuck.readPitch() );
Serial.print(", ");
Serial.print((int)chuck.readAc celX());
Serial.print(", ");
Serial.print((int)chuck.readAc celY());
Serial.print(", ");
Serial.print((int)chuck.readAc celZ());
Serial.println();
}
}
.....
}
Tu te relis parfois ?Laisse tomber l'histoir du joystik et du code .
Il faut faire cela avant et selon moi on devra faire appelle au filtre khalman énoncé précédemment
Laisse tomber l'histoir du joystik et du code . Il faut faire cela avant et selon moi on devra faire appelle au filtre khalman énoncé précedement
Je n'utiliserai pas le terme "filtrer"...
Les 2 sont possibles...Mais integrer comment ?(d'après mon cours ,je sais juste que le filtre passe bas à a un comortement integrateur et cela ne m'avance pas vraiment. Comment puis-je integrer selon toi
directement sur le code arduino avec un algorithme ( de lignes de codes en plus ) ou filtrer électroniquement (soit faire un montage et rajouter des composants )
Qui t'as parlé d'intégrer la vitesse et la position ?Or ,le fait d'intégrer la vitesse et la position entraine de nombreuses erreurs
Bon bah alors demande à ces personnes de te montrer comment elles font...toutes les personnes que j'ai vu utilisant la nunchuck . Utilise seulement les données brutes et ne passe pas des données d'accé à de sdonnés
de position et utilise un filtre kalman non pas pour corriger le 1er filtre qui a réalisé une integration mais pour rendre plus lisse le mvt du servo
comme la moyenne qui lisse .
En gros, ton projet consiste à refaire ce que proposent ces gens ?Peut tu regarder sur ce site http://www.pobot.org/Wii-Nunchuck-Ar...vomoteurs.html
la partie Lisser les valeurs de l’accéléromètre
Car on peut voir que la personne passe des donnés brutes et aux donnés d'angles . J'ai peur qu'on fasse fausse route car les personnes qui integrent sont celles qui n'utilisent pas la nunchuck car il n'ont pas accé au librairies WIIchuck
Que me conseilles tu et comment le réaliser ?Comment puis-je integrer selon toi
directement sur le code arduino avec un algorithme ( de lignes de codes en plus ) ou filtrer électroniquement (soit faire un montage et rajouter des composants )
non je n'ai pas envie de faire fausse routeton projet consiste à refaire ce que proposent ces gens ?
Je reste à ta disposition pour la suite
bonjours ,
Je suis entrain de faire le code avec la librairie Kalman
Et il s'avère que j'ai reçu les régulateurs peut tu m'aider à les installer ??
(par contre , je n'arrive pas à savoir sur internet laquelle des résistances 101 et 10nJ100 est de 100nF??)
je m'occupe d'abord du branchement du 7805
voici les 2 datasheets mais je ne vois pas comment les utiliser notamment due au faite que je ne vois pas ou est l'entrée et la sortie
dans le breadboard
Ou sont
L’Input – pour la tension d’entrée est ce la broche à gauche du régulateur ??
L’Ouput – pour la tension de sortie à droite ??
e Ground – pour la masse ou au milieu ?? doit il être lié au - (la masse) de la breadboard ??
dois-je relier la broche du milieu du régulateur au borne -(masse) de la breadboard , et les 2 autres broches ??
http://datasheet.octopart.com/L7805C...et-7264666.pdf p4 fig3
https://www.sparkfun.com/datasheets/.../LD1117V33.pdf p3 fig 4
I(max)>I(totale de tout les composants )
I(total des composants)=I(4*servo)+I(lcd)= 4* intensité servo inconnue mA+15mA=15mA + intensité servos inconnue <1.5 A
soit il faut que l'intensité de chacune de mes servos soit égale ou inférieur à 370mA
Supposons que c'est le cas .
Sorts tes cours de traitement du signal !
C'est à dire ?non je n'ai pas envie de faire fausse route
amuse toi bienJe suis entrain de faire le code avec la librairie Kalman
Je t'ai demandé 15 fois de faire un SCHÉMA !!!Et il s'avère que j'ai reçu les régulateurs peut tu m'aider à les installer ??
J'aimerai que tu prennes conscience qu'il est difficile d'aider un gars qui ne prends pas la peine de lire les messages des intervenants, ne se relit pas lui même, et ne fait aucun effort sur orthographe/grammaire. Il est également difficile d'aider un mec qui ne fait pas la différence entre une résistance et un condensateur... Et ça ne te vient pas à l'idée que mettre une photo des composants serait un minimum pour qu'on puisse t'aider ?(par contre , je n'arrive pas à savoir sur internet laquelle des résistances 101 et 10nJ100 est de 100nF??)
Schéma....!Ou sont
L’Input – pour la tension d’entrée est ce la broche à gauche du régulateur ??
L’Ouput – pour la tension de sortie à droite ??
e Ground – pour la masse ou au milieu ?? doit il être lié au - (la masse) de la breadboard ??
dois-je relier la broche du milieu du régulateur au borne -(masse) de la breadboard , et les 2 autres broches ??
http://datasheet.octopart.com/L7805C...et-7264666.pdf p4 fig3
https://www.sparkfun.com/datasheets/.../LD1117V33.pdf p3 fig 4
bonjours
voici le schéma que j'ai fais
voila j'ai mis le régulateur comme suit mais je crois que je vais devoir déplacer la lcd qui est sur les ports + et - car je risque de la griller
et peux tu m'indiquer ou la mettre à la place avec aussi les servo pour les alimenter
sur la colonne du condensateur de debut ou de fin ??
voila, on ma dit la réponse .Sur la boite de mon kit starter .Il indique que j'ai des condensateurs de 100nF or ce n'est pas le cas car(par contre , je n'arrive pas à savoir sur internet laquelle des résistances 101 et 10nJ100 est de 100nF??)
101=100pF
10nJ100=10nF
comme j'ai aussi des condensateurs de F25V de 100µF on ma dit de les prendre à la place de ceux de 100nF=0.1µF
le rapport entre les 2 et de 1000 puis-je le faire sans courir le risque de tout griller ??
pain1.jpg
pain2.jpg
PS : pour le reste on verra après
C'est pas un schéma ! C'est une jolie vue d'une plaque perforée, qui ne sert à rien tant que l'on a pas de schéma. Pas de noms ni de valeurs de composants, visiblement un seul régulateur... Bref, sûrement tout faux.
Parenthèse, la résistance de ta vue du bas est surement mal câblée...