Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* TITULO: Sensor de parking con JSN-SR04T y display de 4 dígitos TM1637 (librería NewPing.h)
- AUTOR:
- MARIANO DEL CAMPO GARCÍA (@2018) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
- - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
- - TWITTER: https://twitter.com/MarianoCampoGa
- - CORREO: [email protected]
- DESCRIPCIÓN DEL PROGRAMA
- Este programa es capaz de activar un "Zumbador" cuando el objeto se encuentra a una distancia inferior o
- igual a la distancia configurada dentro de la variable "distancia_Alarma". Cuando la distancia supere dicho
- valor (distancia_Alarma), el zumbador permanecerá desactivado.
- El sistema está dotado de un pulsador y de un LED indicador para controlar el modo parking, es decir, que la
- funcionalidad del modo parking se active únicamente cuando nosotros lo necesitemos, además de encenderse un LED
- indicador de modo.
- Además, se incluye un display de 4 dígitos y 7 segmentos con controlador TM1637 que nos va a mostrar la distancia en
- centímetros cuando el modo parking está activado y en caso contrario nos muestra "----" a través del display.
- ESQUEMA DE CONEXION
- +-----+
- +----[PWR]-------------------| USB |--+
- | +-----+ |
- | GND/RST2 [ ][ ] |
- | MOSI2/SCK2 [ ][ ] A5/SCL[ ] |
- | 5V/MISO2 [ ][ ] A4/SDA[ ] |
- | AREF[ ] |
- | GND[ ] |
- | [ ]N/C SCK/13[ ] |
- | [ ]IOREF MISO/12[ ] | Pin "DIO" del display de 4 dígitos y 7 segmentos
- | [ ]RST MOSI/11[ ]~| Pin "CLK" del display de 4 dígitos y 7 segmentos
- | [ ]3V3 +---+ 10[ ]~|
- | [ ]5v -| A |- 9[ ]~| ECHO
- | [ ]GND -| R |- 8[ ] | TRIG
- | [ ]GND -| D |- |
- | [ ]Vin -| U |- 7[ ] | ZUMBADOR(+)
- | -| I |- 6[ ]~| LED(+)
- | [ ]A0 -| N |- 5[ ]~| PA
- | [ ]A1 -| O |- 4[ ] |
- | [ ]A2 +---+ INT1/3[ ]~|
- | [ ]A3 INT0/2[ ] |
- | [ ]A4/SDA RST SCK MISO TX>1[ ] |
- | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] |
- | [ ] [ ] [ ] |
- | UNO_R3 GND MOSI 5V ____________/
- \_______________________/
- NOTAS:
- - Sensor ultrasónico impermeable JSN-SR04T:
- Además de las conexiones TRIG y ECHO que van directamente al Arduino, necesitamos alimentarlo también
- en sus terminales VCC (+5V) y GND (masa) a través de nuestro Arduino.
- - El ZUMBADOR tiene dos terminales, ZUMBADOR(+) que es el más largo y el que va conectado al pin digital
- correspondiente de arduino, y ZUMBADOR(-) que va conectado directamente a GND.
- - Cátodo(-) del LED(-) a GND a través de una resistencia de 220 ohms.
- - Los pulsadores suelen tener dos pines, que vamos a denominar PA y PB (si es de 4 sólo usamos 2 de ellos)
- - Conexión PULL_UP del pulsador: Se utiliza una resistencia interna del Arduino como resistencia PULL_UP
- por lo que no es necesario añadir más componentes al pulsador para que funcione correctamente.
- - PB conectado a GND.
- - PA conectado al pin digital correspondiente de Arduino.
- - Alimentación del display de 4 dígitos y 7 segmentos: Directamente conectada a +5V y GND de Arduino
- */
- #include <NewPing.h> // Librería necesaria para trabajar con el sensor ultrasónico impermeable JSN-SR04T.
- #include "TM1637.h" // Librería necesaria para el display de 4 dígitos
- #define CLK 11 // Pin CLK
- #define DIO 12 // Pin DIO
- #define TRIGGER_PIN 8 // Pin digital para el pin TRIG del sensor ultrasónico impermeable JSN-SR04T.
- #define ECHO_PIN 9 // Pin digital para el pin ECHO del sensor ultrasónico impermeable JSN-SR04T.
- #define MAX_DISTANCE 200 // Variable que almacena la máxima distancia a medir con el sensor ultrasónico impermeable JSN-SR04T (mide entre 25-450 cm)
- const int ZUMBADOR = 7; // Pin digital para el ZUMBADOR
- const int LED = 6; // Pin digital para el LED
- const int PULSADOR = 5; // Pin digital para el PULSADOR
- const int tiempoAntirrebote = 10; // Variable que almacena el tiempo antirrebote para los pulsadores de control de la velocidad
- // Variables para controlar el funcionamiento del sistema
- int distancia = 0;
- int distancia_Alarma = 30; // Distancia límite para la Alarma en centímetros
- byte modo_parking = 0;
- // Declaración de los estados internos de los pulsadores que controlan la velocidad de giro del motor en rpm
- int estadoPulsador;
- int estadoPulsadorAnterior = 1;
- // Declaración del objeto para el sensor ultrasónico impermeable JSN-SR04T
- NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
- // Declaración del objeto para el display de 4 dígitos
- TM1637 Display1(CLK,DIO);
- // Matriz de letras que se van a mostrar inicialmente
- int8_t vacio[4] = {0x10,0x10,0x10,0x10}; // Se muestra el símbolo "-" pero con 0x13 se muestra " " (vacío)
- void setup()
- {
- pinMode(ZUMBADOR, OUTPUT); // Pin digital 7 como SALIDA
- pinMode(LED, OUTPUT); // Pin digital 6 como SALIDA
- pinMode(PULSADOR, INPUT_PULLUP); // Pin digital 5 como ENTRADA PULLUP
- digitalWrite(ZUMBADOR, LOW); // Inicialmente el ZUMBADOR se encuentra desactivado
- digitalWrite(LED, LOW); // Inicialmente el LED se encuentra desactivado
- Display1.init(); // Inicializa display de 4 dígitos
- Display1.set(3); // Brillo, 0 (mínimo) a 7 (máximo)
- Display1.point(POINT_OFF); // Apaga dos puntos, POINT_ON para encenderlos
- // Vaciamos todos los dígitos del display
- Display1.display(vacio);
- }
- void loop()
- {
- // Leemos el estado del pulsador del modo parking
- estadoPulsador = digitalRead(PULSADOR);
- // Si hay un cambio en el estado del pulsador del modo parking
- if(estadoPulsador != estadoPulsadorAnterior)
- {
- // y si se ha eliminado ya el rebote del pulsador del modo parking
- if(antirrebote(PULSADOR))
- {
- // Se suma una unidad al modo_parking
- modo_parking++;
- // Si el modo_parking es igual a 2, pasa a valer 0
- if(modo_parking == 2) modo_parking = 0;
- }
- // Actualizamos el estado anterior del pulsador del modo parking
- estadoPulsadorAnterior = estadoPulsador;
- }
- // Si se ha activado el modo parking
- if(modo_parking == 1)
- {
- digitalWrite(LED, HIGH); // Se activa el LED indicador del modo parking
- // Leemos y registramos la distancia en centímetros que está detectando el sensor ultrasónico impermeable JSN-SR04T.
- distancia = sonar.ping_cm();
- delay(50); // Tiempo mínimo en milisegundos para la lectura del sensor ultrasónico impermeable JSN-SR04T.
- if(distancia <= distancia_Alarma) // Si la distancia es inferior o igual a la distancia de alarma configurada
- {
- digitalWrite(ZUMBADOR, HIGH); // Se activa el ZUMBADOR
- }
- else // Si la distancia es superior a la distancia de alarma configurada
- {
- digitalWrite(ZUMBADOR, LOW); // Se desactiva el ZUMBADOR
- }
- // Llamada a la función que muestra la distancia a través del display
- encender_display(distancia);
- }
- // Si no se ha activado el modo parking
- if(modo_parking == 0)
- {
- digitalWrite(LED, LOW); // Se desactiva el LED indicador del modo parking
- digitalWrite(ZUMBADOR, LOW); // Se desactiva el ZUMBADOR
- // Vaciamos todos los dígitos del display
- Display1.display(vacio);
- }
- }
- // Función antirrebote
- boolean antirrebote(int pin)
- {
- int contador = 0;
- boolean estado;
- boolean estadoAnterior;
- do
- {
- estado = digitalRead(pin);
- if(estado != estadoAnterior)
- {
- contador = 0;
- estadoAnterior = estado;
- }
- else
- {
- contador = contador+ 1;
- }
- delay(1);
- } while(contador < tiempoAntirrebote);
- return estado;
- }
- // Función que muestra el número de pasos a través del display
- void encender_display(int cm)
- {
- if(cm <= 99)
- {
- Display1.display(3, cm/1 % 10); // Dígito 3
- Display1.display(2, cm/10 % 10); // Dígito 2
- Display1.display(1, 0x13); // Dígito 1 => " " (Vacío)
- Display1.display(0, 0x13); // Dígito 0 => " " (Vacío)
- }
- if(cm >99 && cm <=999)
- {
- Display1.display(3, cm/1 % 10); // Dígito 3
- Display1.display(2, cm/10 % 10); // Dígito 2
- Display1.display(1 ,cm/100 % 10); // Dígito 1
- Display1.display(0, 0x13); // Dígito 0 => " " (Vacío)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment