Arduino for dummies

Avatar utente
brando
Serbelloni Mazzanti Viendalmare
Messaggi: 5780
Iscritto il: 09/01/2011, 20:28
Auto: Alfa 75:Turbo,2,0 T.S.,5,4 V12
ECU: Altra ECU
Località: Sperduta Maremma

Re: Arduino for dummies

Messaggioda brando » 13/07/2016, 7:45

Tony Evo ha scritto:@brando
il controller della 14.7 spartan.
per gli egt usero un Max6675.


E che cazz è?
Cioè tutta sta cosa e poi devi comperare un controller intero lo stesso???
[size=150]WWW.BRANDORACING.IT
WWW.FLUSSOMETRO.IT
[/size]

Avatar utente
Tony Evo
Messaggi: 6140
Iscritto il: 02/06/2011, 6:51
ECU: MS2 V3.0
Località: Vicino Roma

Re: Arduino for dummies

Messaggioda Tony Evo » 13/07/2016, 8:32

il controller ti da gia l'output 0-5v e lo mandi ad arduino.(pui anche utilizzare per esempio il controller di innovate senza schermo)
il max6675 l'ho preso a 5€ compreso di sonda ed EGT e lo collego sempre ad arduino.

ed il gioco è fatto.

ma ovviamente tutto sto casino era per quasi puro scopo didattico,conta che lo provero sulla mia punto a GPL,quindi pensa te.

Avatar utente
Tony Evo
Messaggi: 6140
Iscritto il: 02/06/2011, 6:51
ECU: MS2 V3.0
Località: Vicino Roma

Re: Arduino for dummies

Messaggioda Tony Evo » 07/08/2016, 13:41

Guzzi82 ha scritto:Io ho fatto lo stesso tuo lavoro. Identico.
Ti allego il codice che ho usato e che funziona.
Spero vivamente di avere salvato l'ultima versione....
Unica differenza, io avevo usato un arduino micro (non ho letto cosa usi tu ma immagino uno r3) che è piccolissimo, grosso la metà del display.
Provalo.

è arrivata l'EGT,ho testato il codice base che si trova online e funziona

il collegamento è questo
Immagine

il codice questo:

Codice: Seleziona tutto

// Sample Arduino MAX6675 Arduino Sketch

#include "max6675.h"

int ktcSO = 8;
int ktcCS = 9;
int ktcCLK = 10;

MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

 
void setup() {
  Serial.begin(9600);
  // give the MAX a little time to settle
  delay(500);
}

void loop() {
  // basic readout test
 
   Serial.print("Deg C = ");
   Serial.print(ktc.readCelsius());
   Serial.print("\t Deg F = ");
   Serial.println(ktc.readFahrenheit());
 
   delay(500);
}


Ora vorrei integrare questo codice usando il precedente codice che funziona perfettamente per l'AFR,mettendo su una linea l'egt e sull'altra linea l'afr

Avatar utente
Bl4Ck
Messaggi: 789
Iscritto il: 02/12/2012, 13:40
Auto: mx5 v-spec
ECU: MS2 V3.0
Località: Cagliari

Re: Arduino for dummies

Messaggioda Bl4Ck » 07/08/2016, 20:39

Posta il codice che usi per l'AFR... così vediamo di unirli. Che display vuoi usare?
Danilo

Avatar utente
Tony Evo
Messaggi: 6140
Iscritto il: 02/06/2011, 6:51
ECU: MS2 V3.0
Località: Vicino Roma

Re: Arduino for dummies

Messaggioda Tony Evo » 07/08/2016, 21:26

L'ha postato guzzi come allegato nella pagina indietro.
Schermo 16x2

Inviato dal mio XT1572 utilizzando Tapatalk

Avatar utente
Tony Evo
Messaggi: 6140
Iscritto il: 02/06/2011, 6:51
ECU: MS2 V3.0
Località: Vicino Roma

Re: Arduino for dummies

Messaggioda Tony Evo » 08/08/2016, 7:44

comunque era questo il codice per lo schermo con afr

Codice: Seleziona tutto

/*
  LiquidCrystal Library

  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
 * ingresso valore dal modulo AFR pin 0

 */

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int sensorPin = A0;    // definisce il pin al quale applicare il segnale dal modulo AFR
int sensorValue1 = 0;  // variable to store the value coming from AFR module
int sensorValue0 = 0;  // variable to store the value coming from AFR module
int sensorValue2 = 0;  // variable to store the value coming from AFR module
float lagFactor = 40.00;  // definizione del fattore di smorzamento della lettura
int delayValue = 100;  // attesa tra le varie letture
float AFR = 0;  // variable to store the real AFR value
float AFR1 = 0;  // variable to store the real AFR value

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  //inizializza la comunicazione seriale col pc per la visualizzazione dei dati
  Serial.begin(9600);

  // MESSAGGIO INIZIALE
  // imposta la posizione del cursore e scrive un messaggio iniziale sul LCD.
      /*
      lcd.setCursor(3, 0);
      lcd.print("ACCENSIONE");
       */
      lcd.setCursor(2, 0);
      lcd.print("BENVENUTO");
      lcd.setCursor(4, 1);
      lcd.print("A BORDO");
      /*
      lcd.setCursor(3, 0);
      lcd.print("BENVENUTO");
      lcd.setCursor(4, 1);
      lcd.print("ABOARD");
      */
    // APPLICA UN RITARDO DI 5 SECONDI
  delay(5000);
     // pulisce lo schermo
   lcd.clear();

   //INTESTAZIONE MONITOR SERIALE
   //stampa su monitor seriale i 5 dati principali
     Serial.print("lettura precedente DAC");
          Serial.print("lettura attuale DAC");
              Serial.print("lettura precedente VOLT");
                  Serial.print("lettura attuale VOLT");
                       Serial.println("AFR precedente");
}

void loop() {
  // memorizza la letture precedente in una nuova variabile
   sensorValue0 = sensorValue2 ;
  // legge l'ingresso sul pin 0
  sensorValue1 = analogRead(sensorPin);

  //calcolo il valore letto in Volt
  float voltage0= sensorValue0 * (5.0 / 1023.0);
  float voltage1= sensorValue1 * (5.0 / 1023.0);
 

      //stampo a monitor tutte le variabilii           
      Serial.print(sensorValue0   );
          Serial.print(sensorValue1   );
              Serial.print(voltage0,2   );
                  Serial.print(voltage1,2   );
                     Serial.println(AFR,2   );
   
  //CALCOLO DEL VALORE AFR
  // applico un filtro al valore letto per evitare i disturbi
  sensorValue2 = sensorValue0 + (sensorValue1 - sensorValue0)*(0.40);
  // trasforma la lettura nel valore AFR
     AFR = map ( sensorValue2 ,0 , 1023 ,1000 ,2000 );
     AFR1=AFR/100 ;

       //STAMPA SUL DISPLAY DEL VALORE AFR
       // posiziono il cursore sulla terza colonna ovvero la n°2, prima riga ovvero la n°0
       lcd.setCursor(3, 1);
       // stampo il valore AFR sul display:
       lcd.print("AFR = ");
       lcd.print(AFR1);
       // applico un piccolo ritardo per stabilizzare la lettura
       delay(delayValue);
}


Avatar utente
Bl4Ck
Messaggi: 789
Iscritto il: 02/12/2012, 13:40
Auto: mx5 v-spec
ECU: MS2 V3.0
Località: Cagliari

Re: Arduino for dummies

Messaggioda Bl4Ck » 08/08/2016, 10:56

Prova a far girare questo vedi che ne esce... purtroppo ho l'arduino qui ma sto senza nient'altro quindi non riesco a fare un circuitino per testarlo. Vedi che ti dice, perchè a me non lo fa nemmeno compilare che qua sono senza librerie...

Codice: Seleziona tutto

// Librerie:
#include <LiquidCrystal.h>
#include <max6675.h>

// Pin librerie:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

int sensorPin = A0;    // definisce il pin al quale applicare il segnale dal modulo AFR
int sensorValue1 = 0;  // variable to store the value coming from AFR module
int sensorValue0 = 0;  // variable to store the value coming from AFR module
int sensorValue2 = 0;  // variable to store the value coming from AFR module
float lagFactor = 40.00;  // definizione del fattore di smorzamento della lettura
int delayValue = 100;  // attesa tra le varie letture
float AFR = 0;  // variable to store the real AFR value
float AFR1 = 0;  // variable to store the real AFR value
int ktcSO = 8;
int ktcCS = 9;
int ktcCLK = 10;

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  //inizializza la comunicazione seriale col pc per la visualizzazione dei dati
  Serial.begin(9600);

  // MESSAGGIO INIZIALE
  // imposta la posizione del cursore e scrive un messaggio iniziale sul LCD.
      lcd.setCursor(2, 0);
      lcd.print("BENVENUTO");
      lcd.setCursor(4, 1);
      lcd.print("A BORDO");
   
    // APPLICA UN RITARDO DI 5 SECONDI
  delay(5000);
     
     // pulisce lo schermo
   lcd.clear();

   //INTESTAZIONE MONITOR SERIALE
   //stampa su monitor seriale i 5 dati principali
     Serial.print("lettura precedente DAC");
          Serial.print("lettura attuale DAC");
              Serial.print("lettura precedente VOLT");
                  Serial.print("lettura attuale VOLT");
                       Serial.println("AFR precedente");
}

void loop() {
  // memorizza la letture precedente in una nuova variabile
   sensorValue0 = sensorValue2 ;
  // legge l'ingresso sul pin 0
  sensorValue1 = analogRead(sensorPin);

  //calcolo il valore letto in Volt
  float voltage0= sensorValue0 * (5.0 / 1023.0);
  float voltage1= sensorValue1 * (5.0 / 1023.0);
 

      //stampo a monitor tutte le variabilii           
      Serial.print(sensorValue0   );
          Serial.print(sensorValue1   );
              Serial.print(voltage0,2   );
                  Serial.print(voltage1,2   );
                     Serial.println(AFR,2   );
   
  //CALCOLO DEL VALORE AFR
  // applico un filtro al valore letto per evitare i disturbi
  sensorValue2 = sensorValue0 + (sensorValue1 - sensorValue0)*(0.40);
  // trasforma la lettura nel valore AFR
     AFR = map ( sensorValue2 ,0 , 1023 ,1000 ,2000 );
     AFR1=AFR/100 ;

       //STAMPA SUL DISPLAY DEL VALORE AFR
       // posiziono il cursore sulla terza colonna ovvero la n°2, prima riga ovvero la n°0
       lcd.setCursor(3, 1);
       
       // stampo il valore AFR sul display:
       lcd.print("AFR = ");
       lcd.print(AFR1);
       
       //Mi posiziono sulla 3° colonna, seconda riga.
       lcd.setCursor(3, 2);
       
       //Stampo il valore EGT sul display:
       lcd.print("EGT = ");
       lcd.print(ktc.readCelsius());
       
       // applico un piccolo ritardo per stabilizzare la lettura
       delay(delayValue);
}
Danilo

Avatar utente
Tony Evo
Messaggi: 6140
Iscritto il: 02/06/2011, 6:51
ECU: MS2 V3.0
Località: Vicino Roma

Re: Arduino for dummies

Messaggioda Tony Evo » 08/08/2016, 11:27

Stasera o al massimo domani mattina provo

Avatar utente
ricki158
Messaggi: 934
Iscritto il: 20/04/2012, 16:51
Auto: Fiat 127 mk2 900/C - 1980
ECU: MS1 V2.2
Località: Gorizia

Re: Arduino for dummies

Messaggioda ricki158 » 08/08/2016, 17:00

Qualcuno saprebbe utilizzare una libreria per fare i "menù" con un display 16x4 via I2C? Non ho mai provato. Per visualizzare molti dati, oppure dati importanti presi singolarmente. Magari i dati importanti "girano" in loop mentre se si vuole consultare dati più specifici basta usare una piccola tastiera composta di 4 bottoni "freccia" (su, giù, dx, sx) e qualche altro tasto per la selezione.

Un'altra cosa che mi piacerebbe tantissimo fare è un mixer digitale: http://adamdzak.blogspot.it/2012/07/int ... lo-13.html

Avatar utente
Bl4Ck
Messaggi: 789
Iscritto il: 02/12/2012, 13:40
Auto: mx5 v-spec
ECU: MS2 V3.0
Località: Cagliari

Re: Arduino for dummies

Messaggioda Bl4Ck » 08/08/2016, 21:02

In giro per internet ho visto qualche tutorial... sicuramente si può fare. Però non ci ho mai provato...
Danilo


Torna a “Elettronica generale”

Chi c’è in linea

Visitano il forum: Nessuno e 33 ospiti