Salve a tutti,
sono nuovo del forum e anche in linea di massima di Arduino, avendolo conosciuto circa un anno fa; io non mi occupo di elettronica ma di chimica e Arduino rimane una bellissima passione oltre alla mia attività studentesca.
Ho un problema: con mio padre abbiamo deciso di lavorare ad un'incubatrice per uova di gallina e Arduino sembra faccia proprio al caso nostro. Messo a punto e realizzato il cablaggio dei cavi sono sorti diversi problemi di logica del programma, sicuramente dovuti alla mia ignoranza in materia.
vi spiego un po' che sensori ho nella mia incubatrice e che attuatori:
---Sensori---
.DHT11 per Temp. e Umid.
--Attuatori (tutti collegati a relè gestiti da Arduino)--
-Motore gira Uova.
-Lampade Riscaldamento Teca.
-Resistenza 24v per scaldare H2O in contenitore metallico (idea abbandonata perchè la resistenza non è sufficientemente potente a scaldare).
-Ventola di un vecchio ATX per pc utile per correggere T e Umid buttando aria fuori dalla teca.
Schermo LCD 20x4 I2C alimentato a parte così come la scheda relè da 4.
Premettendo che ho avuto diversi problemi già con il sensore dati dalla ripetuta lettura dello stesso e "risolti" con un delay() nell'accensione della lampadina, vi chiedo:
Si può introdurre un ciclo di rotazione del motore senza interferire con il loop principale? Una sorta di lampeggio senza delay()magari con la funzione millis() e se si, come?
Vi posto lo sketch da e realizzato modificandone altri già esistenti. Ringrazio anticipatamente per le eventuali disponibilità e se avete idee o accorgimenti da implementare al "mio" sketch fate pure.
![/
[#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
LiquidCrystal_I2C lcd(0x27, 20, 4);
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const int luce = 7;
const int ventola = 13;
const int resistenza = 8;
const int motore = 10;
void setup() {
lcd.begin();
lcd.setCursor(0,1);
lcd.print("Temp:");
lcd.setCursor(0,2);
lcd.print("Umid:");
lcd.setCursor(3, 0);
lcd.print("Incubatrice");
lcd.setCursor(0, 3);
lcd.print("*/*/-Incubando-/*/*");
pinMode(luce, OUTPUT);
pinMode(ventola, OUTPUT);
pinMode(resistenza, OUTPUT);
pinMode(motore, OUTPUT);
digitalWrite(luce, LOW);
}
void loop() {
int t = dht.readTemperature();
int h = dht.readHumidity();
lcd.setCursor(6, 1);
lcd.print(t);
lcd.print(char(223));
lcd.print("C");
lcd.setCursor(6, 2);
lcd.print(h);
lcd.print(" %");
if (t<37.7) {
digitalWrite(luce, HIGH);
lcd.setCursor(12,1);
lcd.print("Riscal");
delay(3000);
}
else{
digitalWrite(luce, LOW);
lcd.setCursor(12, 1);
lcd.print("OK ");
delay(180000);
}
if (t >= 39){
digitalWrite(ventola, HIGH);
}
else{
digitalWrite(ventola, LOW);
}
if (h < 53){
digitalWrite(resistenza, HIGH);
lcd.setCursor(12, 2);
lcd.print("Riscal.");
}
else{
digitalWrite(resistenza, LOW);
lcd.setCursor(12, 2);
lcd.print("OK ");
}
if(h > 60){
digitalWrite(ventola, HIGH);
}
else{
digitalWrite(ventola, LOW);
}
}
Spero di aver azzeccato almeno la sezione giusta questa volta.