Consider că era destul de banal să scriu nişte rânduri în care doar să arăt cum se citeşte un senzor de temperatura, sau cum se comanda un motor şi un led RGB. În această idee am ales ca temă principală pentru acest tutorial comanda prin internet folosind doar o plăcuţă de dezvoltare Arduino şi un calculator pe care este instalat un web server (Apache)

Necesar
-placă de dezvoltare Arduino Uno
-breadboard
-alimentator extern
-fire pentru conexiuni
-motor 5v
-termistor
-buzzer
-fotorezistenta
-senzor umiditate
-led RGB
-cameră web
-un calculator/laptop
Apache
Python
librăria pyserial

Senzor de temperatura

Pentru a putea citi temperatura cu ajutorul unui termistor şi a plăcii de dezvoltare Arduino va trebui să construim un circuit „Divizor de tensiune” (voltage divider). Vezi schema de mai jos, iar pentru mai multe detalii poţi citi şi:http://en.wikipedia.org/wiki/Voltage_divider

thermistor
Mai departe, pentru a putea calcula temperatura o să folosim ecuaţia Steinhart-Hart (http://en.wikipedia.org/wiki/Steinhart-Hart_equation) care zice că:


În afară de T parametrii acestei ecuaţii sunt cunoscuţi.
B – îl luăm din datasheet-ul thermistorlui
T0 – reprezintă temperatura nominală (25°C)
R0 – reprezintă rezistenţa măsurată la T0 (10kΩ)
R – se v-a calcula cu ajutorul circuitului descris mai sus conform cu formula de mai jos:


unde Vin=5v (1023) iar Vout se măsoară cu ajutorul portului A0.
R2-10kΩ conform cu circuitul de mai sus.

Descriu mai jos funcția din program care se ocupă de citirea temperaturii:

Senzor de umiditate

Eu am folosit un senzor de umiditate rezistiv. În cele ce urmează o să încerc să detaliez cât mai mult posibil modul de interfaţare a acestui senzor cu plăcuţa de dezvoltare Arduino.
Citirea umidităţii aerului se va face tot cu ajutorul unui divizor de tensiune, doar că de data aceasta divizorul de tensiune este puţin modificat. Pentru detalii vezi schema de mai jos.

humidity

Am legat senzorul în acest fel pentru a evita polarizarea acestuia. Frecvenţa de inversare a polarității este de 1Hz (pe Arduino un delay de aprox 500 microsecunde). Mai departe determinăm rezistenţa senzorului conform cu formula:


unde Vin=5v (1023) iar Vout se măsoară cu ajutorul portului A2.
R2-10kΩ conform cu circuitul de mai sus.

Ok. În momentul de faţă ştim rezistenţa senzorului de umiditate,dar cum transformăm această rezistenţă în umiditate? Simplu, conform cu datasheet-ul acestui senzor avem următorul tabel:

umidrez

Mai departe introducem acest tabel în program iar cu ajutorul funcţiei multiMap vom calcula valoarea umidității în funcție de valoarea citita pe portul A2.

Senzor de lumina

Citirea intensităţii luminoase este posibilă prin utilizarea unei rezistenţe care depinde de lumină, o foto-rezistență. Şi în acest caz pentru interfaţarea cu plăcuţa de dezvoltare Arduino folosim tot un divizor de tensiune.

LDR

În cazul nostru o să calculăm intensitatea luminoasă în procente, astfel:
-pentru o citire pe pinul A3 de 1023(valoarea maximă) considerăm intensitate de 100%
-la o citire care se aproprie de 0 intensitatea va fi, bineînțeles mult mai mică

Mai jos se găsește un mic exemplu de soft care citește intensitatea luminoasă.

Comanda motor

Nu îţi rocomand să alimentezi un motor de pe placa Arduino. Pentru a putea alimenta un motor de curent continu, precum cel de 6V, ai nevoie de o sursă externă de tensiune (Ex. baterie). În cazul circuitului nostru vom realiza un stabilizator de tensiune de la 12V la 5V. Acest lucru se realizeaza folosind stabilizatorul 7805 pe care legăm două condensatoare electrolitice conform cu circuitul de mai jos.

pyWEB1

Motorul este comanda cu ajutorul unui driver L293NE care suporta un curent de până la 1A. Cu ajutorul acestui driver putem regla turaţia motorului prin PWM cu ajutorul pinului 6 de pe placa de dezvoltare Arduino, iar sensul de rotaţie este dat de pini 4 şi 5.

Prezint în continuare funcţia care se ocupa de comanda motorului.

Buzzer

Buzer-ul v-a oferi o avertizare sonora asupra schimbării direcţiei de rotaţie a motorului şi asupra pornirii sau opririi acestuia. Legarea unui buzzer pe placa Arduino este foarte simplă. (-) buzer-ului se leagă la GND, iar (+) se leagă pe portul din care dorim să-l comandăm. Pentru program o să folosim funcţia sunet detaliată în continuare:

Led RGB

În cadrul acestui exemplu folosim un led RGB din kitul ROROID Start pentru a oferi o avertizare luminoasă asupra vitezei cu care rulează motorul. Astfel pentru o viteză mare ledul v-a fi roşu intens iar pentru o viteză mică verde intens. Modul de legare a unui led RGB pe placa Arduino l-am mai discutat şi în trecut, de aceea nu am să îl mai detaliez aici.
Funcţia care regleaza culoarea ledului în concordanţă cu viteza motorului:

Principiu de funcţionare

Principiul de funcţionare este foarte simplu, după cum se vede şi în imaginea de mai jos. În momentul în care un utilizator apasă butonul de pornit, această informaţie este trimisă prin internet către serverul WEB, care la rândul lui prin Python trimite informaţia mai departe către plăcuţa de dezvoltare Arduino.

g4157 (1)
Python şi comunicarea serială

Mulţumită lui Peter Kropf http://peterkropf.com/, am gasit o metoda foarte simplă de a comunica prin serial cu placa de dezvoltare Arduino. Protocolul folosit de Peter la pyCon2012 a fost unul dextrem de simplu:

255 CMD P1 P2

unde CMD reprezintă comanda ce se doreşte a fi executată, iar P1 şi P2 sunt parametrii acestei comenzi.

Bazat pe aceste informatii am modificat clasa commands.py adaptândo nevoilor mele, astfel:
-am definit tipurile de comenzi posibile

-am definit fiecare comanda în parte

De asemenea a mai fost nevoie să realizez doua programe în python care să folosească clasa de mai sus pentru a face efectiv legatura între Arduino şi Pagina WEB. Codul celor 2 programe se poate descărca din aceasta pagină în zona de download.

Pagina html

pyWEB_html
Pentru interfaţa HTML am folosit căteva scripturi Java, care m-au ajutat la citirea/trimiterea datelor pe portul serial. Spre exemplu pentru citire temperaturii, umiditatii şi a intensităţii luminoase am folosit urmatorul fragment de cod:

Download

-schiţa Arduino:pyWEB

-schema electrică:pyWEB_final
-python şi HTML:www

 

Iar la final un mic filmuleţ cu rezultatul aplicaţiei:

Spor la treaba!

 

Arduino legat la internet (cu ajutorul calculatorului)
Etichetat pe:        

8 gânduri despre „Arduino legat la internet (cu ajutorul calculatorului)

  • 17/01/2014 la 07:57
    Legătură permanentă

    Te intreb si aici cum ai realizat conectarea pe seriala 232 intre arduino si pc;daca poti sa dai detalii hardware.Conexiunea pe usb este numai pentru programarea microcontrolerului sau se poate face si achizitie pe seriala?

    Răspunde
  • 17/01/2014 la 08:08
    Legătură permanentă

    Conexiunea USB poate fi folosita atat pentru programare cat si pentru achizitie/trimitere de date. Arduino UNO are un microcontroler suplimentar care se ocupa de acest lucru. Arduino LEONARDO pe de alta parte are controler USB integrat in microcontroler.

    Răspunde
  • 13/03/2014 la 22:06
    Legătură permanentă

    buna seara , am o intrebare mai aveti toate codurile sursa ale aplicatiei , as dori sa o testez si dupa aceea sa incerc un upgrade. fisierul www. /cgi/(este gol)

    Răspunde
  • 01/04/2014 la 19:04
    Legătură permanentă

    Salut. Asi vrea mai multe detalii despre coectarea placii arduino la internet ceva explicat mai bine de exemplu atunci cand scrie ceva intr-un site sa scrie pe un lcd. daca ati putea sa imi explicati mai bine ar fii foarte bine (email dinozzo_weasel@yahoo.com)

    Multumesc anticipat

    Răspunde
  • 12/06/2014 la 07:24
    Legătură permanentă

    Buna ziua,am incercat sa rulez programul de la umiditate,dar apar erori

    sketch_jun12b.cpp: In function ‘float umiditate()’:
    sketch_jun12b.cpp:23:14: error: ‘CUI7’ was not declared in this scope
    sketch_jun12b.cpp:25:1: error: ‘h0_1’ was not declared in this scope
    sketch_jun12b.cpp:25:17: error: ‘sz_UMID’ was not declared in this scope
    sketch_jun12b.cpp:28:14: error: ‘CUI8’ was not declared in this scope
    sketch_jun12b.cpp:34:4: error: ‘REZISER’ was not declared in this scope
    sketch_jun12b.cpp:36:19: error: ‘in’ was not declared in this scope
    sketch_jun12b.cpp:36:23: error: ‘out’ was not declared in this scope

    Răspunde

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.