Suite a un changement d’un autoradio pour une laguna 2 pour un autoradio pioneer DEH-S41BT, la partie commande au volant n’est évidemment non compatible avec l’autoradio.
Mon but créer un adaptateur pour transformer la commande au volant d’origine en commande Pioneer
Pour ca, on va étudier le fonctionnement de la commande Renault et la commande Pioneer.
Puis créer un système permettant de faire communiquer les 2.
La comande au volant de Laguna 2
On va commencer par trouver comment celle-ci est reliée avec un multimètre,
Soit une matrice soit un protocole bizarre .
Bon c’est une matrice mais avec la molette qui est un sélecteur de position tout le temps activé ce qui complique la lecture de la matrice.
L’autoradio
Pour l’autoradio, un DEH-S41BT, il possède un port W/R qui après quelques recherches sur internet j’ai trouvé que se port est simplement passif il ne fait que mesurer la resistance entre les pins du port.
J’ai relié un potentiomètre avec un switch entre le bout du jack et la masse.
et je suis passé de 500ohm a 500ohm pour trouver les fonctions sur l’autoradio.
et j’ai trouvé ceci:
Valeur en kOhm
TIP
Source
1—2
Mute
2,5—4,5
Disp
5—6,5
Suivant
7—9
Precedent
9,5—13,5
Vol+
14—18
Vol-
19—29.
Band
36—82
RING
Raccroche
1.5—2.5
Répondre
3—7.
Le materiel
J’ai décidé d’utiliser un Atmega328p la matrice est reliée sur les bornes A0 jusque A5. Pour pouvoir utiliser un port de la puce pour l’optimisation.
Dans le cas de la partie de l’autoradio, j’ai relié les résistances et une diode sur les bornes de D0 a D7. pour pouvoir utiliser un port complet.
Le tout monté sur une perfboard et le tout le plus compact pour pouvoir tout rentrer dans un boîtier imprimé en 3D
Pour le matériel il m’a fallu:
– un atmega328p
– un quartz de 16MHz
– 2 condensatuer de 20pf
– 7 resistances de 10kohm
– 1 resistance de 2,2k ohm
– 1 resistance de 6,8k ohm
– 1 resistance de 3,9k ohm
– 1 resistance de 8,2k ohm
– 1 resistance de 15k ohm
– 1 resistance de 22k ohm
– 1 diode.
– 1 régulateur 5v
– 1 cable jack.
– 1 cable pour se relier sur la commande au volant (j’ai le moyen d’en avoir mais coupez celui existant si vous voulez pas vous embêter )
J’ai j’ajouté un régulateur 5v et ensuite coupé la carte au plus prêt de la puce et des composant. Le tout pour avoir un cylindre de 18mm par 60mm
Le code
e vais deja commencer par expliquer un peu les port et pourquoi je les utilise.
il faut savoir que lorsque vous écrivez du code dans l’IDE Arduino il est convertit en code AVR qui ensuite est compilé pour la puce.
Dans le cas des écritures des états des pin ou de leur fonction le code est très peu optimisé
par exemple si vous voulez définir toutes les broches analogiques en entrée vous faites comme ceci:
pinMode(0,INPUT);
pinMode(1,OUTPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
Ce qui met toutes les broches les une après les autres en entrée sauf D1 en sortie.
mais il y a plus optimisé, ceci:
DDRC = B00000010;
Tout ce fait EN MEME TEMPS
Idem pour l’écriture des états des pin haut ou bas au lieu que celles ci s’actives les unes après les autre elle le font toutes en meme temps
Faire comme ceci m’a permis de rendre le programme 5x plus rapide et d’économiser 30% de place(bien que pas nécessaire).
Donc voici le code complet:
//Commande au volant // AVR ATMEGA328p //Diolum 04/19 int Molette = 0; //position de base de la molette a 0 int DejMol1=1; //variables de position molette pour connaitre le sens int DejMol2=1; int DejMol3=1; void setup() { Molette_pos(); //lecture de la position initiale de la molette DDRD = B00000000; //reset des pins de la matrice } void loop() { int BTPRE[5]={1,1,1,1,1}; //variable des bouton pressés res(); //reset des pins de la matrice //lecture des boutons G et D DDRC = B00000010; PORTC = B00000010; if(digitalRead(A0)==1){BTPRE[0]=0;}//G if(digitalRead(A3)==1){BTPRE[1]=0;}//D res(); //reset des pins de la matrice DDRC = B00000100; PORTC = B00000100; //lecture des boutons zarb vol+ et - if(digitalRead(A3)==1){BTPRE[2]=0;}//Zarb if(digitalRead(A0)==1){BTPRE[3]=0;}//VOL- if(digitalRead(A5)==1){BTPRE[4]=0;}//VOL+ res();//reset des pins de la matrice Molette_pos(); //lecture de la position de la molette //execution des états de la molette if (Molette == 1){ if(DejMol1==1){ if(DejMol2==0){PRE();}//haut if(DejMol3==0){SUI();}//bas DejMol1=0;DejMol2=1;DejMol3=1;} } if (Molette == 2){ if(DejMol2==1){ if(DejMol3==0){PRE();}//haut if(DejMol1==0){SUI();}//bas DejMol2=0;DejMol1=1;DejMol3=1;} } if (Molette == 3){ if(DejMol3==1){ if(DejMol1==0){PRE();}//haut if(DejMol2==0){SUI();}//bas DejMol3=0;DejMol1=1;DejMol2=1;} } //execution des états des boutons if(BTPRE[2]==0){ //ZARB = SOURCE = D0 DDRD = B00000001; PORTD &= B11111110; delay(300); } if(BTPRE[0]==0){ //G = REP = D0 + D7 DDRD = B01000001; PORTD &= B10111110; delay(300); } if(BTPRE[4]==0 && BTPRE[3]==1){ //VOL+ = D3 DDRD = B00001000; PORTD &= B11110111; delay(300); } if(BTPRE[3]==0 && BTPRE[4]==1){ //VOL- = D4 DDRD = B00010000; PORTD &= B11101111; delay(300); } if(BTPRE[3]==0 && BTPRE[4]==0){ //VOL-+VOL+=Mute = D6 DDRD = B00100000; PORTD &= B11011111; delay(300); DDRD = B00000000; } if(BTPRE[1]==0){ //D = RAC = D6 + D7 DDRD = B01100000; PORTD &= B10011111; delay(300); } DDRD = B00000000; } //fonction molette vers le haut void PRE(){ DDRD = B00000010; PORTD &= B11111101; delay(300); DDRD = B00000000; } //fonction molette vers le bas void SUI(){ DDRD = B00000100; PORTD &= B11111011; delay(300); DDRD = B00000000; } //fonction lecture pos. molettes void Molette_pos() { res(); DDRC = B00000001; PORTC =B00000001; if(digitalRead(A4)==1){ res(); DDRC = B00000100; PORTC = B00000100; if(digitalRead(A5)==1){} else{Molette=1;} } res(); DDRC = B00010000; PORTC =B00010000; if(digitalRead(A3)==1){ if(digitalRead(A0)==1){} else{Molette=2;} } res(); DDRC = B00010000; PORTC =B00010000; if(digitalRead(A5)==1){ if((PINC & B00100001)==(B100001) == 1){} else{Molette=3;} } } void res(){PORTC = B00000000;}//fonction reset
Le Boitier
Il est a imprimer 2x puis a serrer avec des vis de 3mm
Le Montage
L’adaptateur avant montage des mousses et des rubans protecteurs:
L’adaptateur apres montage des mousses et des rubans protecteurs on peu y voir le port de programmation que j’ai laissé au cas ou:
Donc pour ca j’ai retiré le faisceau entre la voiture et l’autoradio et j’ai soudé la masse sur la masse et le 12v sur le +APC.
Et ensuite j’ai tout monté dans la voiture.