Arduino Progetto Flussometro e altro [pag. 18]

Guardiamarina
nabucodor
Mi piace
- 171/470
Salve ragazzi anche il mio progetto va avanti io sto utilizzando un arduino uno come display 20x4 una sd card card, uno shidle bletooth, un timer RTC.... ma sto incontrando difficoltà... sono espero in elettronica pura ma ho qualche lacuna con la programmazione.... in particolare st avendo problemi a salvare i dati sulla sd card dei vai consumi.... mi da sempre errore nella scrittura.... misa che semplifico il progetto.... ed elimino un po di cose...c'è qualcuno che mi darebbe una mano nella programmazione? Wink
dimenticavo ho trovato un sensore di flusso fantastico made japan con attacco da 8,5 mm ed è volumentrico..... Wink
Capitano di Fregata
marcop20 (autore)
Mi piace
- 172/470
troppe periferiche contemporanee per un mega328p....
comunque.......
di preciso che problema hai con la SD?
Se la usi da sola senza bluetooth, RTC, ecc.... ti funziona la lettura e scrittura?

Per la sd stai usando uno shield bello e fatto?
eventualmente quale? in seriele o i2c?

Che librerie stai usando?

Eventualmente posta il codice o invialo per mail o messaggio privato e vediamo come risolvere
Ammiraglio di squadra
Gulliver
Mi piace
- 173/470
Avanti così ragazzi che non vediamo l'ora di testare il prototipo
Capitano di Vascello
SparusAurata
Mi piace
- 174/470
Ciao,
ti rispondo un po a tutti i punti:

nabucodor ha scritto:
.......... un arduino uno come display 20x4 una sd card card, uno shidle bletooth, un timer RTC.... .......

Per me l'arduino uno può gestire contemporaneamente quei dispositivi.

nabucodor ha scritto:
S.... in particolare st avendo problemi a salvare i dati sulla sd card dei vai consumi.... mi da sempre errore nella scrittura....

Devi verificare il circuito di collegamento tra SD e l'arduino. Sono sicuro che non gli arriva la tensione giusta quando va in scrittura. Io ti consiglio di togliere la memoria SD e di utilizzare una su I2C, tipo 24C512.

nabucodor ha scritto:
.... misa che semplifico il progetto....

Assolutamente no. C'è stata una persona che ha realizzato un mega cronotermostato con controllo dell'umitità. Trova questo progetto e ti aiuterà.

nabucodor ha scritto:
..........c'è qualcuno che mi darebbe una mano nella programmazione? .......

Presente.

nabucodor ha scritto:
.......dimenticavo ho trovato un sensore di flusso fantastico made japan con attacco da 8,5 mm ed è volumentrico.....

Ci dai il link internet? Grazie.


@ MarcoP20: Non dovevi lavorare?
Ho scritto il codice ma non l'ho provato in quanto il DUE è 3,3V. Ora devo realizzare il circuito di adattamento.
Nel frattempo, se mi passi l'UNO, lo proviamo lì.

Ciao

P.s.: Grazie per il KARMA a chiunque sia stato.
Chi ama il mare sarà sempre libero!

Fatti un regalo!
https://www.gommonauti.it/donazione.php
Capitano di Fregata
marcop20 (autore)
Mi piace
- 175/470
Sparus....
ho postato alle 20.00 circa....ed ero appena tornato a casa
è sabato anche per me Razz Sbellica
Capitano di Fregata
marcop20 (autore)
Mi piace
- 176/470
Sparus....... dimenticavo......

La uno c'è l'ho impegnata in un altro progetto.....
Se vuoi ho una nano ancora vergine, identica alla uno, ma più piccola e con pin out disposti diversamente
Capitano di Vascello
SparusAurata
Mi piace
- 178/470
Ciao Marcop20,
non ho resistito e sono andato a trovare delle resistenze per realizzare il partitore di adattamento da 5 a 3,3V.

Ho montato tutto su una breadboard ed ho testato il programma, verificando i valori sul display e con il multimetro.

FUNZIONA TUTTO. Il flussometro non l'ho testato, perchè già funzionava.

Domani passerò a realizzare la parte di menù di set-up, ovvero l'inserimento del volume totale del serbatoio attraverso una combinazione di tasti.

Ciao
Chi ama il mare sarà sempre libero!

Fatti un regalo!
https://www.gommonauti.it/donazione.php
Guardiamarina
nabucodor
Mi piace
- 179/470
Ciao a tutti ecco il codice:
scusate ma non ho sistemato bene i commenti....
comunque ho comprato un 24cl512 da utilizzare a l posto della sd card ma mi serve una mano con il codice... per la sostitusione

/*-----( Import needed libraries )-----*/
#include <Wire.h> // Comes with Arduino IDE
// Get the LCD I2C Library here:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
// Move any other LCD libraries to another folder or delete them
// See Library "Docs" folder for possible commands etc.

// I assume you know how to connect the DS1302 and LCD.
// DS1302: CE pin -> Arduino Digital 9
// I/O pin -> Arduino Digital 8
// SCLK pin -> Arduino Digital 7
#include <DS1302.h>
// Init the DS1302
//DS1302(ce, data, clock);
DS1302 rtc(9,8,7);


/* This example shows how to read and write data to and from an SD card file
The circuit:
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4
*/
#include <SD.h>
#define CS 4
char buffer[50];
File myFile;

#include <LiquidCrystal_I2C.h>

/*-----( Declare Constants )-----*/
//none
/*-----( Declare objects )-----*/
// set the LCD address to 0x20 for a 20 chars 4 line display
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address

#include <SoftwareSerial.h> // import the Arduino serial library
SoftwareSerial BTFuel(6, 5); // Define the Pins of the HC-05 Bluetooth device. RX, TX
volatile float time = 0;
volatile float time_last = 0;
volatile int impulsi_array[5] = {0,0,0,0,0};
volatile float set_pulse = 2173.91;

//includo la libreria per le impostazioni dell'eeprom
//#include <EEPROM.h>
//int litri_tot = EEPROM.read(0);

//All'accensione imposto a 0 le variabili
float litri_tot = 0;
volatile float impulsi = 0;
int litri_parziali = 0;
volatile float consumo_istantaneo = 0;


void setup()
{
Serial.begin(9600);
Serial.print("Initializing SD card...");
pinMode(CS, OUTPUT);

if (!SD.begin(CS)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");

// Togliere i commenti per la prima programmazione del DS1302
//Set the clock to run-mode, and disable the write protection
//rtc.halt(false);
//rtc.writeProtect(false);
//Setup LCD to 20×4 characters
// The following lines can be commented out to use the values already stored in the DS1302
//rtc.setDOW(THURSDAY); // Set Day-of-Week to FRIDAY
//rtc.setTime(01, 10, 0); // Set the time to 17:22:00 (24hr format)
//rtc.setDate(20, 11, 2014); // Set the date to March 28th, 2014


BTFuel.begin(9600); // Initiate serial connection to Bluetooth device

//Pin 2 impostato come ingrsso digitale interrupt
attachInterrupt(0, interrupt, FALLING);

//Impostazione LCD
lcd.begin(20, 4); // definizione display

lcd.setCursor(0, 2); // posizionamento cursore riga e indice da visualizzare Litri totali
lcd.print("L-T");

lcd.setCursor(11, 2); //posizionamento cursore riga e indice da visualizzare Litri totali
lcd.print("L/H");

//lcd.setCursor(0, 2);
//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); //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*(2173.91/(time));

consumo_istantaneo = (impulsi_array[0] + impulsi_array[1] + impulsi_array[2] + impulsi_array[3] + impulsi_array[4]) / 5;
//Visualizza litri parziali con due cifre decimali
float litri_parziali;
litri_parziali = ((float)impulsi / set_pulse);




//Visualizza litri totali
litri_tot = (impulsi / set_pulse);
BTFuel.println(litri_parziali,4); // Sends liters per second to Bluetooth

//Visualizzo su LCD i litri totali consumati
lcd.setCursor(4, 2);
lcd.print(litri_tot);

//Visualizzo su LCD il consumo istantaneo

lcd.setCursor(15, 2);
lcd.print(consumo_istantaneo);

//Visualizzo su LCD i litri totali consumati
//lcd.setCursor(8, 2);
//lcd.print(litri_parziali);

//Tempo RTC
// Tempo RTC
lcd.setCursor(4, 1);
lcd.print(rtc.getTimeStr());

// Display abbreviated Day-of-Week in the lower left corner
lcd.setCursor(0, 0);
lcd.print(rtc.getDOWStr(FORMAT_SHORT));

// Display date in the lower right corner
lcd.setCursor(4, 0);
lcd.print(rtc.getDateStr(FORMAT_SHORT));

}

sprintf(buffer, "%02d/%02d/%d %02d:%02d:%02d %d %d", rtc.getDOWStr(), rtc.getDateStr(), rtc.getTimeStr(), litri_tot, consumo_istantaneo);
Serial.println( buffer );

myFile = SD.open("dati.log", FILE_WRITE);
if (myFile) {
myFile.println(buffer);
myFile.close();
} else {
Serial.println("error opening data.log");
}

//delay(1000);
} //chiusura while


}


//Lettuara degli interrupt
void interrupt()
{
impulsi = impulsi ++;
time = (micros() - time_last);
time_last = micros();
}
Capitano di Vascello
SparusAurata
Mi piace
- 180/470
Ciao Nabucodor,
ti consiglio di scaricare dal seguente link https://github.com/abzman/RFID-entry-system/blob/master/libraries/E24C1024/examples/EEPROM1024/EEPROM1024.pde

la libreria che ti serve.
Quello che cambia per la tua eeprom, che è una 512, è il massimo indirizzo imputabile.

Oppure al seguente link: https://playground.arduino.cc/Code/I2CEEPROM24LC512 quella relativa al chip in tuo possesso.

I pin SCL e SDA sono quelli prestabiliti in arduino uno, ovvero SDA è connesso alla pin analogico A4, SCL è connesso alla pin analogico A5.
Inserisci la libreria wire.h e quella relativa all'eeprom 512.

Nel frattempo mi copio il tuo codice e lo verifico.

Ciao
Chi ama il mare sarà sempre libero!

Fatti un regalo!
https://www.gommonauti.it/donazione.php
Sailornet