Club944.net
Les salons de discussion du Club944.net => Le salon de l'auto => Discussion démarrée par: supertotof78 le 30 Mai 2013, 20:53:57
-
Bon, je suis en train de me préparer un afficheur au tdb sur ma Legacy.
Côté matériel, le gros est débroussaillé, je prépare une intégration dans le compte tours
(http://www.kirikoo.net/images/7supertotof78-20130510-191330.jpg)
Coté programme, pour l'ensemble ça devrait le faire.
Là où je coince c'est sur la communication série entre Arduino et ECU. Pour les branchements tout ça, c'est bon. J'ai des liens avec le protocole à utiliser et les adresses, mais je bloque sur la syntaxe à utiliser (pas pro du tout, loin de là, en terme de programmation). L'ecu me renvoie un symbole qui doit être, je pense, un message d'erreur.
Voilà le prog d'essai avec l'adresse compte tour (78...).
#include <LiquidCrystal.h>
// initialisation lcd sur arduino
LiquidCrystal lcd(2, 3, 4, 5, 6, 7, 8);
char incomingByte = 0;// Pour stocker les données entrantes
String chaine=0;
int i=0;
byte adresse[4]={0x78, 0x10, 0x6F, 0x00};
byte Stop[4]={0x12, 0x00, 0x00, 0x00};
void setup() {
// initialize serial:
Serial.begin(1953);
lcd.begin(16, 2);
lcd.print("regime moteur");
}
void loop() {
chaine=0;
Serial.flush();
delay(200);
Serial.write(adresse, 4);
while (Serial.available()>0) {
// On lit le byte:
incomingByte = Serial.read();
chaine+=String(incomingByte);
i++;
if(i==8) {Serial.write(Stop, 4); }
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("regime moteur");
lcd.setCursor(0,1);
lcd.print(chaine);
i=0;
delay(1000);
}
Ci-dessous, protocole et adresses:
http://www.alcyone.org.uk/ssm/protocol.html (http://www.alcyone.org.uk/ssm/protocol.html)
http://www.alcyone.org.uk/ssm/ecureverse.html (http://www.alcyone.org.uk/ssm/ecureverse.html)
Si quelqu'un a une idée ou bien peut me dire la grosse connerie que j'ai faite, ça m'arrangerai (je tourne en rond là)... :mrgreen:
-
c'est le prog d'essai qui marche pas ? si oui, faudrait plutôt voir avec le vendeur, parce que je suppose que le code qu'ils proposent eux mêmes doit fonctionner ;)
ya rien de bien compliqué dans ce code (il affiche "régime moteur" puis ce qui est récupéré par le port série), après si ça marche pas faut voir ce qui la doc :roll:
-
Le code, c'est le mien...
J'essaie juste d'appliquer les infos en lien. Mais je ne dois pas utiliser correctement les fonctions Arduino.
Il n'y a pas vraiment de doc Arduino. C'est Open source avec un forum officiel, entre autres.
Là, j'ai le protocole, les adresses. Il n'y a plus qu'à mettre dans la boucle de mon programme normalement. Mais le miracle n'a pas lieu.
-
Petit aperçu de ce que ça peut donner.
Avant projet (pas très visible...) :
[flash(425,350)]http://www.youtube.com/v/aU1ZICy7dAs[/flash]
Option possible, faire varier le rétroéclairage (soit par capteur, soit en détectant l'allumage des feus...):
Varier le rétro éclairage d'un lcd (http://www.youtube.com/watch?v=HNEVCjTegmU#)
En cours d'intégration:
(http://www.kirikoo.net/images/7supertotof78-1-20130608-115845.jpg)
(http://www.kirikoo.net/images/7supertotof78-2-20130608-115845.jpg)
Simulation alerte compte tours:
[flash(425,350)]http://www.youtube.com/v/d4PQoUagJrg[/flash]
La led sera dans le "8". Elle clignote dès 6500 tours et s'allume en continu dès 7500 tours (paramétrable évidemment)
-
chouette boulot :enaccord6:
-
Merci.
Le problème, c'est que c'est inachevé. Je bloque complètement sur la com avec l'ECU... :evil:
-
Merci.
Le problème, c'est que c'est inachevé. Je bloque complètement sur la com avec l'ECU... :evil:
j'ai parcouru 15 seconde la doc et ton programme.
Dans la doc, le protocole dit que ça envoi 8 bits de données et 1 bit stop.
Et ton programme lit 8 bytes (octets) et envoie 1 byte stop.
C'est pas la le problème ?
Maintenant, comme indiqué, je ne lu que tout ça pendant 15 secondes (donc pas une lecture attentive).
-
Bonjour,
d'abord ne pas confondre bit (bit) et byte (octet) : 8 bits
L'adresse de ton régime moteur est pas en 78 mais en 106F : http://www.alcyone.org.uk/ssm/ecureverse.html (http://www.alcyone.org.uk/ssm/ecureverse.html)
-
C'est le site que j'ai consulté.
Mais je me débat avec la syntaxe à utiliser. Ça à l'air simple en les lisant, mais concrètement, c'est un désastre.
En fait , 78 n'est pas l'adresse RPM, mais le 1er buté du message qui indique à l'ECU qu'on veut lire à une adresse.
http://www.alcyone.org.uk/ssm/protocol.html (http://www.alcyone.org.uk/ssm/protocol.html)
On retrouve le 106f juste après, puis le 00 pour clôturer la commande:
byte adresse[4]={0x78, 0x10, 0x6F, 0x00};
-
oui mais encore une fois ta boucle for lit 8 octets alors qu'elle ne devrait en lire qu'un seul (8 bits = 1 octet = 1 byte)
-
Bah là je peux vraiment pas t'aider, j'y connais rien (ou presque!)
Par contre, je connaissais pas ce genre de matériel, c'est un ordinateur additionnel adaptable à toute voiture???
Par contre ici il y a un super pro de l'informatique: RTDemons, demande lui il saura sans doute t'aider. :merci:
-
Ca avance bien!
Vérifie aussi dans ta lecture de trames, que les octets sont lus dans le même sens (petit-boutiens et grand-boutiens). Ca m'a valu quelques cheveux blancs il y a une paire d'années...
-
FX : mais si la fonction Serial.read() renvoie un byte, pas vraiment le choix. Pour avoir les 8 bits associés à incomingByte, ils faut utiliser les opérateurs binaires ( &, << ... )
et dans ce cas le i==8 n'a sans doute rien à faire là (c'est 8 bytes et non 8 bits)
-
J'ai trouvé aussi ça :
A la ligne 19, j'utilise la fonction write() qui envoie le caractère en tant que variable de type byte, signifiant que l'on renvoie l'information sous la forme d'un seul octet. Sinon Arduino enverrait le caractère en tant que 'int', ce qui donnerait des problèmes lors de l'affichage.
Sur ce site : http://www.siteduzero.com/sciences/tutoriels/arduino-pour-bien-commencer-en-electronique-et-en-programmation/exercice-attention-a-la-casse (http://www.siteduzero.com/sciences/tutoriels/arduino-pour-bien-commencer-en-electronique-et-en-programmation/exercice-attention-a-la-casse)
-
c'est le cas, il envoie ses tableaux de 4 octets, jusque là c'est cohérent
par contre en retour faut savoir si il récupère 8 bits (1 octet) ou 8 octets. J'ai pas le protocole sous les yeux
-
FX : mais si la fonction Serial.read() renvoie un byte, pas vraiment le choix. Pour avoir les 8 bits associés à incomingByte, ils faut utiliser les opérateurs binaires ( &, << ... )
et dans ce cas le i==8 n'a sans doute rien à faire là (c'est 8 bytes et non 8 bits)
tout à fait. de toute façon les fonctions I/O ne travaille que sur des bytes, mais il ne faut pas lire 8 bytes mais bien 1 seul byte et ensuite analyser le retour avec des décalages binaires successifs ou des masques.
Enfin bon, je m'avance un peu car je n'ai pas lu dans le détail la spec.
-
Ok, merci pour ces infos. ;)
Je ferai un test en ne paramétrage plus 8 mais 1 en réception.
-
Lcd dans compte tours Legacy turbo (http://www.youtube.com/watch?v=hSPIFUlk04w#)
-
ça progresse :)
-
On pourrait mettre ça sur nos pmas?
-
Tout est possible.
Le point bloquant, dans la 944, c'est la place derrière les fonds de compteurs. A voir. Après, il faut voir s'il est possible de repiquer des infos du DME et/ou de rajouter des sondes sur le bloc.
Cela dit, pour ceux qui ont l'horloge fichue, il y a moyen de s'en refaire une personnalisée pour un coût dérisoire (avec d'autres fonctionnalités).
-
Cela dit, pour ceux qui ont l'horloge fichue, il y a moyen de s'en refaire une personnalisée pour un coût dérisoire (avec d'autres fonctionnalités).
Bonne idée. ;)
-
20€ l'Arduino, moins de 10€ le lcd, quelques fils et de la patience...
Comparés aux 200€ que doit coûter l'horloge...
-
:mrgreen:
-
genre mon horloge quoi :lol:
ah ouais 200 balles ils sont ouf..... :enaccord3:
-
Je ne connais pas le prix exact, mais ça doit être un truc du genre.
-
ça m'étonne pas.....quand on voit le reste....les seules trucs cheap ce sont les vis et clips.....
-
Tu es de Port Marly dans le 78?
-
Re !
Sur ma WRX aujourd'hui je viens d'utiliser un scangauge c'est très bien, http://www.scangauge.fr/ (http://www.scangauge.fr/) ça marche même sur mon jumper !
Puissant, il m'a donné le code défaut j'ai réparé et effacé le défaut.
On me l'a preté mais je me tate à en acheter un !
-
Salut,
J'ai intégré le bouton dans la console centrale (mode "c'est d'origine" ON), remonté le bloc instruments, réussi à récupérer le signal compte tours (pour le shift light).
J'ai monté les sondes et tiré les câbles dans l'habitacle. Ils ne sont pas encore connectés ce qui expliques les valeurs incohérentes pour la T huile et la P huile.
http://m.youtube.com/watch?v=NeerLEYiEKQ&feature=em-upload_owner&desktop_uri=%2Fwatch%3Fv%3DNeerLEYiEKQ%26feature%3Dem-upload_owner (http://m.youtube.com/watch?v=NeerLEYiEKQ&feature=em-upload_owner&desktop_uri=%2Fwatch%3Fv%3DNeerLEYiEKQ%26feature%3Dem-upload_owner)
-
Cool 8)
-
J'ai monté les sondes et tiré les câbles dans l'habitacle. Ils ne sont pas encore connectés ce qui expliques les valeurs incohérentes pour la T huile et la P huile.
ca m'interresse j'suis en train de travailler là dessus (forcement me suis renseigné sur l'arduino :) )
-
Si tu veux des infos, n'hésite pas. je peux te mettre le lien sur le forum où je sévis avec tout l'historique du bidule.
Je tiens aussi le prog à dispo si quelqu'un est tenté (à adapter en fonction des envies/idées/véhicule). ;)
Bon, ce n'est pas du niveau de Kraftwerk, mais je suis quand même content de moi.
Dernière étape, la com' ECU. Mais déjà, je vais pouvoir aller cramer les pneus de la Leg sereinement à Lurcy en novembre! :)
-
balance l'url
merci
je pars de 0...
-
j'ai trouvé ca sur le net nelson, si ca te donne des idées :enaccord6:
http://cstark27.blogspot.fr/ (http://cstark27.blogspot.fr/)
et enfin ca !!
Display arduino output on tv for less than $1 (http://www.youtube.com/watch?v=WlBXiZpuncg#)
8)
sur quel fofo tu sévit supertotof78 ?
-
Sur le GTTF. ;)
Mais je crois me rappeler qu'il faut être inscrit pour avoir accès.
Le sujet en question. C'est un peu éparpillé, mais il y a déjà pas mal d'infos. De toutes façons, je vais faire le point sur tout ça et faire une synthèse sous excel. Je mettrai ça ici aussi.
http://www.gtturbofan.com/t2185p30-logging-savoir-ce-qui-se-passe-au-niveau-de-la-gestion (http://www.gtturbofan.com/t2185p30-logging-savoir-ce-qui-se-passe-au-niveau-de-la-gestion)
-
Je trouve ce post super intéressant !
-
D'ailleurs je vient juste d'acheter une Mega 2560.
J'ai plein d'idée pour du monitoring, reste le temps et les compétences...
-
le lien sur le forum sub n'est pas accessible aux jeune inscrits sur le forum...
au passage je cherche un truc mais je ne sais pas comment ca s'appelle
j'ai un afficheur LCD sans connectique, juste les pistes du circuit
je cherche des "picots" a souder sur les pistes pour pouvoir enfoncer le LCD sur une planche d'essai
Comment ca s'appelle ces picots que je puisse m'en acheter ?
merci
-
fais voir a quoi ca ressemble. ;)
-
là on voit l'afficheur sur la planche d'essai
http://arduino.cc/en/uploads/Tutorial/lcd_photo.png (http://arduino.cc/en/uploads/Tutorial/lcd_photo.png)
-
Pin ou broche en français. On trouve des écrans lcd déjà équipés pour pas trop cher, ce qui évite de galèrera si on n'a pas de poste assez précis.
Un exemple ici (mais se trouve partout: Conrad, eBay...)
http://mchobby.be/PrestaShop/search.php?orderby=position&orderway=desc&search_query=Pin&submit_search=Rechercher (http://mchobby.be/PrestaShop/search.php?orderby=position&orderway=desc&search_query=Pin&submit_search=Rechercher)
-
Pin ou broche en français. On trouve des écrans lcd déjà équipés pour pas trop cher, ce qui évite de galèrera si on n'a pas de poste assez précis.
c'est juste que j'ai pas envie de me faire C.... a souder des cables sur mon LCD et que donc je dois commander soit des pin/broches soit un LCD equipé :)
merci
-
Si tu as la place, prend un lcd avec les pins déjà soudés, c'est plus simple. Il n'y à plus qu'à en ficher les fils dessus.
Perso, il me fallait une platine la plus étroite possible. J'ai donc du souder mes fils un à un sans faire de faux contact (mon lcd n'a pas le pas standard entre les pins pour gain de place).
Ensuite, pour les branchements, seules 4 des 8 pins dédiées aux datas sont nécessaires. Ça fait toujours moins de fils à brancher et plus de sorties dispo sur l'Arduino.
Après, il y a encore plus simple en passant par le serial, mais ce n'est plus la même bibliothèque et donc moins facil quand on débute: utiliser la fonction serial del'arduino, seuls 2 fils nécessaires.
Je ne l'ai pas fait, car j'ai besoin de la fonction serial pour la 2ème partie de mon projet.
-
là c'est clairement pour les essais
Pour l'application que je vise, j'aimerai trouver autre chose que l'afficheur 2x16 que j'ai eu dans mon kit arduino
mais faut pas aller trop vite :)
-
alors ce truc serait parfait !
http://mchobby.be/PrestaShop/product.php?id_product=307 (http://mchobby.be/PrestaShop/product.php?id_product=307)
-
avant d'utiliser un oled, je vais tacher de faire hello world sur mon 2x16 :)
-
OK :mrgreen:
c'est un bon début :merci:
-
Le "Hello world", on y arrive tes vite.
Oui, pourquoi pas un oled ou autre en lieu et place de l'instrumentation d'origine, avec aiguilles virtuelles, model able
à l'envie...
-
Le "Hello world", on y arrive tes vite.
Ca serait triste que j'arrive pas à ça
-
Si ça intéresse quelqu'un ou bien donne des idées:
// Sonde pression1301 fonctionnelle
// sonde température Zeitronix fonctionnelle, sonde grove fonctionnelle
// Intro Subaru
// variation affichage avec bouton
// RPM par prise signal sur alim compt tours
// Thuile ok à 75°
// Thuile chaude à 120° et trop chaude à 140°
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,8,9,10,11,12);
byte subaru1[8] = {
B00100,
B00100,
B01110,
B11111,
B01110,
B00100,
B00100,
B00000
};
byte subaru2[8] = {
B00000,
B00000,
B00000,
B00000,
B00000,
B00010,
B00111,
B00010
};
byte subaru3[8] = {
B00000,
B00000,
B00000,
B00010,
B00111,
B00010,
B00000,
B00000
};
byte subaru4[8] = {
B01000,
B11100,
B01000,
B00010,
B00111,
B00010,
B00000,
B00000
};
byte subaru5[8] = {
B01000,
B11100,
B01000,
B00000,
B00000,
B00000,
B00000,
B00000
};
byte subaru6[8] = {
B10000,
B01000,
B00100,
B00010,
B00010,
B00001,
B00001,
B00001
};
byte subaru7[8] = {
B00001,
B00001,
B00001,
B00010,
B00010,
B00100,
B01000,
B10000
};
int ledRougePin = 4;
int ledVertPin = 5;
int ledBleuPin = 6;
float Thuile=0;
float Phuile=0;
float volthuile=0;
float varThuile=1;
int c=0;
int x=0;
int y=0;
int z=0;
float psi=0;
float voltPhuile=0;
float tempin; //calcul température habitacle
int B=3975; //calcul température habitacle
float resistance; //calcul température habitacle
float Thuilemax=-50;
float Phuilemax=0;
float Phuilemin=10;
int bouton=0;
#define valeurMax 6
const char* TempIn="T. In";
const char* TempEx="T. Ex";
const char* Batt="Batt.";
const char* Rpm="RPM";
char Unite='0';
const char* Intitule=0;
float t=0;
int RPM=0;
float RPMfloat=0;
int ledRPMPin = 2;
const int numReadingsR = 1500 ; // Nombre de relevés pour la moyenne rpm
int readingsR ; // Variable lecture pour le relevé tension
int indexR = 0 ; // position dans la création de la moyenne
float totalR = 0 ; // Total en cours
float averageR = 0 ; // La moyenne
void setup(){
pinMode(3, OUTPUT); // 5V pour rétroéclairage (option variation d'intensité)
digitalWrite(3, HIGH);
lcd.begin(16, 2); // paramètre lcd
pinMode(13,INPUT); // bouton sur pin 13
digitalWrite(13, HIGH); // alimentation pin 13
pinMode( ledRougePin, OUTPUT );
pinMode( ledVertPin, OUTPUT );
pinMode( ledBleuPin, OUTPUT );
pinMode( ledRPMPin, OUTPUT );
digitalWrite( ledRougePin, HIGH );
digitalWrite( ledVertPin, HIGH );
digitalWrite( ledBleuPin, HIGH );
lcd.clear();
lcd.createChar(1, subaru1);
lcd.createChar(2, subaru2);
lcd.createChar(3, subaru3);
lcd.createChar(4, subaru4);
lcd.createChar(5, subaru5);
lcd.createChar(6, subaru6);
lcd.createChar(7, subaru7);
lcd.setCursor(0,0);
lcd.print((char)1); lcd.print((char)2);
lcd.setCursor(3,0); lcd.print((char)6);
lcd.setCursor(3,1); lcd.print((char)7);
lcd.setCursor(6,0); lcd.print("SUBARU");
lcd.setCursor(0,1); lcd.print((char)3);lcd.print((char)4); lcd.print((char)5);
delay(3000); // Ecran vide 5 seconde
lcd.clear();
for (int positionCounter = 0; positionCounter < 12; positionCounter++) {
// Décalle le curseur de 12 colonnes vers la gauche
lcd.scrollDisplayLeft();
}
lcd.print("LEGACY TURBO");
for (int positionCounter = 0; positionCounter < 14; positionCounter++) {
// Décalle le texte vers la droite et le centre
lcd.scrollDisplayRight();
// wait a bit:
delay(150); }
// Réinitialisation de l'affichage et de la position du curseur
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" LEGACY TURBO");
delay(1000);
lcd.setCursor(16,1);
lcd.print("Bienvenue a bord");
for (int positionCounter = 0; positionCounter < 16; positionCounter++) {
// scroll one position right:
lcd.scrollDisplayLeft();
// wait a bit:
delay(150); }
lcd.clear();
lcd.setCursor(2,0);
lcd.print("LEGACY TURBO");
lcd.setCursor(0,1);
lcd.print("Bienvenue a bord");
delay(2000);
lcd.clear();
}
void loop(){
// Interprétation sonde temperature grove
resistance=(float)(1023-analogRead(A4))*10000/analogRead(A4);
tempin=1/(log(resistance/10000)/B+1/298.15)-273.15;
volthuile=analogRead(A1)*5.0/1024.0;
varThuile=0.5608*volthuile+1.4498;
if(varThuile<2.02){Thuile=((440.12*pow(volthuile,4)-1493.9*pow(volthuile,3)+1881.8*pow(volthuile,2)-1083.8*volthuile+335.06))/varThuile;}
if(varThuile>2.02){Thuile=((0.1541*pow(volthuile,4)-2.6435*pow(volthuile,3)+17.306*pow(volthuile,2)-60.03*volthuile+124.59))/varThuile;}
voltPhuile=analogRead(A0)*5.0/1024.0;
psi=(37.5*(voltPhuile))-18.75;
Phuile=psi/14.51; // conversion en bar
if (Phuile<0) {Phuile==0;}
if(Thuile<75) {Thuilefroide();}
if(Thuile>75 and Thuile<110) {Thuileok();}
if(Thuile>115 and Thuile<130) {Thuilechaude();}
if(Thuile>130) {Thuiletropchaud();}
if (Thuile>Thuilemax) {Thuilemax=Thuile;}
if (Phuile>Phuilemax) {Phuilemax=Phuile;}
if (Phuile<Phuilemin) {Phuilemin=Phuile;}
// Convertir le signal du compte tours (moyenné pour lisser l'affichage)
while(indexR< numReadingsR) {
readingsR = analogRead (5) ;
totalR = totalR + readingsR ;
indexR = indexR + 1 ; }
indexR = 0 ;
averageR = totalR / numReadingsR ;
RPMfloat=averageR*10.3;
RPMfloat=RPMfloat/10;
RPM=RPMfloat;
RPM=RPM*10;
totalR=0;
if(RPM<=6000) {delay(200);}
if(RPM>6800) {delay(300);}
if(RPM>6000 and RPM<6800) { for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=50) {
analogWrite(ledRPMPin, fadeValue);
delay(10);
}
for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=50) {
// sets the value (range from 0 to 255):
analogWrite(ledRPMPin, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(10);
} }
if(RPM>6800) {digitalWrite(2, HIGH); }
if (digitalRead(13)==HIGH) // incrément x par appui bouton
{ lcd.clear();
if (bouton<valeurMax){ bouton++;} else {bouton=0;}
delay(200);
while((digitalRead(13)==HIGH));
}
switch (bouton) { // en fonction de la valeur de x, on modifie l'affichage
case 0: Intitule=Batt; t=0; Unite='V'; break;
case 1: Intitule=TempIn; t=tempin; Unite=(char)223; break;
case 2: Intitule=TempEx; t=0; Unite=(char)223; break;
case 3: Intitule=Rpm; t=RPM; Unite=' '; break;
case 4: lcd.setCursor(0,0); lcd.print("T huile maxi:");
lcd.setCursor(0,1); lcd.print(Thuilemax);
lcd.print((char)223); lcd.print("C"); break;
case 5: lcd.setCursor(0,0); lcd.print("P huile maxi:");
lcd.setCursor(0,1); lcd.print(Phuilemax);
lcd.print("b"); break;
case 6: lcd.setCursor(0,0); lcd.print("P huile mini.");
lcd.setCursor(0,1); lcd.print(Phuilemin);
lcd.print("b"); break;}
// Affichage sur lcd
if (bouton<4) {
lcd.clear();
lcd.setCursor(0,0); lcd.print("OilT");
lcd.setCursor(6,0); lcd.print("OilP");
lcd.setCursor(11,0); lcd.print(Intitule);
lcd.setCursor(0,1);
if(Thuile<100) {lcd.print(Thuile, 1);} else {lcd.print(Thuile, 0);}
lcd.print((char)223);
lcd.setCursor(6,1); lcd.print(Phuile, 1); lcd.print("b");
lcd.setCursor(11,1);
if(Intitule==Batt || Intitule==TempEx) {lcd.print(" No");}
if(Intitule==TempIn){lcd.print(t, 1);}
if(Intitule==Rpm){lcd.print(t, 0);}
if(Intitule==TempIn || Intitule==Rpm){lcd.print(Unite);}
}
delay(50);
}
void Thuilefroide(){
int iBleu = Thuile*3.1875; iBleu>0;
int iVert = 255 - iBleu;
analogWrite( ledBleuPin, iBleu );
analogWrite( ledVertPin, iVert );
}
void Thuileok(){
digitalWrite( ledRougePin, HIGH );
digitalWrite( ledVertPin, HIGH );
digitalWrite( ledBleuPin, HIGH );
if (y==0) {
x=0;
y++;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" GO ");
for (x==0; x<6; x++) {
lcd.setCursor(0,1);
lcd.print(" ! ! ! ! ! ! ");
delay(250);
lcd.clear(); lcd.setCursor(0,0); lcd.print(" GO ");
delay(250); lcd.setCursor(0,1); lcd.print(" ! ! ! ! ! ! "); }
}}
void Thuilechaude(){
int iVert = Thuile*6-593; iVert>127;
analogWrite( ledRougePin, 0 );
analogWrite( ledVertPin, iVert );
}
void Thuiletropchaud(){
digitalWrite( ledRougePin, LOW );
digitalWrite( ledVertPin, HIGH );
digitalWrite( ledBleuPin, HIGH );
if (z==0) {
x=0;
z++;
lcd.print("ARRET IMPERATIF");
for (x==0; x<6; x++) {
lcd.setCursor(0,1);
lcd.print(" ! ! ! ! ! ! ");
delay(250);
lcd.clear(); lcd.setCursor(0,0); lcd.print("ARRET IMPERATIF");
delay(250); lcd.setCursor(0,1); lcd.print(" ! ! ! ! ! ! ");}
}}
-
Si ça intéresse quelqu'un ou bien donne des idées:
carrement !
merci, j'vais tacher de decrypter tout ça
ps : j'ai commandé les pin header lundi, ils sont arrivés aujourd'hui, Nickel !
-
Ca a l'air amusant votre truc... :mrgreen:
Ma 944 n'a pas d'ODB digne de ce nom pour que cela soit exploitable, et en plus j'ai pas du faire une ligne de C depuis 15 ans :mrgreen:
Amusez vous bien ;)
-
Je te rassure, je ne suis ni informaticien, ni électronicien.
Un peu d'esprit scientifique, de logique. Bien lire les datasheets des éléments utilisés et go!
Ca peut très bien aller sur une 944: Pour le moment, je ne communique pas du tout avec l'ecu de ma Legacy. Tout fonctionne à partir de sondes que j'ai ajoutées (non présentes d'origine) et de signaux électriques repiqués et interprétés (régime moteur).
Après, le plus compliqué a été d'intégrer un écran sans dénaturer l'habitacle... Dans la 944, je ne me rappelle plus comment est fichu le bloc instruments. Dans la Legacy, j'avais juste assez de place: J'ai un peu élagué à la dremel et cherché sur le net pour un lcd le moins encombrant possible.
-
Oui, il faut mettre des sondes, ca peut le faire. Dans ce cas, l'afficheur peut être intégré dans un cache et mis sous l'autoradio (Phase 2) à la place du vide poche, pour préserver le reste.
-
en meme temps a part la temperature d'huile il y a quasi tout dans une 944...
-
Net, y manque pas grand chose ;)
c'est histoire de faire joujou avec la chose.
-
Se faire un shift light, une alarme pour la température d'huile (trop basse pour attaquer, trop haute = arrête-toi), une alerte si la température extérieure descend sous 0, un indicateur de rapport de boite... Enfin, il y a plein de trucs à imaginer!
-
et ca permet surtout de virer l'horloge de bord :mdr8:
-
... ou de la reproduire virtuellement, en plus du reste ;)
-
Voilà! La liste est longue...
On peut communiquer en wifi avec Arduino, il existe des modules au peuvent faire office de radar de recule. On peut se faire un Gmetre...
-
attention a ne pas mettre n'importe quoi dans vos caisses les gars...
surtout qd on touche pas à l'électronique de manière pro ;)
-
On peut s'en servi en monitoring mais aussi en recherche de panne .
On peut afficher les données du débitmètre, lambda, t° eau, TPS, etc..
c'est déjà pas mal non ?
Moi j'ai pas encore reçu le mien snif...
recu hier !
petits liens que j'ai trouvé:
http://fr.openclassrooms.com/sciences/cours/arduino-pour-bien-commencer-en-electronique-et-en-programmation (http://fr.openclassrooms.com/sciences/cours/arduino-pour-bien-commencer-en-electronique-et-en-programmation)
http://www.pobot.org/Debuter-avec-une-carte-Arduino.html (http://www.pobot.org/Debuter-avec-une-carte-Arduino.html)
http://www.craslab.org/arduino/LivretArduinoFr06.pdf (http://www.craslab.org/arduino/LivretArduinoFr06.pdf)
Voili voila
-
trop d'info noie l'info :)
j'aimerai savoir s'il est possible de contrôler les pixels d'un afficheur LCD (du genre 16x2) sans avoir a déclarer un caractère ?
-
il me semble j'ai vu des librairy pour faire des jauges:
sur http://arduino.cc/playground/Code/LcdBarGraph (http://arduino.cc/playground/Code/LcdBarGraph)
et un tuto qui peut t'interesser:
http://tutoarduino.com/progressbar-arduino (http://tutoarduino.com/progressbar-arduino)
pixel par pixel j'ai pas creusé. sorry
-
j'ai trouvé ça:
http://learn.adafruit.com/character-lcds/character-vs-graphical-lcds (http://learn.adafruit.com/character-lcds/character-vs-graphical-lcds)
-
De mon coté voici mes maigres avancées:
il me reste les diviseurs de tension à construire et faire les essais.
PS: ne regardez pas les soudures même moi j'ai honte....
-
C'est vachement intéressant ce petit sujet, je suis avec attention... :merci:
-
Bon je me suis compliqué la vie pour rien car en fait les capteur sont tous en 5V !! :merci:
Après m'être flagellé avec des orties fraiches j'ai souder directement toutes les entrées qui m'intéressaient et....
- la tension du débitmètre fonctionne. Donc avec une formule tenue secrète par les druides, je pourrait sortie une tension corrigée d'un AFM à fil chaud par exemple...
- le signal du TPS est bon. l'écran m'indique si je suis au ralenti, croisière ou à fond.
- la temperature d'eau du moteur : il me reste à retrouver la correspondance entre voltage est température de notre capteur et voilà !
- la sonde lambda: bof. Je me suis pas trop attardé dessus pour l'instant.
J'attend un boitier pour faire un montage plus propre et je cherche un débitmètre à fil chaud pour faire mes mesures et en déduire une formule.
-
Dites, c'est hors-sujet, mais je vous vois bidouiller votre Arduino, là...le Rapsberry Pi, ça serait pas plus simple à gérer?
-
Si tu le dis....
comment tu rentres une valeur de tension ou de résistance dans le Rapsberry ?
Spécifications
Modèle A
Processeur : ARM1176JZF-S (ARMv6) 700MHz Broadcom 28351(dispose d'un décodeur Broadcam VideoCore IV, permettant le décodage H.264 FullHD 1080P et d'un VFPv2 pour le calcul des opérations à virgule) ;
RAM : 256 Mo ;
2 Sorties vidéo : Composite et HDMI ;
1 Sortie audio stéréo Jack 3 5 mm (sortie son 5.1 sur la prise HDMI) ;
Unité de lecture-écriture de carte mémoire : SDHC / MMC / SDIO ;
1 Port USB 2.0 ;
Prise pour alimentation Micro-USB (consommation : 400mA + périphériques) ;
des entrées / sorties supplémentaires devraient être accessibles directement sur la carte mère via des pins 3v3 (à confirmer : GPIO, S2C, SPI)[réf. nécessaire] ;
API logicielle vidéo : OpenGL : version embarquée OpenGL ES 2.0 ;
Décodage vidéo : 1080p30 H.264 high-profile.
-
c'est un micro PC.... rien a voir avec un module arduino ;)
-
Pour la température d'eau, tu relevés les valeurs de déclenchement et d'arrêt des ventilos. Ça fait déjà une base. Le soucis, c'est que les sondes resistive n'ont pas de signal linéaire.
-
Ou tu plonges la sonde dans une casserole d'eau froide que tu fais chauffer, avec un thermomètre de cuisson (pour la viande) à côté comme référence. Et tu relèves les valeurs de tension au fur et à mesure que l'eau chauffe.
-
j'ai procédé comme ça avec deux multimetres
par contre c'est difficile d'extrapolé en negatif et au dela de 100°
l'ideal est quand meme d'avoir la courbe du fournisseur
j'ai trouvé un fichier sur les VDO, mais je n'ai pas retrouvé mes sondes dedans, je n'ai depuis pas creusé davantage pour savoir s'il y a des correspondance de ref.
au passage j'ai mesuré deux sondes VDO, une pour l'huile moteur de ma 205 (sonde after market) et une d'origine d'une Audi
les deux courbes sont TRES differentes, elles ne peuvent pas etre montés sur le meme afficheur .... ou alors il y a une subtilité qui m'a échappé
-
Pour les sondes, je cite mon propre message de l'autre topic:
Ce qui marche vraiment bien, ce sont les sondes de température digitales 1-Wire, telles que la DS18B20 par exemple. L'avantage, c'est que tu peux installer plusieurs sondes sur le même bus qui n'utilise qu'un seul fil (d'où le nom 1-Wire, aussi appelé bus Dallas). Je les utilise dans un de mes projets. Ces sondes digitales sont aussi programmables (cf. datasheet [url]http://www.maximintegrated.com/datasheet/index.mvp/id/2812[/url] ([url]http://www.maximintegrated.com/datasheet/index.mvp/id/2812[/url])).
On les trouves packagées et prêtes à l'emploi pour quelques euros sur eBay.
[url]http://www.befr.ebay.be/itm/DS18B20-Dallas-1-Wire-Digital-Thermometer-Etanche-Waterproof-/161101360600[/url] ([url]http://www.befr.ebay.be/itm/DS18B20-Dallas-1-Wire-Digital-Thermometer-Etanche-Waterproof-/161101360600[/url])
Il existe plein d'exemples d'intégration avec Arduino sur Internet.
-
c'est l'enfer pour trouver un visuel de ces sondes :shock:
edit :
voila le pdf que j'avais trouvé http://www.ljf-design.com/westfield/vdo_temp_sensors.pdf (http://www.ljf-design.com/westfield/vdo_temp_sensors.pdf)
-
J'ai trouvé ça:
il me reste plus qu'a démarrer puis de faire plusieurs relevé au fur et à mesure qu'elle chauffe, Tension VS Resistance afin d'en déduire une fonction. ( logarithmique je pense).
-
J'ai trouvé ça:
il me reste plus qu'a démarrer puis de faire plusieurs relevé au fur et à mesure qu'elle chauffe, Tension VS Resistance afin d'en déduire une fonction. ( logarithmique je pense).
ca à l'air linéaire en fait !