0 calificaciones0% encontró este documento útil (0 votos)
14 vistas3 páginas
El documento presenta el código para un tacómetro digital que mide las revoluciones por minuto (RPM) y la velocidad en kilómetros por hora de un eje. Declara constantes y variables, y define caracteres para mostrar las barras del tacómetro en el display LCD. Inicializa los pines, el display y los caracteres. En el bucle principal, lee el sensor de efecto hall, calcula RPM y velocidad, y actualiza el display con estos valores y las barras del tacómetro.
El documento presenta el código para un tacómetro digital que mide las revoluciones por minuto (RPM) y la velocidad en kilómetros por hora de un eje. Declara constantes y variables, y define caracteres para mostrar las barras del tacómetro en el display LCD. Inicializa los pines, el display y los caracteres. En el bucle principal, lee el sensor de efecto hall, calcula RPM y velocidad, y actualiza el display con estos valores y las barras del tacómetro.
El documento presenta el código para un tacómetro digital que mide las revoluciones por minuto (RPM) y la velocidad en kilómetros por hora de un eje. Declara constantes y variables, y define caracteres para mostrar las barras del tacómetro en el display LCD. Inicializa los pines, el display y los caracteres. En el bucle principal, lee el sensor de efecto hall, calcula RPM y velocidad, y actualiza el display con estos valores y las barras del tacómetro.
// CONSTANTES: Aquí se declaran las constantes que no cambian de valor a lo largo del
programa. Se usan para activar los pines y librerías:
#include <LiquidCrystal.h>; // Librería del display LCD: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // declaración de los pines usados por el LCD; byte barra0[8] = { B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00000 }; // defino el nuevo carácter 0 para el tacómetro byte barra1[8] = { B10000, B10000, B10000, B10000, B10000, B10000, B10000, B10000 }; // defino el nuevo carácter 1 para el tacómetro byte barra2[8] = { B11000, B11000, B11000, B11000, B11000, B11000, B11000, B11000 }; // defino el nuevo carácter 2 para el tacómetro byte barra3[8] = { B11100, B11100, B11100, B11100, B11100, B11100, B11100, B11100 }; // defino el nuevo carácter 3 para el tacómetro byte barra4[8] = { B11110, B11110, B11110, B11110, B11110, B11110, B11110, B11110 }; // defino el nuevo carácter 4 para el tacómetro byte barra5[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111 }; // defino el nuevo carácter 5 para el tacómetro const int hallPin = 10; // Número de pin usado por el sensor de efecto hall const int ledPin = 13; // Número de pin del led testigo del sensor const int rpmmax = 4000; // Número de revoluciones máximas para el tacómetro const int revbarra = rpmmax/80; // Numero de revoluciones por cada barra del tacómetro, hay 80 barras en una línea de lcd
2º Añadimos a lo anterior la declaración de variables:
// VARIABLES: Aquí se declaran las variables que cambian de valor a lo largo del programa; int hallState = 0; // variable para leer el estado del sensor hall unsigned long time = millis(); // variable de tiempo int RPM = 0; // variable para guardar las revoluciones por minuto int Limpiart1 = 0; // variable para contar una vuelta completa del eje int KMh = 0; // variable para contar Kilómetros/hora float perisensor = 6 * 3.1416; // perímetro del eje milímetros float factorescala = perisensor * 87 *60 / 1000; // perímetro del sensor a escala 1:87 en metros/hora long t1 = millis(); // variable para medir el tiempo al primer paso del eje por el sensor long t2 = millis(); // variable para medir el tiempo al segundo paso del eje por el sensor int barras = 0; // variable para guardar el número de barras a imprimir en el tacómetro int numcar = 0; // Variable para guardar el numero de caracter a imprimir en el tacómetro
3º Añadimos a lo anterior la inicialización de Arduino:
// INICIALIZACION: Se inicializan todos los valores en Arduino para su calibración void setup() { lcd.begin(16, 2); // se inicializa el display LCD lcd.print("Inicializando!"); // se muestra un texto en pantalla lcd.createChar(0, barra0); // crea el carácter 0 en la memoria de Arduino lcd.createChar(1, barra1); // crea el carácter 1 en la memoria de Arduino lcd.createChar(2, barra2); // crea el caracter 2 en la memoria de Arduino lcd.createChar(3, barra3); // crea el carácter 3 en la memoria de Arduino lcd.createChar(4, barra4); // crea el carácter 4 en la memoria de Arduino lcd.createChar(5, barra5); // crea el carácter 5 en la memoria de Arduino lcd.setCursor(0, 1); // posiciona el cursor del display en la línea 2 for (int x = 0; x < 16; x++){ // Bucle para imprimir 16 caracteres del tacómetro gráfico lcd.write (byte(5)); // imprimir el carácter 5 que tiene 5 barras equivalente a un carácter completo } // fin del bucle pinMode(ledPin, OUTPUT); // Inicializar el pin del LED como SALIDA: pinMode(hallPin, INPUT); // Inicializar el pin del sensor como ENTRADA: Serial.begin(9600); // Establecer el puerto serie en 9600 lcd.print(" "); // se borra el texto de "Inicializando": while (millis() < 5000) {} // Espera calibración durante 5 segundos time = millis(); // se toma el valor de tiempo del reloj de Arduino en milisegundos lcd.begin(16, 2); // Se inicializa el display lcd.print(" "); // se envían espacios al LCD para borrar el texto anterior } // Fin de la inicialización
4º Añadimos a lo anterior el bucle del programa que se ejecutará
indefinidamente: // BUCLE DEL PROGRAMA void loop(){ // Inicio del bucle sin fin (loop) hallState = digitalRead(hallPin); // Leer el estado del sensor de efecto hall: if (hallState == LOW) { // si el estado del sensor detecta el imán, o sea es LOW, entonces: digitalWrite(ledPin, HIGH); // enciende el LED; if (Limpiart1 == 1) { // si es la segunda vez que el eje pasa por el sensor, entonces: t2 = millis(); // tomar en t2 el valor del reloj interno en milisegundos, RPM = 60000 / (t2 - t1); // calcular las revoluciones por minuto barras = RPM / revbarra; // calcular cuantas barras hay que mostrar en el display KMh = RPM * factorescala / 1000; // calcular los Kilómetros/hora a escala 1:87 t1 = t2; // dejar en t1 el valor del reloj tomado antes en t2 para iniciar otra cuenta Limpiart1 = 0; // poner a cero el contador de pasos del eje por el sensor // Actualizar el display con los datos: // Imprimir RPM; lcd.setCursor(0, 0); // poner el cursor del LCD en el primer carácter de la primera línea del lCD lcd.print("RPM "); // escribir el texto RPM lcd.print(RPM); // escribir el valor de RPM lcd.print(" "); // escribir espacios a continuación para borrar valores anteriores // Imprimir KMh; lcd.setCursor(9, 0); // Ubicar el cusor del display en la posición 10 de la la linea 1 (el cero es posición 1) lcd.print("Kmh "); // escribir el texto Kmh lcd.print(KMh); // escribir el valor Kmh lcd.print(" "); // escribir espacios a continuación para borrar valores anteriores // Imprimir barras del tacómetro lcd.setCursor(0, 1); // poscicionar el cursor en linea posición 1 de la linea 2 for (int x = 1; x < 17; x++){ // Bucle para imprimir los 16 caracteres del tacómetro if (barras > (x * 5)) // Si el número de barras a imprimir > el numero de caracter x * 5 barras por carácter, entonces: { lcd.write (byte(5)); // imprimir un caracter de 5 barras en la posición actual del display } else if (barras == 0) // Si el número de barras a imprimir es igual a 0, entonces: { lcd.write (byte(0)); // Imprimir el caracter en blanco (número 0) en la posición actual del display } else { // Si el número de barras no es mayor que x * 5 ni igual a 0, entonces: numcar = barras - ((x - 1) * 5); // el Nº de carácter a imprimir será 1, 2, 3 o 4 barras lcd.write (byte(numcar)); // Imprimir el carácter que corresponda barras = 0; // en adelante todos los caracteres serán 0 así que barras se iguala a 0. } } // fin del bucle para imprimir el tacómetro } // fin del if (Limpiart1... else { // si el contador del eje aún no ha pasado 2 veces seguidas por el sensor, entonces: } // no hacer nada } // fin del if (HallState == LOW, o sea imán detectado else { // si el estado del sensor no ha detectado el imán, o sea el valor es HIGH, entonces: digitalWrite(ledPin, LOW); // apagar el LED: Limpiart1 = 1; // poner el contador de paso del imán a 1, es decir, empieza el segundo giro del eje } // fin del else } // vuelta al loop infinito del programa
Excel para principiantes: Aprenda a utilizar Excel 2016, incluyendo una introducción a fórmulas, funciones, gráficos, cuadros, macros, modelado, informes, estadísticas, Excel Power Query y más
ChatGPT Ganar Dinero Desde Casa Nunca fue tan Fácil Las 7 mejores fuentes de ingresos pasivos con Inteligencia Artificial (IA): libros, redes sociales, marketing digital, programación...
Inteligencia artificial: Lo que usted necesita saber sobre el aprendizaje automático, robótica, aprendizaje profundo, Internet de las cosas, redes neuronales, y nuestro futuro
Lean: La Guía Fundamental para Lean Startup, Lean Six Sigma, Lean Analytics, Lean Enterprise, Lean Manufacturing, Scrum, Gestión Agile de Proyectos y Kanban
Lean Seis Sigma: La guía definitiva sobre Lean Seis Sigma, Lean Enterprise y Lean Manufacturing, con herramientas para incrementar la eficiencia y la satisfacción del cliente