Nanotool - Roboti - București - Lucrari 2022 Nationala

Informatii generale

Descriere

Vremea este deseori instabilă și imprevizibilă. În plus, în multe locații nu se află stații meteo în apropiere, așa că prognoza pentru aceste zone nu este întocmai corectă. Multe acțiuni ale noastre depind de vreme, de la cum ne îmbrăcăm, până la udarea florilor. Cert este că trebuie să fim bine informați despre aceasta. Stația meteo Nanotool rezolvă aceste probleme.

Nanotool este o stație meteo ce are la bază un Raspberry Pi 4B. Aceasta are conectați mai mulți senzori ce monitorizează condițiile atmosferice, și dispune de un API ce facilitează comunicarea cu aceasta. Controlul stației este ușurat de aplicația pentru iPhone, iPad și Mac.

Pentru a o înțelege cât mai bine, vremea trebuie monitorizată. Stația monitorizează zilnic vremea (mai precis, viteza și direcția vântului, cantitatea de ploaie, temperatura, presiunea și umiditatea aerului) și înregistrează datele. Acestea pot fi vizualizate sub formă de grafic în orice moment, folosind aplicația stației.

Uneori este necesar un răspuns instant la acțiunea vremii, însă cand suntem la distantă de casă, nu putem realiza acțiuni precum pornitul / opritul unui furtun cu apă ce udă plantele, sau controlul jaluzelelor. Nanotool poate controla dispozitive externe automat, cu ajutorul a 4 relee și al API-ului ce ușurează configurarea acestor automatizări.

Tehnologii

Nanotool folosește un Raspberry Pi 4B (4GB RAM) cu Raspberry Pi OS Lite (Bullseye, 64-bit). La boot, aceasta rulează un script Python ce salvează zilnic datele înregistrate de senzori. Acesta conține și server-ul web API, care este folosit de aplicație pentru comunicarea cu stația meteo.

Caracteristici:

Built-in API
Nanotool are un API built-in scris cu ajutorul Flask (Python).
Acesta ușurează comunicarea cu stația meteo, dar și crearea unor accesorii ce folosesc acest API. API-ul trimite răspunsuri JSON la request-uri de tip GET / POST, sau fișiere CSV atunci când datele înregistrate de senzori din zilele precedente sunt descărcate.

iOS & Mac Catalyst App
Nanotool dispune de o aplicație realizată cu ajutorul SwiftUI. Aceasta foloseste API-ul pentru a comunica cu stația.
Aplicația afișează date live ale vremii, cât și un istoric pe zile. Acestea sunt dispuse sub formă de grafice.

Sarcini automatizate (“Automated Tasks”)
Sarcinile automatizate oferă un răspuns instant la acțiunea vremii. Când o anumită condiție este respectată pentru un anumit timp (valoarea înregistrată de un senzor atinge un anumit prag), atunci poate fi pornit / oprit unul dintre cele 4 relee controlate de Nanotool. Automatizările pot fi configurate cu ușurință prin API și aplicație. Astfel, Nanotool ușurează și facilitează automatizarea unor acțiuni precum udatul florilor, închiderea jaluzelelor, pornirea luminilor, sau pornirea unui sistem de încălzire / răcire.

Folosind aceste relee, se pot creea 2 tipuri de accesorii:

  • Simple - releele acționează pe post de întrerupător într-un circuit electric simplu
  • Inteligente - releele acționează pe post de întrerupător conectat la un microcontroller (de exemplu: Raspberry Pi Pico, Arduino, ESP, ATTINY85). În general, aceste accesorii pot realiza acțiuni mai complexe.

Pentru automatizări au fost alese relee în loc de tranzistori, deoarece conferă un plus de siguranță prin separarea circuitelor.
Pe lângă aceste accesorii controlate de relee, se pot crea altele care să folosească API-ul, verificând singure dacă datele înregistrate de senzori respectă o anumită condiție.

Senzori
Stația include mulți senzori ce permit monitorizarea vremii. Datele acestora sunt înregistrate zilnic într-un spreadsheet .csv, ce poate fi accesat prin API sub formă de JSON / descărcat.

Senzorii folosiți sunt:

  • Anemometru - măsoară viteza vântului folosind un întrerupător magnetic reed. La fiecare rotație, un magnet trece pe deasupra întrerupătorului, iar rotația este înregistrată de RPi.
  • Giruetă - măsoară direcția vântului
  • Pluviometru - măsoară cantitatea de apă provenită de la ploaie (l/m^2 = mm) într-un interval de timp dat. Acesta folosește tot un întrerupător magnetic reed.
  • BMP280 - măsoară temperatura și presiunea barometrică a aerului
  • DHT11 - măsoară umiditatea aerului
  • Raspberry Pi Camera Module v2 - folosind OpenCV, detectează prezența norilor pe cer sau venirea nopții

Senzorii custom-made (Anemometru, Giruetă și Pluviometru), cât și camera, trebuie calibrate pentru a oferi rezultate precise.

Internet, Conectivitate & Setări
Stația meteo Nanotool poate fi controlată prin conectarea la aceiași rețea de internet (Wi-Fi / Ethernet) a dispozitivelor. API-ul poate fi folosit pentru controlarea setărilor scriptului Python. Pe lângă API, există și alte modalități prin care setările interne ale sistemului de operare pot fi modificate:

  • folosind Raspberry Pi Imager la momentul instalării OS-ului pe cardul SD
  • prin controlul direct al plăcii folosind o tastatură și un display (placa poate fi scoasă din cutie cu ușurință pentru a o conecta la display și tastatură)
  • prin SSH

Design-ul Produsului & Sustenabilitate - Materiale reciclate
Stația este realizată cu materiale reciclate, provenite din obiecte precum becuri, jucării, ambalaje de alimente, hard disk-uri, electronice și electroncasnice uzate. Acestea puteau să ajungă într-un coș de gunoi, însă soarta lor a fost schimbată de Nanotool.

Design-ul Nanotool este unul modern, simplist și modular, bazat pe elemente transparente ce expun componentele mecanice ale senzorilor custom-made, și cele electronice ale unității centrale. Chiar dacă este în mare parte realizat cu materiale reciclate, Nanotool se ridică la standardele industriale, dovedind o rigiditate sporită și rezistență la factorii de mediu, având și o eficiență sporită din punct de vedere termic.

Display-ul LCD & Librăria CharPi
Toate valorile importante înregistrate de senzori sunt afișate pe display-ul Hitachi HD44780 cu backpack I²C de 80 de caractere. Acesta are rata de refresh adaptivă, informațiile fiind actualizate pe display doar atunci când este nevoie. Pentru comunicarea cu acesta, Nanotool folosește librăria CharPi, realizată tot de creatorul stației Nanotool.

I2C
Multe dintre componentele utilizate de Nanotool folosesc I2C pentru a comunica cu Raspberry Pi-ul, pentru a micșora numărul de pini GPIO necesari pentru conectarea acestora:

  • LCD 20x4 HD44780 - display de 80 caractere
  • BMP280 - senzor de temperatură și presiune
  • ADS1115 - convertor Analog la Digital (ADC), folosit la giruetă

Dependency-uri:

  1. Software pentru Raspberry Pi
    Software-ul ce rulează pe Raspberry Pi a fost realizat în Python 3.

Următoarele module non-native Python au fost folosite pentru software:

  • CharPi (librărie realizată de creatorul Nanotool) - folosit pentru comunicarea cu LCD-ul HD44780 prin I2C
  • Flask - folosit pentru crearea server-ului web API
  • waitress - folosit pentru host-ul server-ului web atunci când API-ul trebuie să ruleze cu setările de production (nu de development)
  • adafruit_dht - folosit pentru comunicarea cu senzorul DHT11
  • adafruit_ads1x15 - folosit pentru comunicarea cu convertorul analogic la digital (ADS1115)
  • adafruit_bmp280 - folosit pentru comunicarea cu senzorul BMP280
  • board, busio - dependency-uri pentru comunicarea cu anumiți senzori ce folosesc librăriile Adafruit CircuitPython
  • OpenCV - folosit pentru analiza imaginilor capturate de cameră
  • picamera2 - folosit pentru comunicarea cu Raspberry Pi Camera Module v2
  • RPi.GPIO - folosit pentru controlul pinilor GPIO
  • gpiozero - folosit pentru a citi temperatura CPU (sau se poate folosi modulul os astfel: os.popen(“vcgencmd measure_temp”).read())
  1. Aplicația iOS & Mac Catalyst
    Aplicația a fost realizată în întregime folosind limbajul Swift.
    Au fost folosite următoarele framework-uri native ale iOS SDK:
    • SwiftUI - folosit pentru UI
    • WidgetKit - folosit pentru crearea widget-urilor pentru Home Screen și Today View pe dispozitivele iOS.
    • Intents & IntentsUI - folosit pentru configurarea widget-urilor de pe Home Screen-ul device-urilor iOS.

Cerinte sistem

Aplicație:
iPhone / iPad: iOS / iPadOS 15.0 sau o versiune mai recentă Mac: macOS 12 Monterey sau o versiune mai recentă

Este necesară ultima versiune de Xcode 13 pe un Mac pentru build-ul aplicației și instalarea acesteia pe un dispozitiv. Codul trebuie semnat folosind Xcode / codesign. Astfel, trebuie selectat un development team în Signing & Capabilities editor. Este necesar un cont de Apple Developer (nu neapărat participant Apple Developer Program).

Conectarea prin SSH se poate realiza prin orice dispozitiv ce suportă acest lucru.

Realizatori

Cristian Dinca

  • Scoala: COLEGIUL NAȚIONAL DE INFORMATICĂ „TUDOR VIANU”
  • Clasa: 10
  • Judet: București
  • Oras: București, Sector 6

Screenshots