Programator de irigare a solarului

Autor: Damian Stefania-Dorina
Grupa: 336CC

Introducere

Ce face proiectul

Proiectul consta in realizarea unui sistem de programare a irigarii solarului pe care utilizatorul o poate seta cu o anumita periodicitate si durata, incepand dupa un anumit timp. Acest lucru se poate realiza prin Bluetooth de pe telefon, prin intermediul unei aplicatii cu terminal prin care se pot trimite mesaje cu un anumit format. Irigarea se mai poate seta si printr-un buton de start care va rula un program predefinit sau se poate opri printr-un buton de stop. Placuta Arduino preia informatia si comanda o electrovana prin intermediul unor relee.

Scopul proiectului

Scopul proiectului este de a usura procesul de ingrijire a plantelor din solar minimizand interventia umana. Astfel, un agricultor (sau oricine vrea sa-si cultive mancarea) poate pleca de acasa fara sa-si mai faca griji ca plantele se vor ofili in absenta lui sau poate sa se ocupe de altceva fara sa isi mai zica “Aoleu, iar am uitat sa opresc apa! Hai ca am inecat rosiile…”.

Ideea de la care am pornit

Avand solar in curte, am constatat ca atunci cand plecam de acasa fie ducem grija plantelor si nu plecam pentru mult timp, fie le lasam in grija altcuiva. Astfel, m-am gandit sa ne facem viata mai usoara prin automatizarea irigarii plantelor.

De ce este util?

Raspunsul este simplu: “Hakuna matata”. Mergi linistit in vacanta si cand te intorci mananci o rosie din productia proprie si independenta.

Descriere generală

336cc_damian_stefania_schema_bloc.jpg

Pe parcursul rularii, programul se poate afla in una dintre urmatoarele stari:

  • idle - nu face prea multe, asteapta o comanda
  • offset waiting - asteapta sa treaca timpul pana la prima irigare
  • waiting - asteapta sa treaca timpul asociat periodicitatii de irigare
  • working - iriga pana trece timpul stabilit

LED-ul RGB indica starea curenta: stins = idle, galben = offset waiting, rosu = waiting, verde = working. La schimbarea starii programului, pinii la care sunt conectate canalele rosu si verde ale LED-ului isi schimba valoarea corespunzator.

Pentru comandarea irigarii, utilizatorul poate folosi telefonul pentru a putea transmite informatia prin Bluetooth sau, pentru a porni irigarea pe loc pentru o durata implicita, apasa butonul corespunzator.

Cand soseste momentul irigarii sau opririi acesteia, placuta Arduino comanda electrovana prin relee. Electrovana se deschide si se inchide cand primeste impulsuri electrice, de polaritati opuse. Cele doua LED-uri rosii au rol in vizualizarea impulsurilor.

Hardware Design

Lista de componente

  • Arduino UNO
  • Breadboard
  • Modul Bluetooth HC-05
  • Electrovana 9V
  • Baterie 9V
  • Conector baterie 9V
  • 2 Relee PCB M4-05H 5V 2 contacte
  • LED RGB
  • 2 LED-uri rosii
  • 2 Butoane
  • 6 Rezistori 1kΩ
  • 2 Condensatoare 1μF
  • Fire de legatura
  • Furtun

Schema electrica

Software Design

  • Limbaj de programare: C++
  • Mediu de dezvoltare si compilare: Arduino IDE

Pentru a retine timpii aferenti starilor programului folosesc variabilele globale: offset_minutes, waiting_minutes, working_minutes care sunt setate corespunzator in urma unei comenzi Bluetooth sau prin butoane.

Comunicarea Bluetooth

Utilizatorul poate trimite 3 tipuri de mesaje modulului Bluetooth:

  • “ajutor” - cere informatii despre formatul in care sa trimita o noua programare
  • “stop” - opreste irigarea si anuleaza programarea anterioara
  • programarea sub forma de mesaj de tipul ”<intarziere_pornire>-<timp_asteptare>-<timp_irigare>” in formatul ”[HH]H-[HH]H:[MM]M-[MM]M” (ex. 0-24:0-60 se traduce prin “in fiecare zi, la ora curenta, iriga cate o ora”)

Comenzile “ajutor” si “stop” sunt case insensitive. Placuta Arduino raspunde la mesajul primit in functie de tipul acestuia. In cazul programarii, se verifica corectitudinea formatului si a valorilor trimise. Periodicitatea (timp_asteptare) cu valoarea zero inseamna ca se doreste irigarea o singura data. Placuta comunica cu modulul Bluetooth prin USART.

Timer1

Pentru a tine evidenta timpului care trece, ma folosesc de Timer1 configurat in mod CTC, cu intreruperea aferenta activata si care are loc o data la o secunda. La fiecare intrare in intrerupere, se incrementeaza numarul de secunde care au trecut si eventual de minute. La trecerea unui minut, se verifica daca a trecut timpul asociat starii curente, caz in care se schimba starea programului si se opreste timer-ul daca programarea consta intr-o singura irigare.

Functii implementate

  • void switch_to_idle(), void switch_to_offset_waiting(), void switch_to_waiting(), void switch_to_working() - seteaza culoarea LED-ului RGB corespunzator starii noi, schimba starea interna a programului si reseteaza numarul de minute care au trecut (mai putin switch_to_waiting pentru ca asteptarea se face in paralel cu irigarea, altfel ar aparea decalaje)
  • ISR(TIMER1_COMPA_vect) - verifica timpul care a trecut si schimba starea daca este nevoie
  • void start_timer1() - face setup la timer, reseteaza timpul trecut si face trecerea in starea interna corespunzatoare
  • void stop_timer1() - opresete timer-ul si trece in starea idle
  • bool is_digit(char c) - verifica daca c este cifra
  • void receive_schedule() - verifica daca s-a primit un mesaj Bluetooth pe care il verifica, ii raspunde si, eventual, reseteaza timer-ul si timpii globali
  • void setup_button_interrupts() - activeaza intreruperile INT0 si INT1 pe front crescator
  • ISR(INT0_vect) - opreste timer-ul
  • ISR(INT1_vect) - reseteaza timpii globali si reporneste timer-ul

Rezultate Obţinute


Am obtinut on programator de irigare functional si usor de folosit.

Concluzii

M-am distrat lucrand la proiect si ma bucur ca am reusit sa fac un lucru util cu aplicabilitate in viata de zi cu zi. Mi-a placut experienta de a face un proiect palpabil, imbinand software-ul cu hardware-ul si pot spune ca a fost cel mai interesant proiect din facultate de pana acum. Partea mai dificila a fost rezolvarea “turbarii” placutei cauzata de o interferenta cu bobina interna a electrovanei. Am incercat diferite solutii, de la prelungirea firelor ei ca sa maresc distanta fata de placuta (pana la 2.5m), la o tentativa esuata de ecranare, in final mergand totul bine numai dupa adaugarea condensatoarelor care elimina problema arcului electric generat de deconectarea electrovanei de la baterie. Desi am trecut prin momente de panica in care nu stiam ce sa-i fac sa mearga, mi-a placut sa fac pe detectivul si sa rezolv problema. Concluzia: m-am distrat jucandu-ma cu placuta si parca as repeta experienta :)

Download

Jurnal

  • 18.05.2021 Testare modul Bluetooth
  • 23.05.2021 - 24.05.2021 Scriere cod si testarea cu LED-ul RGB
  • 27.05.2021 - 28.05.2021 Terminare cod si asamblarea componentelor hardware
  • 28.05.2021 Placuta “turbeaza” cand inchide electrovana, releele fac zgomote de mitraliera, panica multa
  • 30.05.2021 Adaugare condensatoare (pe releul de stop, atat s-a putut), tratament antirabic pentru Arduino
  • 31.05.2021 Update la cod

Bibliografie/Resurse

pm/prj2021/apredescu/programator_de_irigare_a_solarului.txt · Last modified: 2021/06/03 19:26 by stefania.damian
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0