En este POST os voy a explicar cómo crear un cronómetro mediante Arduino UNO y una serie de componentes electrónicos de una manera muy sencilla. Este cronómetro constará de 2 pulsadores, uno para reiniciar el conteo y otro para pausarlo cuando creamos conveniente.
Además se incluye un display LCD 1602 con comunicación I2C, con el que se muestra el tiempo transcurrido en formato HH:MM:SS. Sobre este display ya hemos escrito en este blog.
Bueno pues a partir de ahora ya estamos preparados para continuar con el montaje y la programación de nuestro cronómetro.
Lista de Materiales
- Arduino UNO Rev.3
- Cable USB tipo A-B
- Módulo LCM 1602 I2C V1
- Display 16×2 LCD 1602
- 2 Pulsadores
- 2 Resistencias de 10KΩ
- Protoboard
- Cables de conexión
Código del programa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
/* TITULO: Cronómetro con display LCD 1602 AUTOR: MARIANO DEL CAMPO GARCÍA (@2016) --> 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 Con este programa obtenemos un cronómetro en formato HH:MM:SS, que nos muestra el tiempo en un display LCD 1602 mediante comunicación I2C. Si presionamos el pulsador_inicio, el conteo se pone a cero. En cambio, cuando presionamos el pulsador ESQUEMA DE CONEXION +-----+ +----[PWR]-------------------| USB |--+ | +-----+ | | GND/RST2 [ ][ ] | | MOSI2/SCK2 [ ][ ] A5/SCL[ ] | SCL del módulo I2C conectado al LCD 1602 | 5V/MISO2 [ ][ ] A4/SDA[ ] | SDA del módulo I2C conectado al LCD 1602 | AREF[ ] | | GND[ ] | | [ ]N/C SCK/13[ ] | | [ ]IOREF MISO/12[ ] | | [ ]RST MOSI/11[ ]~| | [ ]3V3 +---+ 10[ ]~| PA(I) | [ ]5v -| A |- 9[ ]~| PA(P) | [ ]GND -| R |- 8[ ] | | [ ]GND -| D |- | | [ ]Vin -| U |- 7[ ] | | -| I |- 6[ ]~| | [ ]A0 -| N |- 5[ ]~| | [ ]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: - Los pulsadores suelen tener dos pines, que vamos a denominar PA y PB (si es de 4 sólo usamos 2 de ellos) - pulsador_inicio --> Terminales PA(I) y PB(I). - pulsador_pausa --> Terminales PA(P) y PB(P). - Conexión PULL-DOWN de los pulsadores. - PB(I) y PB(P) conectados a VCC. - PA(I) y PA(P) conectados a GND a través de una R=10K omhs (cada uno con su resistencia por separado). - La alimentación y la masa del módulo LCM 1602 I2C V1 van directamente conectadas a VCC (+5V) y GND respectivamente. */ // Importar librerías #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Variables para los cálculos internos del cronómetro int horas = 0; int minutos = 0; int segundos = 0; int decimas = 0; long milisegundos = 0; int pulsador_inicio = 10; // pulsador_inicio en PIN digital 10 int pulsador_pausa = 9; // pulsador_pausa en PIN digital 9 void setup() { Serial.begin(9600); // Comienzo de la comunicación serie pinMode(pulsador_inicio, INPUT); // Pin digital 10 como entrada pinMode(pulsador_pausa, INPUT); // Pin digital 9 como entrada // Inicializamos el LCD lcd.begin(16,2); lcd.backlight(); } void loop() { // Si presionamos el pulsador de inicio se pone todo a cero if(digitalRead(pulsador_inicio) == HIGH) { horas = 0; minutos = 0; segundos = 0; decimas = 0; lcd.clear(); } // Si presionamos el pulsador de pausa se congela el tiempo hasta que lo volvamos a presionar if(digitalRead(pulsador_pausa) == HIGH) { delay(200); while(digitalRead(pulsador_pausa) == LOW); delay(200); } // Se cuentan los milisegundos transcurridos milisegundos = millis(); // Si el tiempo transcurrido es mayor a una décima de segundo if(milisegundos % 100 == 0) { decimas++; // Si han pasado 10 décimas de segundo se cuenta un segundo if(decimas == 10) { decimas = 0; segundos++; } // Si han pasado 60 segundos se cuenta un minuto if(segundos == 60) { segundos = 0; minutos++; } // Si han pasado 60 minutos se cuenta una hora if(minutos == 60) { minutos = 0; horas++; } // Mostramos el tiempo a través del LCD lcd.setCursor(0,0); if(horas < 10) { lcd.print("0"); } lcd.print(horas); lcd.print(":"); lcd.setCursor(3,0); if(minutos < 10) { lcd.print("0"); } lcd.print(minutos); lcd.print(":"); lcd.setCursor(6,0); if(segundos < 10) { lcd.print("0"); } lcd.print(segundos); lcd.print("("); lcd.setCursor(9,0); lcd.print(decimas); lcd.print(")"); } } |
Video
Y con esto hemos finalizado con nuestro cronómetro. Espero esta información sea de utilidad para ustedes.