Se afișează postările cu eticheta senzor lumina. Afișați toate postările
Se afișează postările cu eticheta senzor lumina. Afișați toate postările

vineri, 21 ianuarie 2011

Senzor lumina


Puteti construi un sensor de lumina foarte usor. Aveti nevoie de cateva fire, o fotorezistenta si o rezistenta . Mai jos atasez o schema dupa care puteti construi senzorul.

VCC se conecteaza la pinul de 5V de la arduino, GND la pinul GND si V_OUT la un pin analog de pe placuta arduino.


COD:

int V_OUT = 0; // conectam la pinul analog 0

int LED =13; // conectam led la pinul 13(la arduino duemilanove este integrat in placuta)

void setup()

{

pinMode(LED, OUTPUT); //seteaza pinul 13 ca iesire

Serial.begin(9600);

}

void loop()

{

if (analogRead(V_OUT)<80)// daca valoarea citita la pinul analog 0 este mai mica de 80

digitalWrite(LED, HIGH); // aprinde ledu-ul

else //altfel

digitalWrite(LED, LOW); // stinge led-ul

Serial.print(analogRead(V_OUT));

}

Senzor de temperatura si lumina

Va voi prezenta cum puteti realiza un termometru digital cu mai multe functii.
Pentru asta folosesc:
  • sensor de temperature LM35Z
  • sensor de lumina( facut dintro fotorezistenta si un potentiometru)
  • LCD Serial 16x2
  • LED
  • Switch
  • Arduino Duemilanove
Pe LCD va fi afisata temperature in grade C pe primul rand si valoarea senzorului de lumina pe randul doi. Cand switch-ul este actionat, pe LCD va aparea temperature in grade C (pe linia de sus in stanga), temperature in grade F (pe randul de sus in dreapta), temperature maxima inregistrata( pe randul doi in stanga) si temperature minima inregistrata (pe randul doi dreapta).
Cand valoarea senzorului de lumina scade sub o anumita valoare se aprinde un LED.
Acest proiect poate fi imbunatatit, eu ofer un exemplu, de aici puteti ajunge oriunde; lasati imaginatia sa zboare:P .
(Afisarea datelor pe un ecran LCD Serial sper sa o intelegeti din explicatiile codului, daca nu lasati un comentariu si o sa postez afisarea datelor pe un LCD Serial cu Arduino Duemilanove)
Mai jos o sa scriu codul apoi voi posta un video.
COD:
/*
Este o aplicatie care foloseste un senzor de temperatura LM35Z, un senzor de lumina (alcatuit dintr-o fotorezistenta si un potentiometru), un intrerupator, un led si un LCDSerial. Aceasta aplicatie este deschisa imbunatatirii.
*/
#include // headeru-l interfetei serial pentru lcd
int tpin = 0; // declarare pin analog 2
int lpin = 1; // declarare pin analog 1
int tempc = 0, tempf = 0; // variabile pentru temperatura
int samples [ 8 ]; // variabila pentru a face o precizare mai buna a temperaturii
int maxi = - 100 , mini = 100; // temperatura maxima/minima
int i; // declarare i
int LED = 12; // declarare pin digital 12
boolean s = 4; // declarare pin digital 4
#define rxPin 2 // definire pin digital 2 pe Rx pentru a nu fi nevoit sa scot pinul cand upload-ez codlu
#define txPin 3 // definire pin digital 3 Tx --||--
SoftwareSerial LCD = SoftwareSerial(rxPin, txPin); // definire pinii Rx si Tx pentru interfata serial a lcd-ului
void setup ( ) // functia in care se stabileste ce rol are fiecare pin
{
pinMode(rxPin, INPUT); // stabileste pin-ul 2 ca intrare (nu este folosit, poate sa lipseasca din program si din aplicatie)
pinMode(txPin, OUTPUT); // stabileste pin-ul 3 ca iesire (este necesar afisarii lcd-ului
pinMode(s, INPUT); // stabileste pin-ul 4 ca intrare
pinMode(LED, OUTPUT); // stabileste pin-ul 12 ca iesire
LCD.begin(9600); // porneste comunicarea prin serial
}
void loop ( ) // corpul functiei
{
led();
for ( i = 0 ; i <= 7 ; i ++ ) // ia 8 valori de temperatura
{
samples [ i ] = (( 4.68 * analogRead( tpin ) * 70.6 ) / 1023.0); // temperatura = (voltajul senzorului * voltajul de intrare din senzor * valoarea echivalenta in milivolti a temperaturii) / 1023 de pasi
tempc = tempc + samples [ i ]; // variabila temperaturii tempc ia valoarea temperaturii calculata mai sus
delay ( 100 ); // asteapta 1 minut
}
tempc = tempc / 8.0; // se imparte la 8 pentru o precizie mai buna
tempf = ( tempc * 9 ) / 5 + 32; // transforma in fahrenheit
if ( tempc > maxi ) { maxi = tempc; } // seteaza temperatura maxima inregistrata
if ( tempc < mini) {mini= tempc;}
if (digitalRead(s)==LOW) // daca valoarea lui "s" este low
{
LCD.print("$CLEAR\n\r"); // sterge lcd-ul
LCD.print("$GO 1 1\n\r"); // muta cursorul pe randul 1 caracterul 1
LCD.print("$PRINT "); // afiseaza
LCD.print ( tempc ); // valoarea afisata
LCD.print("\n\r"); // incheie randul
LCD.print("$GO 1 4\n\r"); // muta cursorul pe randul 1 caracterul 4
LCD.print("$PRINT C \n\r"); // afiseaza C (grade celsius)
LCD.print("\n\r"); // incheie randul
LCD.print("$GO 1 8\n\r"); // muta cursorul pe randul 1 caracterul 8
LCD.print("$PRINT "); // afiseaza
LCD.print ( tempf ); // valoarea afisata
LCD.print("\n\r"); // incheie randul
LCD.print("$GO 1 12\n\r"); // muta cursorul pe randul 1 caracterul 12
LCD.print("$PRINT F \n\r"); // afiseaza F
LCD.print("\n\r"); // incheie randul
LCD.print("$GO 2 1\n\r"); // muta cursorul pe randul 2 caracterul 1
LCD.print("$PRINT "); // afiseaza maximul inregistrat in grade celsius
LCD.print ( maxi ); // afiseaza valoarea
LCD.print("\n\r"); // incheie randul
LCD.print("$GO 2 4\n\r"); // muta cursorul pe randul 2 caracterul 4
LCD.print("$PRINT MAX \n\r"); // afiseaza MAX
LCD.print("\n\r"); // incheie randul
LCD.print("$GO 2 8\n\r");
LCD.print("$PRINT ");
LCD.print ( mini );
LCD.print("\n\r");
LCD.print("$GO 2 12\n\r");
LCD.print("$PRINT MIN \n\r");
LCD.print("\n\r");
delay ( 100 ); // intraziera pentru corpul functiei
}
else // daca valoarea lui "s" este high
{
LCD.print("$CLEAR\n\r");
LCD.print("$GO 1 1\n\r");
LCD.print("$PRINT ");
LCD.print ( tempc );
LCD.print("\n\r");
LCD.print("$GO 1 4\n\r");
LCD.print("$PRINT C \n\r");
LCD.print("\n\r");
LCD.print("$GO 2 1\n\r"); // muta cursorul pe randul 2 caracterul 1
LCD.print("$PRINT "); // afiseaza
LCD.print (analogRead(lpin) ); // valoarea citita la pinul analog 1
LCD.print("\n\r");
LCD.print("$GO 2 4\n\r");
LCD.print("$PRINT Candeli \n\r");
LCD.print("\n\r");
delay(100); // intarzie pentru corpul functiei
}
}
void led()
{
if (analogRead(lpin)<80) // daca valoarea citita la pinul analog 1 este mai mica de 80
digitalWrite(LED, HIGH); // aprinde ledu-ul
else //altfel
digitalWrite(LED, LOW); // stinge led-ul
}