Aggiornamento:
ho interrotto l'esperimento prima della fine effettiva della batteria
L'Arduino e' rimasta attiva dalle 8:37 del 1/11/2024 alle 8:50 del 15/12/2024 partendo da circa 4.3 V per terminare a 3.91 V ed ha effettuato 31424 misure dal sensore di torbidita'
Al di sotto il grafico di scarica
================================================
Alla fine ci sono riuscito
La arduino MKR zero e' ormai da un mese che e' rimasta accesa sul tavolo...o meglio si attiva ogni minuto, legge il pin 0, legge lo stato della carica della batteria, scrive sulla Sd card e si addormenta in deep sleep
la batteria da 6600 mAh e' costituita da 18650
#include "ArduinoLowPower.h"
#include <SD.h>
#include <RTCZero.h>
RTCZero rtc;
/* Change these values to set the current initial time */
const byte seconds = 00;
const byte minutes = 05;
const byte hours = 14;
/* Change these values to set the current initial date */
const byte day = 01;
const byte month = 11;
const byte year = 24;
const int chipSelect = SDCARD_SS_PIN;
int i;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
delay(1000);
SD.begin(chipSelect);
rtc.begin(); // initialize RTC
rtc.setHours(hours);
rtc.setMinutes(minutes);
rtc.setSeconds(seconds);
rtc.setDay(day);
rtc.setMonth(month);
rtc.setYear(year);
}
void loop() {
if (i == 60) {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
int batteria = analogRead(ADC_BATTERY);
float voltage = batteria * (4.3 / 1023.0);
if (voltage < 3.9)
{
for (i=1;i<10;i++)
{
digitalWrite(LED_BUILTIN, HIGH);
delay(50);
digitalWrite(LED_BUILTIN, LOW);
delay(50);
}
}
File dataFile = SD.open("data.txt", FILE_WRITE);
int sensor = analogRead(0);
String anno = String(rtc.getYear());
String mese = String(rtc.getMonth());
String giorno = String(rtc.getDay());
String ora = String(rtc.getHours());
String minuto = String(rtc.getMinutes());
String secondo = String(rtc.getSeconds());
if (mese.length() == 1) {mese = "0"+ mese;}
if (giorno.length() == 1) {giorno = "0"+ giorno;}
if (ora.length() == 1) {ora = "0"+ ora;}
if (minuto.length() == 1) {minuto = "0"+ minuto;}
if (secondo.length() == 1) {secondo = "0"+ secondo;}
if (dataFile) {
dataFile.println(anno+"/"+mese+"/"+giorno+"-"+ora+":"+minuto+":"+secondo+";"+String(sensor)+";"+String(voltage));
dataFile.close();
}
i = 0;
}
i++;
LowPower.sleep(1000);
}