Smart Garden con IoT Cloud

Ciao a tutti,

lo scopo di questo mio post è per chiedere un consiglio ai più esperti. Ho lavorato ad un progetto di Smart Garden con un arduino mkr 1010, un relay collegato ad una pompetta ed un sensore di moisture. Il tutto è comandato tramite l'IoT Cloud di Arduino con il quale posso comandare la pompetta, programmargli il tempo per quanto rimanere aperta e controllare la variazione della Moisture nel tempo. Il progetto funziona e sono abbastanza soddisfatto. Però essendo un principiante vorrei chiedere una supervisione ai più esperti in modo tale da verificare che io non abbia fatto macro errori. Ovviamente anche consigli su come migliorarlo sono ben accetti. Allego sia uno schema preparato con Fritzing che il codice che sto utilizzando.

Grazie in anticipo a tutti,

Lorenzo

ps. I dubbi più grandi non sono tanto sul codice quanto sui collegamenti (in particolare, è corretto collegare il VCC del sensore di moisture all'ingresso 5V di Arduino?)


#include "arduino_secrets.h"
#include "thingProperties.h"
const int relay = A5;
const int moistPin = A4;
unsigned long startedWatering;

int dry = 1023;
int wet = 0;

void setup() {
  Serial.begin(9600);

  delay(1500); 

  // Defined in thingProperties.h
  initProperties();

  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
  
  pinMode(relay, OUTPUT);
  digitalWrite(relay, HIGH);  //pump off
}

void loop() {
  ArduinoCloud.update();
  
  Serial.print("Pump state:");
  Serial.println(pump_state);
  
  int raw_moisture = analogRead(moistPin);
  
  //map raw moisture to a scale of 0 - 100
  moisture = map(raw_moisture, wet, dry, 100, 0);
    
  // Stop watering after the configured duration
  if (pump_state && (millis() - startedWatering) >= waterTime*1000) {
    stopWatering();
    message = "Time is finished! Pump OFF";
  }

  delay(100);
}

//----------
void stopWatering () {
  pump_state = false;
  digitalWrite(relay, HIGH);
  message = "Pump OFF!";
}

//----------
void startWatering () {
  pump_state = true;
  startedWatering = millis();
  digitalWrite(relay, LOW);
  message = "Pump ON!";
}

//----------
void onPumpStateChange()  {
  if (pump_state) {
    startWatering();
  }
  else {
    stopWatering();
  }
}

//----------
void onMessageChange()  {
  // Add your code here to act upon Message change
}

//----------
void onWaterTimeChange()  {
  // Add your code here to act upon WaterTime change
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.