Am reluat testele cu statia meteo si ceas care prezinta datele pe un afisaj cu rezolutie de 32x8 leduri (compus din 4 afisaje 8x8 leduri rosii), contorlate de integrate MAX7219, de data asta am afisajele montate intr-o carcasa, iar ca placa de dezvoltare, am folosit un Arduino Mega, ca era disponibil. Pentru temperatura se foloseste un senzor DHT11, iar pentru temperatura un DS18B20.
Fata de articolul precedent, in care am afisat datele pe ecranul de monitorizare seriala, acum o sa afisez pe un LCD1602 (afisaj alfanumeric cu 16 coloane si 2 randuri). Deoarece, in ultima perioada, am conectat afisajul doar la pinii D2..D7, o sa mut comanda releului de la D7 la D9, cel de-al doilea ramanand pe D8. Schema de conectare devine:
Un sketch, netestat inca, ar fi de genul:
/* Photocell simple testing sketch. Connect one end of the photocell to 5V, the other end to Analog 0.Then connect one end of a 10K resistor from Analog 0 to groundFor more information see http://learn.adafruit.com/photocellsniq_ro adapted software program in 20.01.2014, see http://nicuflorica.blogspot.com/*/
#include <LiquidCrystal.h>
// use LiquidCrystal.h library for alphanumerical display 1602LiquidCrystal lcd(2,3,4,5,6,7);
/* ------------------- | LCD | Arduino | ------------------- LCD RS pin to digital pin 7 | RS | D7 | LCD Enable pin to digital pin 6 | E | D6 | LCD D4 pin to digital pin 5 | D4 | D5 | LCD D5 pin to digital pin 4 | D5 | D4 | LCD D6 pin to digital pin 3 | D6 | D3 | LCD D7 pin to digital pin 2 | D7 | D2 | LCD R/W pin to ground | R/W | GND | -------------------*/int photocellPin = 0; // the cell and 10K pulldown are connected to a0int photocellReading; // the analog reading from the analog resistor dividerint relayPin = 9; // first relay controlint relayPin2 = 8; // second relay controlvoidsetup(void) {
// We'll send debugging information via the Serial monitorSerial.begin(9600);
pinMode(relayPin, OUTPUT); // pin "relayPin" is output pinpinMode(relayPin2, OUTPUT); // pin "relayPin" is output pin
lcd.begin(16, 2); // set up the LCD's number of columns and rows:
lcd.clear(); // clear the screen
lcd.setCursor(0, 0); // put cursor at colon 0 and row 0
lcd.print("Fotorezistenta"); // print a text
lcd.setCursor(0, 1); // put cursor at colon 0 and row 1
lcd.print("comanda 2 relee"); // print a textdelay (2000);
lcd.clear(); // clear the screen
lcd.clear(); // clear the screen
lcd.setCursor(1, 0); // put cursor at colon 1 and row 0
lcd.print("Photoresistor"); // print a text
lcd.setCursor(0, 1); // put cursor at colon 0 and row 1
lcd.print("control 2 relay"); // print a textdelay (2000);
}
voidloop(void) {
digitalWrite(relayPin, HIGH); // first auxiliar light is offdigitalWrite(relayPin2, HIGH); // second auxiliar light is off
photocellReading = analogRead(photocellPin);
lcd.clear(); // clear the screenif (photocellReading >999)
{
lcd.setCursor(0, 0); // put cursor at colon 0 and row 0
}
elseif (photocellReading >99)
{
lcd.setCursor(1, 0); // put cursor at colon 1 and row 0
}
elseif (photocellReading >9)
{
lcd.setCursor(2, 0); // put cursor at colon 2 and row 0
}
else
{
lcd.setCursor(3, 0); // put cursor at colon 3 and row 0
}
lcd.print(photocellReading); // print a text
lcd.print(" lx");
Serial.print(photocellReading); // the raw analog readingSerial.print(" lux");
// We'll have a few threshholds, qualitatively determinedif (photocellReading < 20) {
Serial.println(" - Dark (intuneric)");
digitalWrite(relayPin, LOW); // first auxiliar light is ondigitalWrite(relayPin2, LOW); // second auxiliar light is onSerial.println("All lights are on (Toate luminile sunt aprinse).");
Serial.println("***********************************************");
lcd.print(" - Dark");
lcd.setCursor(2, 1); // put cursor at colon 0 and row 1
lcd.print("Lights are on");
} elseif (photocellReading < 200) {
Serial.println(" - Dim (intunecat)");
digitalWrite(relayPin, LOW); // first auxiliar light is ondigitalWrite(relayPin2, HIGH); // second auxiliar light is offSerial.println("First light are on (Un circuit de lumina e aprins).");
Serial.println("***********************************************");
lcd.print(" - Dim");
lcd.setCursor(0, 1); // put cursor at colon 0 and row 1
lcd.print("1st light are on");
} elseif (photocellReading < 500) {
Serial.println(" - Light (lumina normala)");
digitalWrite(relayPin, HIGH); // first auxiliar light is offdigitalWrite(relayPin2, HIGH); // second auxiliar light is offSerial.println("All lights are off (Toate luminile sunt stinse).");
Serial.println("***********************************************");
lcd.print(" - Light");
lcd.setCursor(0, 1); // put cursor at colon 0 and row 1
lcd.print("All lights off!");
} elseif (photocellReading < 800) {
Serial.println(" - Bright (lumina buna)");
digitalWrite(relayPin, HIGH); // first auxiliar light is offdigitalWrite(relayPin2, HIGH); // second auxiliar light is offSerial.println("All lights are off (Toate luminile sunt stinse).");
Serial.println("***********************************************");
lcd.print(" - Bright");
lcd.setCursor(0, 1); // put cursor at colon 0 and row 1
lcd.print("All lights off!");
} else {
Serial.println(" - Very bright (lumina puternica)");
digitalWrite(relayPin, HIGH); // first auxiliar light is offdigitalWrite(relayPin2, HIGH); // second auxiliar light is offSerial.println("All lights are off (Toate luminile sunt stinse).");
Serial.println("***********************************************");
lcd.print("-Dazzling");
lcd.setCursor(0, 1); // put cursor at colon 0 and row 1
lcd.print("All lights off!");
}
delay(1500);
}
Am reusit sa fac si o poza:
Dupa mai multe incercari,am reusit sa fac poze cu cele 4 cazuri: - lumina orbitoare (soare puternic):
- lumina normala:
- lumina slabuta, s-a aprins un set de lumini, pentru compensare:
- intuneric, s-au aprins ambele circuite de lumini, pentru a compensa lipsa lumnii naturale:
Filmuletul teste cu fotorezistenta, 2 relee si Arduino (II) realizat cu un aparat photo FujiFilm S5700 este de o calitate slabuta, datorita luminii foarte slabe din camera, dar care ajuta la intelegerea modului de comportare al montajului.
Fotorezistentele sunt componente pasive, care-si modifica valoarea (rezistenta) functie de intensitatea luminoasa (au rezistent amare la intuneric si mica la lumina puternica). In articolul Using a Photocell este prezentat un material foarte bun, din care m-am inspirat si eu. Dupa ce ma incercat primele 2 exemple de acolo, am modificat sketch-ul ca la un anumit prag de intuneric sa se cupleze un releu, iar la lumina foarte slaba (intuneric), inca unul. Circuitul de conectare al fotorezistentei, este foarte simplu, necesitand doar o rezistenta:
iar placa cu 2 relee are comanda la pinii D7, respectiv D8.
Logica de comanda este inversata, adica daca pe pinul de comanda este 0 logic (LOW), releul este actionat si daca este 1 logic (HIGH) este neconectat, cum am prezentat mai de mult in articolul Placa cu 4 relee pentru Arduino (.. si nu numai).
Montajul testat arata asa (mai contine si alte parti de circuit, nefolosite):
Pe ecran am obtinut:
Sketch-ul adaptat de mine este:
/* Photocell simple testing sketch. Connect one end of the photocell to 5V, the other end to Analog 0.Then connect one end of a 10K resistor from Analog 0 to groundFor more information see http://learn.adafruit.com/photocellsniq_ro adapted software program in 20.01.2014, see http://nicuflorica.blogspot.com/*/int photocellPin = 0; // the cell and 10K pulldown are connected to a0int photocellReading; // the analog reading from the analog resistor dividerint relayPin = 7; // first relay controlint relayPin2 = 8; // second relay controlvoidsetup(void) {
// We'll send debugging information via the Serial monitorSerial.begin(9600);
pinMode(relayPin, OUTPUT); // pin "relayPin" is output pinpinMode(relayPin2, OUTPUT); // pin "relayPin" is output pin
}
voidloop(void) {
digitalWrite(relayPin, HIGH); // first auxiliar light is offdigitalWrite(relayPin2, HIGH); // second auxiliar light is off
photocellReading = analogRead(photocellPin);
Serial.print(photocellReading); // the raw analog readingSerial.print(" lux");
// We'll have a few threshholds, qualitatively determinedif (photocellReading < 20) {
Serial.println(" - Dark (intuneric)");
digitalWrite(relayPin, LOW); // first auxiliar light is ondigitalWrite(relayPin2, LOW); // second auxiliar light is onSerial.println("All lights are on (Toate luminile sunt aprinse).");
Serial.println("***********************************************");
} elseif (photocellReading < 200) {
Serial.println(" - Dim (intunecat)");
digitalWrite(relayPin, LOW); // first auxiliar light is ondigitalWrite(relayPin2, HIGH); // second auxiliar light is offSerial.println("First light are on (Un circuit de lumina e aprins).");
Serial.println("***********************************************");
} elseif (photocellReading < 500) {
Serial.println(" - Light (lumina normala)");
digitalWrite(relayPin, HIGH); // first auxiliar light is offdigitalWrite(relayPin2, HIGH); // second auxiliar light is offSerial.println("All lights are off (Toate luminile sunt stinse).");
Serial.println("***********************************************");
} elseif (photocellReading < 800) {
Serial.println(" - Bright (lumina buna)");
digitalWrite(relayPin, HIGH); // first auxiliar light is offdigitalWrite(relayPin2, HIGH); // second auxiliar light is offSerial.println("All lights are off (Toate luminile sunt stinse).");
Serial.println("***********************************************");
} else {
Serial.println(" - Very bright (lumina puternica)");
digitalWrite(relayPin, HIGH); // first auxiliar light is offdigitalWrite(relayPin2, HIGH); // second auxiliar light is offSerial.println("All lights are off (Toate luminile sunt stinse).");
Serial.println("***********************************************");
}
delay(2500);
}