Buongiorno a tutti,
un po' di tempo fa ho comprato l'Opplà kit contenente la scheda Arduino MKR wifi 1010, l'MKR IoT carrier e vari sensori. Sto portando avanti il progetto "Smart Garden" per innaffiare le piante anche quando non sono a casa comandando la 'waterpump' grazie al Cloud di Arduino. In particolare sto scrivendo il codice con l'idea che la pompa rimanga aperta e innaffi per un determinato tempo (specifico per la pianta che ho deciso di bagnare) e poi si chiuda. Dato che il progetto l'avevo pensato principalmente per innaffiare piante esterne, dove non ho la possibilità di utilizzare una presa di corrente, avevo preso una batteria Li-Ion 3.7V 2600 mAh (come suggerito dalla guida: mkr iot carrier datasheet.
Dopo alcune prove mi sono accorto che la batteria dura si e no una giornata, ma avrei bisogno di qualcosa di più duraturo: almeno una settimana. Probabilmente l'Arduino tira abbastanza corrente, anche se la pompa non è azionata, da scaricare la pila velocemente. Mi stavo chiedendo c'è un modo per risolvere il mio problema? Penso proprio di sì, altrimenti mi chiedo quale sia l'utilità della batteria nel carrier .
Allego qui sotto il codice in modo che se ci fossero degli errori qualcuno possa segnalarmeli. Ad esempio una cosa che avevo pensato era di aumentare il 'delay' al fondo della funzione 'loop' da 1000 ms a tot ore, in modo che lui si aggiorni, legga la temperatura/umidità/livello dell'acqua non ogni secondo ma solo ogni tot ore. Credo però che questo non risolva il problema.
Grazie in anticipo a chiunque sappia aiutarmi,
Lorenzo
#include "thingProperties.h"
#include <Arduino_MKRIoTCarrier.h>
MKRIoTCarrier carrier;
int moistPin = A5;
int dry = 1023;
int wet = 0;
int timer = 10000;
String waterPumpState;
void setup() {
// Initialize serial and wait for port to open:
Serial.begin(9600);
//enable only if you work with the pc
//while (!Serial);
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
//Get Cloud Info/errors , 0 (only errors) up to 4
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
//Wait to get cloud connection to init the carrier
while (ArduinoCloud.connected() != 1) {
ArduinoCloud.update();
delay(500);
}
delay(500);
CARRIER_CASE = true;
carrier.begin();
carrier.display.setRotation(0);
delay(1500);
}
void loop() {
ArduinoCloud.update();
uint8_t r, g, b;
control_RGB.getValue().getRGB(r, g, b);
//read temperature and humidity
temperature = carrier.Env.readTemperature();
humidity = carrier.Env.readHumidity();
//Update touch buttons
carrier.Buttons.update();
//function to print out values
if (carrier.Button0.onTouchDown()) {
printInfo();
}
//read raw moisture value
int raw_moisture = analogRead(moistPin);
//map raw moisture to a scale of 0 - 100
moisture = map(raw_moisture, wet, dry, 100, 0);
delay(1000);
}
void onWaterpumpChange() {
if (waterpump == true) {
carrier.Relay2.open();
waterPumpState = "PUMP: ON";
updateScreen();
//set timer [ms] to turn OFF the pump
delay(timer);
waterpump = false;
carrier.Relay2.close();
waterPumpState = "PUMP: OFF";
updateScreen();
}
}
//Update displayed Info
void printInfo(){
carrier.display.fillScreen(ST77XX_BLACK);
carrier.display.setTextColor(ST77XX_WHITE);
carrier.display.setTextSize(2);
carrier.display.setCursor(40, 60);
carrier.display.print("Water: ");
carrier.display.print(moisture);
carrier.display.println("%");
carrier.display.setCursor(40, 80);
carrier.display.print("T: ");
carrier.display.print(temperature);
carrier.display.println("C");
carrier.display.setCursor(40, 100);
carrier.display.print("Hum: ");
carrier.display.print(humidity);
carrier.display.println("%");
}
void updateScreen(){
carrier.display.fillScreen(ST77XX_RED);
carrier.display.setTextColor(ST77XX_WHITE);
carrier.display.setTextSize(2);
carrier.display.setCursor(50, 60);
carrier.display.print(waterPumpState);
}