Hemos usado el Arduino Basic Shield de Kiwibot y la Librería Matriz de LEDs para realizar una aplicación que muestra varios sensores por la Matriz de LEDs.
Tiene tres funciones:
- Termómetro: Con el sensor de temperatura exacta (LM35) la matriz de led representa la temperatura que hace.
- Gráfica de luz: Gracias al sensor de luz (LDR), se muestra una gráfica en la matriz de leds, según la luz que capte el sensor.
- Sensor de distancia: Al presionar el pulsador derecho capta la distancia entre el sensor y el objeto más cercano gracias al sensor de distancia (HC-SR04), y lo refleja en la matriz de leds.
Si el valor captado da más de 99, la matriz de leds representa un signo + y si capta, 0 representa una E (Error).
Para cambiar de una función a otra, se presiona el botón izquierdo, y antes de empezar, se imprimirá una letra según la función que sea: T temperatura, L luz y D distancia.
/* SENSORES Tiene tres funciones: -Sensor de distancia -sensor de temperatura -Sensor de luz (grafica) Desarrollado por Carlos Pumar Marzo de 2015 */ #include <Matriz.h> Matriz matriz(6, 9, 5); int i=0; int contador = 1; //temperatura: //Variables para leer el Sensor de temperatura int temperaturaPin=A1; long temperaturaValue=0; long temperatura=0; //Variables para sustituir delay long tiempoInicial = 0; long tiempoActual = 0; //luz: int sensorLDR = A0; int sensorValue = 0; //distancia: //TIMER volatile uint8_t columna=0; volatile int a = 0; int buzzerPin = 10; //Variables para sustituir delay long previousMillis = 0; long currentMillis = 0; long interval = 1000; //Variables necesarias para imprimir en la matriz int numero=0; //Variables relacionadas al botón int estadoBoton=0; int botonPin = 3; long TInicial = 0; long TActual = 0; int onOff=1; //Variables para sustituir delay volatile long tiempo; //Variables para leer del LDR int ldrPin=A0; int ldrValue=0; //Variables para leer el Sensor de distancia HC-SN04 volatile int trigPin=11; volatile int echoPin=12; //Variables para sustituir delay long tiempoI = 0; long tiempoA = 0; void setup() { pinMode(botonPin, INPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(buzzerPin, OUTPUT); attachInterrupt(0, suma, FALLING); } void temp() { tiempoA = millis(); //se sustituye un delay de 500 if (tiempoA - tiempoI > 500) { tiempoI = tiempoA; //lectura de la temperatura temperaturaValue = analogRead(temperaturaPin); //formula de la temperatura temperatura = (temperaturaValue * 5 * 100) / 1024; } matriz.printNumber(temperatura); } void luz() { sensorValue = analogRead (sensorLDR); //Serial.println (sensorValue); //delay(500); //segun el valor del senor se representara una grafica if (sensorValue < 250) { matriz.cleanMatrix(); } if (sensorValue >= 250 && sensorValue < 331) { matriz.printPixel(5, 1); } if (sensorValue >= 331 && sensorValue < 412) { matriz.printPixel(5, 1); matriz.printPixel(5, 2); } if (sensorValue >= 412 && sensorValue < 494) { matriz.printLine(5, 1, 5, 3); matriz.printLine(5, 3, 4, 3); } if (sensorValue >= 494 && sensorValue < 575) { matriz.printLine(5, 1, 5, 4); matriz.printLine(4, 3, 4, 4); matriz.printPixel(3, 4); } if (sensorValue >= 575 && sensorValue < 656) { matriz.printLine(5, 1, 5, 5); matriz.printLine(4, 3, 4, 5); matriz.printLine(3, 4, 3, 5); matriz.printPixel(2, 5); } if (sensorValue >= 656 && sensorValue < 738) { matriz.printLine(5, 1, 5, 6); matriz.printLine(4, 3, 4, 6); matriz.printLine(3, 4, 3, 6); matriz.printLine(2, 5, 2, 6); } if (sensorValue > 738) { matriz.printLine(5, 1, 5, 7); matriz.printLine(4, 3, 4, 7); matriz.printLine(3, 4, 3, 7); matriz.printLine(2, 5, 2, 7); matriz.printPixel(1, 7); } } void dist() { estadoBoton = digitalRead(botonPin); if (estadoBoton == HIGH) { a = estadoBoton; } if (a == HIGH) { for (int x; x < 128; x++) { int x1 = x / 16; matriz.printLine(3, 1, 3, x1); } for (int i = 0; i < 5; i++) { digitalWrite(buzzerPin, HIGH); delayMicroseconds(956); digitalWrite(buzzerPin, LOW); delayMicroseconds(956); } digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); delayMicroseconds(10); tiempo = pulseIn(echoPin, HIGH); numero = int(0.017 * tiempo); a = LOW; } while (estadoBoton == HIGH) { estadoBoton = digitalRead(botonPin); } if (numero > 0 && numero <= 99) { matriz.printNumber(numero); //si el numero esta entre 99 y 2 se imprime numero } //si el numero si es igual a 0 se imprime una E if (numero == 0) { matriz.printLine (5, 4, 5, 5); matriz.printLine (3, 4, 3, 5); matriz.printLine (1, 4, 1, 5); matriz.printLine (1, 3, 5, 3); matriz.printPixel (5, 3); } //si el numero mayor a 99 se imprime un + if (numero > 99) { matriz.printLine (3, 2, 3, 6); matriz.printLine (1, 4, 5, 4); matriz.printPixel (5, 4); } } void loop() { while (contador == 1) { //Mientras que el contador sea igual a 1, primero crea una T y luego hace la función tiempo for (i; i<250;i++){ matriz.printLine (1, 2, 1, 6); matriz.printLine (2, 4, 5, 4); matriz.printPixel (2,4); matriz.printPixel (3,4); matriz.printPixel (4,4); matriz.printPixel (5,4); delay(1); } temp(); } while (contador == 2) { //Mientras que el contador sea igual a 2, primero crea una L y luego hace la función luz for (i; i<500;i++){ matriz.printLine (1, 3, 5, 3); matriz.printLine (5, 4, 5, 5); matriz.printPixel (5,3); delay(1); } luz(); } while (contador == 3) { //Mientras que el contador sea igual a 3, primero crea una D y luego hace la función distancia for (i; i<250;i++){ matriz.printLine (1, 3, 1, 5); matriz.printLine (5, 3, 5, 5); matriz.printPixel (2,3); matriz.printPixel (3,3); matriz.printPixel (4,3); matriz.printPixel (2,6); matriz.printPixel (3,6); matriz.printPixel (4,6); delay(1); } dist(); } } //Interrupción void suma(){ contador ++; if (contador > 3) { contador = 1; } i=0; delay(200); }