KULTUROSFERA

Programăm funcționalitățile

Prototipul asamblat săptămâna trecută a trecut testul la rece: nimic nu joacă, nimic nu freacă, firele au drum curat. Dar deocamdată e un obiect care doarme. Azi îi scrieți creierul — iar Python-ul pe care l-ai învățat în clasa a VIII-a se întâlnește, în sfârșit, cu un obiect pe care îl poți uda, aprinde sau hrăni.

La finalul lecției vei ști să traduci comportamentul dorit al obiectului în program Python, să testezi codul în simulator înainte de prototip și să faci două plăci să comunice prin radio.

De la comportament la program

Nu începe cu codul. Începe cu o frază: ce trebuie să facă obiectul, spusă în forma „dacă..., atunci..., altfel...". Pentru sistemul de udat:

Dacă solul e mai uscat decât pragul stabilit, atunci pornește pompa 5 secunde, altfel nu face nimic. Verifică din nou peste un minut.

Fraza asta e deja algoritmul — condiție, acțiune, repetare, tot ce ai învățat despre structuri de control, doar că de data asta „acțiunea" mișcă apă adevărată. Fiecare echipă își scrie comportamentul complet în 3–5 astfel de fraze înainte să deschidă editorul. Cine nu-l poate spune în cuvinte nu-l poate spune nici în Python.

Aceeași gimnastică, la celelalte proiecte: „dacă senzorul de lumină citește sub prag ȘI senzorul de mișcare detectează pe cineva, atunci aprinde lampa 60 de secunde" — lampa de la subsol; „dacă au trecut 8 ore de la ultima dozare, atunci rotește dozatorul un sfert de tură" — hrănitorul. Observă că a doua frază nu are senzor deloc: condiția ei e timpul. Comportamentul dictează componentele, nu invers.

Codul pas cu pas

Schema legăturilor, ca să știm despre ce vorbește codul:

micro
P0P1senzor deumiditate a soluluisemnal analogicreleucomandăpompă 5 Valimentare comutatăReleul e întrerupătorul comandat de cod — pompa nu se leagă niciodată direct la placă

Iar programul, în MicroPython, construit exact pe fraza-comportament:

from microbit import *

PRAG = 500          # sub această valoare, solul e considerat uscat
DURATA_UDARE = 5000 # milisecunde de pompare
PAUZA = 60000       # o verificare pe minut

while True:
    umiditate = pin0.read_analog()   # 0 = complet uscat ... 1023 = foarte umed
    if umiditate < PRAG:
        pin1.write_digital(1)        # releul pornește pompa
        sleep(DURATA_UDARE)
        pin1.write_digital(0)        # oprire — obligatoriu!
    sleep(PAUZA)

Trei lucruri de observat, pentru orice proiect, nu doar pentru udat:

  • Constantele au nume, cu majuscule, la începutul programului. Când profesorul de biologie vă spune că mușcatele vor mai multă apă, schimbați DURATA_UDARE într-un singur loc, nu vânați cifre prin cod.
  • Orice pornire are o oprire. Linia pin1.write_digital(0) nu e opțională — fără ea, prima udare devine inundație. La lampa cu senzor, la hrănitor, la orice: scrie oprirea în același moment în care scrii pornirea.
  • PRAG nu se ghicește, se măsoară. Înfige senzorul în pământ uscat și citește valoarea pe ecranul plăcii, apoi în pământ proaspăt udat. Pragul bun e între cele două citiri. Asta se numește calibrare — și e diferența dintre un senzor și un ornament.

Și de ce releu, de fapt? Pentru că placa micro

scoate pe pin un semnal firav, de câțiva miliamperi — suficient să aprindă un LED, mult prea puțin pentru motorul pompei. Releul e un întrerupător comandat: semnalul mic al plăcii îi spune când să închidă circuitul mare al pompei, alimentat separat de la acumulator. Cele două circuite nu se ating — de aceea pompa nu se leagă niciodată direct la placă, oricât de tentant arată firele.

Încă o regulă de igienă, moștenită din toate modulele de programare: codul echipei stă pe contul echipei, nu pe telefonul cuiva, iar fiecare versiune care funcționează se salvează cu dată în nume — udare-v3-19mai.py. Când versiunea de azi o ia razna, vă întoarceți la cea de ieri în zece secunde, în loc să reconstruiți din memorie.

Două obiecte care vorbesc

Unele proiecte au nevoie de o pereche de plăci: senzorul e afară, la obiect, iar în clasă un panou arată starea. Plăcile micro

comunică prin radio — și aici intră tot ce știi despre rețele.

Placa de la obiect transmite:

from microbit import *
import radio

radio.config(group=7)   # canalul echipei noastre
radio.on()

while True:
    umiditate = pin0.read_analog()
    radio.send("picatura:" + str(umiditate))
    sleep(60000)

Placa din clasă recepționează:

from microbit import *
import radio

radio.config(group=7)   # ACELAȘI grup, altfel nu se aud
radio.on()

while True:
    mesaj = radio.receive()
    if mesaj is not None and mesaj.startswith("picatura:"):
        valoare = int(mesaj.split(":")[1])
        if valoare < 500:
            display.show("U")   # uscat — se udă în curând
        else:
            display.show("O")   # ok
    sleep(200)

Mai observă prefixul picatura: din mesaj. Chiar și pe grupul vostru, mesajul își spune expeditorul — un mini-protocol de doar câteva caractere. Receptorul verifică prefixul înainte să creadă conținutul, exact cum un browser nu acceptă orice pachet care bate la ușă.

Testează codul înainte de prototip

Nimeni nu încearcă un cod nou direct pe pompa de lângă electronica voastră proaspăt uscată. Scara de testare, treaptă cu treaptă:

  1. Simulatorul — editorul de MicroPython din browser are un micro
    virtual: tragi de valoarea pinului analogic și vezi dacă logica reacționează la prag. Aici se prind greșelile de gândire, gratis.
  2. Placa reală, sarcină falsă — în locul releului cu pompă, un LED pe pinul 1. LED aprins 5 secunde = pompă pornită 5 secunde. Aici se prind greșelile de conectare.
  3. Sarcina reală, condiții controlate — releu, pompă, dar rezervorul deasupra unui lighean, nu deasupra jardinierei. Abia acum curge apă.

Exersează

  1. Scrieți comportamentul complet al obiectului vostru în fraze „dacă..., atunci..., altfel..." — toate funcționalitățile, inclusiv ce face obiectul când nu face nimic.
  2. Implementați funcționalitatea principală în MicroPython, cu constante numite la început și cu oprirea scrisă lângă fiecare pornire. Treceți codul prin toate cele trei trepte de testare și notați în jurnal data trecerii fiecărei trepte.
  3. Calibrați senzorul vostru (umiditate, lumină, distanță — ce are proiectul): notați în portofoliu valorile măsurate în cele două situații extreme și pragul ales între ele.
  4. Echipele cu două plăci: puneți în funcțiune legătura radio pe grupul echipei, cu prefix de expeditor în mesaj. Celelalte echipe: adăugați pe afișajul plăcii un semn distinct pentru fiecare stare a obiectului.
  5. Provocare. Adăugați obiectului un jurnal propriu: la fiecare acțiune (udare, aprindere, dozare), programul afișează sau transmite prin radio un contor. Câte udări au fost azi? Datele acestea, culese o săptămână, devin argumentul-cifră de la revista finală: „obiectul a economisit X litri față de udarea zilnică cu stropitoarea".

Verifică-te

Activitate

Se încarcă activitatea…

Activitate

Se încarcă activitatea…

Activitate

Se încarcă activitatea…