Saltar la navegación

Sensor de luz y Tiras de Leds

Información

Creación de un dispositivo que mediante luz cambie los colores que ofrece una tira de leds.
Partimos de la base de tener una tira de leds conectadda con nuestro Arduino y con un sensor de luz, podéis ver el esquema para los detalles.
Una vez que este en marxa y conforme aumentemos la luz que recibe el sensor, las tiras de luz cambiaran el color que ofrecen.
Podemos jugar con la cantidad de colores a mostrar, los niveles de sensibilidad (tramos).
Para este ejemplo vamos a necesitar una resistencia de 10Kohms, un sensor de luz, un Arduino y una tira de leds.

Componentes

Resistencia: link
resitencias

Pantalla: link
LCD

Sensor de luz: link
LCD

Video ejemplo

Esquema Fritzing

sensor luz y tira de leds

Código básico

//sacosta.org
//canvia el color dels neopíxels en funció de la llum que arriba al fotosensor
//Connexions d'LCD per I2C
//SDA a A4 d'arduino uno i arduino nano
//SCL a A5 d'arduino uno i arduino nano
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//Crear l'objecte
LiquidCrystal_I2C lcd(0x27,16,2);

//nivells de llum al sensor(0-1023)
int nivell_0=0;
int nivell_1=10;
int nivell_2=200;
int nivell_3=500;
int nivell_4=800;

#include <Adafruit_NeoPixel.h>;
int NUMPIXELS=30; // Nombre de píxels de la tira
int PIN=6; //IMPORTANT arduino 6 a input Neopixel
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
// initialize serial communication at 9600 bits per second:
pixels.begin();
Serial.begin(9600);
lcd.init();
//Encendre la llum de fons
lcd.backlight();

// Primer fixam la posició del cursor i després escrivim
lcd.clear();
lcd.setCursor(3, 0); //Columna 3 (és la quarta 0, 1, 2 ,3...) fila 0 (és la primera 0 i 1)
lcd.print("PHOTORESISTOR");// hi ha un màxim de 16 caràcters
lcd.setCursor(3, 1);
lcd.print("SACOSTA.ORG");
delay(2500);
}

void loop() {
// reads the input on analog pin A0 (value between 0 and 1023)
int value = analogRead(A0);

Serial.print("lectura analògica = ");
Serial.print(value); //escriu al monitor serie la lectura

// Aplicam els nivells definits per les variables nivell_0,1,2,3,4
if (value>= nivell_0 && value < nivell_1) {
Serial.println(" - Molt Fosc");
for (int i=0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(0, 0, 0));
pixels.show();
}
}
else if (value>= nivell_1 && value < nivell_2) {
Serial.println(" - Fosc");
for (int i=0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(255, 0, 0));
pixels.show();
}
lcd.clear();
lcd.setCursor(1, 0); //Columna 3 (és la quarta 0, 1, 2 ,3...) fila 0 (és la primera 0 i 1)
lcd.print("FOSC");// hi ha un màxim de 16 caràcters
lcd.setCursor(1, 1);
lcd.print("Lectura= ");
lcd.setCursor(11, 1);
lcd.print(value);
} else if (value>= nivell_2 && value < nivell_3) {
Serial.println(" - llum suau");
for (int i=0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(0, 255, 0));
pixels.show();
}
lcd.clear();
lcd.setCursor(1, 0); //Columna 3 (és la quarta 0, 1, 2 ,3...) fila 0 (és la primera 0 i 1)
lcd.print("LLUM SUAU");// hi ha un màxim de 16 caràcters
lcd.setCursor(1, 1);
lcd.print("Lectura= ");
lcd.setCursor(11, 1);
lcd.print(value);
} else if (value>= nivell_3 && value < nivell_4) {
Serial.println(" - llum normal");
for (int i=0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(0, 0, 255));
pixels.show();
}
lcd.clear();
lcd.setCursor(1, 0); //Columna 3 (és la quarta 0, 1, 2 ,3...) fila 0 (és la primera 0 i 1)
lcd.print("LLUM NORMAL");// hi ha un màxim de 16 caràcters
lcd.setCursor(1, 1);
lcd.print("Lectura= ");
lcd.setCursor(11, 1);
lcd.print(value);
} else {
Serial.println(" - llum forta");
for (int i=0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(255, 255, 0));
pixels.show();
}
lcd.clear();
lcd.setCursor(1, 0); //Columna 3 (és la quarta 0, 1, 2 ,3...) fila 0 (és la primera 0 i 1)
lcd.print("LLUM FORTA");// hi ha un màxim de 16 caràcters
lcd.setCursor(1, 1);
lcd.print("Lectura= ");
lcd.setCursor(11, 1);
lcd.print(value);

} else if (value>= nivell_2 && value < nivell_3) {
Serial.println(" - llum suau");
for (int i=0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(0, 255, 0));
pixels.show();
}
lcd.clear();
lcd.setCursor(1, 0); //Columna 3 (és la quarta 0, 1, 2 ,3...) fila 0 (és la primera 0 i 1)
lcd.print("LLUM SUAU");// hi ha un màxim de 16 caràcters
lcd.setCursor(1, 1);
lcd.print("Lectura= ");
lcd.setCursor(11, 1);
lcd.print(value);

delay(500);
}