Arduino Progetto Flussometro e altro [pag. 2]
marcop20 (autore)
- 11/466
Mi servirebbe un aiutino
Allo stato attuale nel momento in cui tolgo l'alimentazione il consumo totale riparte da 0
Vorrei inserire il risultato di quella variabile nella eeprom interna
Allo stato attuale nel momento in cui tolgo l'alimentazione il consumo totale riparte da 0
Vorrei inserire il risultato di quella variabile nella eeprom interna
Gulliver
- 12/466
Questo topic è fantastico.
marcop20 (autore)
- 13/466
Il progetto anche se a rilento va avanti
Appena ho modifiche rilevanti posto tutto
Gulliver
- 14/466
Marco non sono informatico e ho appena capito cos'è Arduino, ho visto che gestisce sensori e avrei una domanda quasi OT:
tu pensi che sia possibile utilizzarlo per portare il segnale dai motori a iniezione, ma ancora senza presa LAN, agli strumenti nmea 2000?
Come sai le centraline dei motori a iniezione sono in grado di fornire moltissime informazioni che in effetti vengono viste dai meccanici sul computer, ma, se manca la presa NMEA 2000, non possono essere messi in rete.
Pensi che Arduino possa farlo?
Potrebbe diventare un business colossale.
tu pensi che sia possibile utilizzarlo per portare il segnale dai motori a iniezione, ma ancora senza presa LAN, agli strumenti nmea 2000?
Come sai le centraline dei motori a iniezione sono in grado di fornire moltissime informazioni che in effetti vengono viste dai meccanici sul computer, ma, se manca la presa NMEA 2000, non possono essere messi in rete.
Pensi che Arduino possa farlo?
Potrebbe diventare un business colossale.
marcop20 (autore)
- 15/466
Si, si può fare e ci avevo già pensato
Appena finito questo progetto mi cimenterò nell'altro, a patto però che qualcuno mi aiuti in quanto gli AVR e Arduino per me è materia nuovissima
Appena finito questo progetto mi cimenterò nell'altro, a patto però che qualcuno mi aiuti in quanto gli AVR e Arduino per me è materia nuovissima
Gulliver
- 16/466
marcop20 ha scritto:Si, si può fare e ci avevo già pensato
Appena finito questo progetto mi cimenterò nell'altro, a patto però che qualcuno mi aiuti in quanto gli AVR e Arduino per me è materia nuovissima
AVETE SENTITO?
SI PUÒ FARE!!!!!
io ti posso curare i contratti per quando diventerai ricco, ma in informatica non posso darti una mano
marcop20 (autore)
- 17/466
Andando avanti con il progetto flussometro ho apportato delle modifiche.....
Adesso le voci a display sono tre:
in alto a sinistra abbiamo i litri totali consumati dal momento in cui decideremo di montare il dispositivo (attualmente si azzera ad ogni reset e devo trovare il modo per memorizzare tale dato nella eeprom interna)
in alto a destra invece un contatore per i litri parziali consumati visualizzati in litri e centesimi di litri (al momento anche questo dato si azzera ad ogni reset e dovo far in modo che resti in memoria eeprom fino alla pressione di un pulsante)
in basso invece troviamo il consumo istantaneo in litri/h (al momento visualizzo tutto solo in unità senza decimali o centesimali)
Adesso le voci a display sono tre:
in alto a sinistra abbiamo i litri totali consumati dal momento in cui decideremo di montare il dispositivo (attualmente si azzera ad ogni reset e devo trovare il modo per memorizzare tale dato nella eeprom interna)
in alto a destra invece un contatore per i litri parziali consumati visualizzati in litri e centesimi di litri (al momento anche questo dato si azzera ad ogni reset e dovo far in modo che resti in memoria eeprom fino alla pressione di un pulsante)
in basso invece troviamo il consumo istantaneo in litri/h (al momento visualizzo tutto solo in unità senza decimali o centesimali)
marcop20 (autore)
- 18/466
questo è il codice attuale:
//includo la libreria per le funzionalità dell'LCD
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
volatile float time = 0;
volatile float time_last = 0;
volatile int impulsi_array[5] = {0,0,0,0,0};
//includo la libreria per le impostazioni dell'eeprom
#include <EEPROM.h>
int litri_tot = EEPROM.read(0);
//All'accensione imposto a 0 le variabili
int impulsi = 0;
int litri_parziali = 0;
int consumo_istantaneo = 0;
void setup()
{
//Pin 2 impostato come ingrsso digitale interrupt
attachInterrupt(0, interrupt, FALLING);
//Impostazione LCD
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("L-T");
lcd.setCursor(8, 0);
lcd.print("L-P");
lcd.setCursor(0, 1);
lcd.print("L/H");
// abilito una resistenza di pull up sul pin 2
digitalWrite(2, HIGH);
}
//Main Loop
void loop()
{
while(1){
//Tempo di aggiornamento LCD
delay(100);
//Visualizza litri parziali con due cifre decimali
float litri_parziali;
litri_parziali = ((float)impulsi/2500);
//Visualizza litri totali
litri_tot = (impulsi/2500);
//Visualizzo su LCD i litri totali consumati
lcd.setCursor(4, 0);
lcd.print(litri_tot);
//Visualizzo su LCD i litri totali consumati
lcd.setCursor(12, 0);
lcd.print(litri_parziali);
//Visualizzo su LCD il consumo istantaneo
lcd.setCursor(4, 1);
lcd.print(" ");
lcd.setCursor(4, 1);
lcd.print(consumo_istantaneo);
//Aggiorno il consumo_istantaneo
if (time > 0)
{
//5 array per calcolare la media sulle letture del cosumo istantaneo
impulsi_array[0] = impulsi_array[1];
impulsi_array[1] = impulsi_array[2];
impulsi_array[2] = impulsi_array[3];
impulsi_array[3] = impulsi_array[4];
impulsi_array[4] = 60*(2500/(time));
consumo_istantaneo = (impulsi_array[0] + impulsi_array[1] + impulsi_array[2] + impulsi_array[3] + impulsi_array[4]) / 5;
}
} //chiusura while
}
//Lettuara degli interrupt
void interrupt()
{
impulsi = impulsi ++;
time = (micros() - time_last);
time_last = micros();
}
//includo la libreria per le funzionalità dell'LCD
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
volatile float time = 0;
volatile float time_last = 0;
volatile int impulsi_array[5] = {0,0,0,0,0};
//includo la libreria per le impostazioni dell'eeprom
#include <EEPROM.h>
int litri_tot = EEPROM.read(0);
//All'accensione imposto a 0 le variabili
int impulsi = 0;
int litri_parziali = 0;
int consumo_istantaneo = 0;
void setup()
{
//Pin 2 impostato come ingrsso digitale interrupt
attachInterrupt(0, interrupt, FALLING);
//Impostazione LCD
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("L-T");
lcd.setCursor(8, 0);
lcd.print("L-P");
lcd.setCursor(0, 1);
lcd.print("L/H");
// abilito una resistenza di pull up sul pin 2
digitalWrite(2, HIGH);
}
//Main Loop
void loop()
{
while(1){
//Tempo di aggiornamento LCD
delay(100);
//Visualizza litri parziali con due cifre decimali
float litri_parziali;
litri_parziali = ((float)impulsi/2500);
//Visualizza litri totali
litri_tot = (impulsi/2500);
//Visualizzo su LCD i litri totali consumati
lcd.setCursor(4, 0);
lcd.print(litri_tot);
//Visualizzo su LCD i litri totali consumati
lcd.setCursor(12, 0);
lcd.print(litri_parziali);
//Visualizzo su LCD il consumo istantaneo
lcd.setCursor(4, 1);
lcd.print(" ");
lcd.setCursor(4, 1);
lcd.print(consumo_istantaneo);
//Aggiorno il consumo_istantaneo
if (time > 0)
{
//5 array per calcolare la media sulle letture del cosumo istantaneo
impulsi_array[0] = impulsi_array[1];
impulsi_array[1] = impulsi_array[2];
impulsi_array[2] = impulsi_array[3];
impulsi_array[3] = impulsi_array[4];
impulsi_array[4] = 60*(2500/(time));
consumo_istantaneo = (impulsi_array[0] + impulsi_array[1] + impulsi_array[2] + impulsi_array[3] + impulsi_array[4]) / 5;
}
} //chiusura while
}
//Lettuara degli interrupt
void interrupt()
{
impulsi = impulsi ++;
time = (micros() - time_last);
time_last = micros();
}
marcop20 (autore)
- 19/466
un paio di foto per rendere meglio l'idea....
Gulliver
- 20/466
Se lo interfacci con un misuratore di velocità (di spazio) avrai anche i litri/ miglio
Argomenti correlati