Completato

Note

Errore

Session expiration Your session is going to expireClick here to extend

Budget:

Piccolo progetto <800

Pubblicato il

06/09/19 1.03

Questo progetto è scaduto

Pubblica un progetto simile e ricevi velocemente offerte non vincolanti.

Pubblica ora il tuo progetto simile

Descrizione

i order this https://www.amazon.it/hz/wishlist/ls/2ZX48XDE24CO5/ref=nav_wishlist_lists_4?_encoding=UTF8&type=wishlist

i would make feeder cat

my frizting and .ino is down



#include "SoftwareSerial.h"//libreria comunicazione seriale

#include //libreria per la gestione del display LCD

LiquidCrystal lcd (2, 3, 4, 5, 6, 7); //definisco a quali pin è collegato il display


#include "SIM900.h" //includo libreria modulo GSM

#include // questa libreria è necessaria alla libreria gsm.h, che è stata rinominata sms.h

#include "sms.h" // Libreria per la gestione dei messaggi SMS


SMSGSM sms;


//configurazione modulo GSM

int numdata;

boolean started=false;

char smsbuffer[160];

char Mittente[20];


//configurazione parte acqua

int pompa;

int pin_sensore = 0; //definisco la costante che indica che il pin di ingresso analogico del sensore è il numero A0

int livello_min = 550; //definisco la costante che contiene il livello idrico da mantenere nella ciotola (riferimento per il sensore) (valore modificabile)

int livello_max = 560; //definisco la costante che contiene il livello idrico massimo consentito nella ciotola (valore modificabile)

int pin_pompa = 8; //definisco la costante che indica che il relè della pompa è connesso al pin 8


//configurazione parte crocchette

int pin_pulsante = 10; //definisco la costante che indica il pin dove è connesso il pulsante per l'erogazione delle crocchette

int pin_motore = 12; //definisco la costante che indica il pin dove è connesso il relè che comanda il motore DC dell' erogatore


//creo un carattere speciale (rettangolo pieno), per la boot animation

byte Rettangolo [8] =

{

B11111,

B11111,

B11111,

B11111,

B11111,

B11111,

B11111,

B11111

};


void setup()

{

Serial.begin(9600); //avvio una comunicazione seriale a 9600 bps

pinMode (pin_motore, OUTPUT); //imposto il pin del motore come output

pinMode (pin_pompa, OUTPUT); //imposto il pin della pompa come output

pinMode(pin_pulsante, INPUT); //imposto il pin del pulsante come input


lcd.createChar(0, Rettangolo);

lcd.begin (16, 2); //definisco il tipo di display LCD utilizzato (16x2)

lcd.noBlink();

lcd.noCursor();

//in queste righe creo la schermata di avvio (boot animation) costityitra da rettangoli sfalsati che scorrono

//prima riga di rettangoli

lcd.setCursor(0, 0);

lcd.write(byte(0));

delay(50);

lcd.setCursor(2, 0);

lcd.write(byte(0));

delay(50);

lcd.setCursor(4, 0);

lcd.write(byte(0));

delay(50);

lcd.setCursor(6, 0);

lcd.write(byte(0));

delay(50);

lcd.setCursor(8, 0);

lcd.write(byte(0));

delay(50);

lcd.setCursor(10, 0);

lcd.write(byte(0));

delay(50);

lcd.setCursor(12, 0);

lcd.write(byte(0));

delay(50);

lcd.setCursor(14, 0);

lcd.write(byte(0));

delay(50);


//seconda riga di rettangoli

lcd.setCursor(15, 1);

lcd.write(byte(0));

delay(50);

lcd.setCursor(13, 1);

lcd.write(byte(0));

delay(50);

lcd.setCursor(11, 1);

lcd.write(byte(0));

delay(50);

lcd.setCursor(9, 1);

lcd.write(byte(0));

delay(50);

lcd.setCursor(7, 1);

lcd.write(byte(0));

delay(50);

lcd.setCursor(5, 1);

lcd.write(byte(0));

delay(50);

lcd.setCursor(3, 1);

lcd.write(byte(0));

delay(50);

lcd.setCursor(1, 1);

lcd.write(byte(0));

delay(50);

lcd.clear(); //pulisco la schermata

delay(250); //attende 250ms


//scrive "Creative Electronics!"

lcd.setCursor(4, 0);

lcd.print ("Creative");

lcd.setCursor(2, 1);

lcd.print ("Electronics!");

delay (3000); //tempo in cui perdura la scritta

lcd.clear(); //cancello la schermata


//qui creo un messaggio di attesa (nel frattempo viene configurato il modulo GSM, vedi if sottostante)

lcd.setCursor(0, 0);

lcd.print ("PETDUINO GSM");

lcd.setCursor(0, 1);

lcd.print ("Attendere...");

if (gsm.begin(2400)) //avvio la comunicazione con il modulo GSM

{

//Serial.println("STATUS Modulo GSM = PRONTO"); //comunicazione seriale informativa circa lo stato del modulo GSM

started=true;

}

else

Serial.println("STATUS Modulo GSM = INATTIVO"); //comunicazione seriale informativa circa lo stato del modulo GSM

}


void loop()

{

//parte acqua

float valore= analogRead (pin_sensore); //valore restituito dal sensore contenuto nella variabile "valore"


if (valore < livello_min) //se il valore di livello idrico restituito è minore di quello minimo desiderato...

{

digitalWrite (pin_pompa, HIGH); //accende la pompa

lcd.clear(); //pulisce il display dalla schermata precedente

lcd.setCursor(0, 0); //setto la posizione del cursore dell' LCD

lcd.print ("STATO PET-DUINO:"); //scrive sull' LCD nella prima riga

lcd.setCursor(0, 1);

lcd.print ("Erogo acqua"); //scrive la seconda riga dell'LCD

}


else if (valore > livello_max) //se il valore è uguale a quello massimo desiderato

{

digitalWrite (pin_pompa, LOW);//la pompa viene spenta

lcd.clear();

lcd.setCursor(0, 0);

lcd.print ("STATO PET-DUINO:"); //scrive sull' LCD

lcd.setCursor(0, 1);

lcd.print ("Servizio Normale");

}

delay (1000); //tempo infralettura del sensore




//parte crocchette pulsante

int stato_pulsante = digitalRead (pin_pulsante); //valore del pulsante (ottenuto mediante lettura del pin) contenuto nella variabile "stato_pulsante"

if (stato_pulsante == HIGH) //se il pulsante delle crocchette è premuto...

{

lcd.clear(); //pulisco il display

lcd.setCursor(0, 0);

lcd.print ("STATO PET-DUINO:"); //scrive sull' LCD

lcd.setCursor(0, 1);

lcd.print ("Erogo Crocchette");

digitalWrite (pin_motore, HIGH); //accende il motore

delay (8000); //tempo in cui il motore resta acceso (8 secondi)

digitalWrite (pin_motore, LOW); //spegne il motore

}

delay (60); //tempo di attesa



//parte crocchette GSM

char inSerial[50];

char position;

if (started)

{

position = sms.IsSMSPresent(SMS_ALL); // Valore da 1..20

if (position)

{

// Leggo il messaggio SMS e stabilisco chi sia il mittente

sms.GetSMS(position, Mittente, smsbuffer, 160);


if (//elenco dei numeri autorizzati al controllo del relè

(strcmp(Mittente,"+39xxx")==0) // numero1 (sostituire xxx con il numero cellulare)

|| (strcmp(Mittente,"+39xxx")==0) //numero2

)

{

Serial.print("Comando Ricevuto [tel. "+String(Mittente)+String("]: ") + String(smsbuffer)); //invio informazione via monitor seriale

if (strcmp(smsbuffer,"Eroga")==0) //se il messaggio SMS contiene la parola "Eroga" verranno eseguite le seguenti azioni (è possibile modificare la parola EROGA)

{

digitalWrite(pin_motore, HIGH); // Accende il relè del motore (pin 12)

Serial.println(" => Sto erogando crocchette"); //riporta questa informazione sul monitor seriale (finestra di Arduino IDE)

lcd.clear(); //pulisco il display dalle schermate precedenti

lcd.setCursor(0, 0); //posiziono il cursore prima nella riga e prima colonna

lcd.print ("STATO PET-DUINO:"); //scrive sull' LCD

lcd.setCursor(0, 1);

lcd.print ("Erogo Crocc. SMS");

delay(8000); //tempo di erogazione (come per la modalità con pulsante)

digitalWrite(pin_motore, LOW); //spegne il motore e termina l'erogazione

Serial.println(" => Erogazione crocchette terminata"); //invia messaggio al pc via seriale


//ora verranno inviati dei messaggi SMS di conferma ai mittenti

lcd.clear(); //pulisco display dalle schermate precedenti

lcd.setCursor(0, 0);

lcd.print ("STATO PET-DUINO:"); //scrive sull' LCD

lcd.setCursor(0, 1);

lcd.print ("Invio SMS..."); //scrive sull' LCD

//invia i messaggi ai due numeri configurati

sms.SendSMS("+39xxx", "ho erogato le crocchette!"); //è possibile modificare il testo sms tra virgolette, inserire numero cell. al posto di xxx

sms.SendSMS("+39xxx", "ho erogato le crocchette!");

Serial.println("SMS di avvenuta erogazione inviato"); //invia questa informazione al monitor seriale

}

}

//se l'SMS non è inviato da un numero configurato oppure ha un testo non corretto il messaggio viene ignorato

else

Serial.println(" => messaggio ricevuto non valido");

sms.DeleteSMS(position); // Elimina l'SMS appena analizzato

}

delay(500);

}


}