Tabla de contenido:

Temporizadores Arduino: 8 proyectos: 10 pasos (con imágenes)
Temporizadores Arduino: 8 proyectos: 10 pasos (con imágenes)

Video: Temporizadores Arduino: 8 proyectos: 10 pasos (con imágenes)

Video: Temporizadores Arduino: 8 proyectos: 10 pasos (con imágenes)
Video: 10 PROYECTOS increíbles con ARDUINO que puedes hacer en 2023 2024, Junio
Anonim
Temporizadores Arduino: 8 proyectos
Temporizadores Arduino: 8 proyectos

El Arduino Uno o Nano puede generar señales digitales precisas en seis pines dedicados utilizando los tres temporizadores integrados. ¡Solo requieren unos pocos comandos para configurar y no usan ciclos de CPU para ejecutarse!

El uso de los temporizadores puede resultar intimidante si comienza con la hoja de datos completa de ATMEGA328, que tiene 90 páginas dedicadas a su descripción. Varios comandos integrados de Arduino ya usan los temporizadores, por ejemplo millis (), delay (), tone (), AnalogWrite () y la biblioteca de servos. Pero para usar todo su poder, deberá configurarlos a través de los registros. Comparto aquí algunas macros y funciones para hacer esto más fácil y transparente.

Después de una breve descripción general de los temporizadores, siga 8 proyectos interesantes que se basan en la generación de señales con los temporizadores.

Paso 1: componentes necesarios

Componentes requeridos
Componentes requeridos

Para hacer los 8 proyectos, necesitará:

  • Un Arduino Uno o compatible
  • Un prototipo de escudo con mini protoboard.
  • 6 cables de puente de tablero
  • 6 puentes de tablero cortos (hágalo usted mismo con un cable de conexión de núcleo sólido de 10 cm)
  • 2 correas de cocodrilo
  • 1 LED blanco de 5 mm
  • una resistencia de 220 ohmios
  • una resistencia de 10 kOhmios
  • un potenciómetro de 10 kOhmios
  • 2 condensadores cerámicos de 1muF
  • 1 condensador electrolítico de 10muF
  • 2 diodos, 1n4148 o similar
  • 2 micro servomotores SG90
  • 1 altavoz de 8 ohmios
  • 20 m de alambre esmaltado delgado (0,13 mm)

Paso 2: descripción general de los temporizadores Arduino para la generación de señales

Timer0 y timer2 son temporizadores de 8 bits, lo que significa que pueden contar de 0 a 255 como máximo. Timer1 es un temporizador de 16 bits, por lo que puede contar hasta 65535. Cada temporizador tiene dos pines de salida asociados: 6 y 5 para timer0, 9 y 10 para timer1, 11 y 3 para timer2. El temporizador se incrementa en cada ciclo de reloj de Arduino, oa una velocidad que se reduce por un factor de preescala, que es 8, 64, 256 o 1024 (32 y 128 también están permitidos para timer2). Los temporizadores cuentan de 0 a "TOP" y luego nuevamente (PWM rápido) o hacia abajo (PWM de fase correcta). El valor de "TOP" determina la frecuencia. Los pines de salida se pueden configurar, restablecer o voltear según el valor del Registro de comparación de salida, por lo que determinan el ciclo de trabajo. Solo timer1 tiene la capacidad de establecer de forma independiente la frecuencia y los ciclos de trabajo para ambos pines de salida.

Paso 3: LED parpadea

Image
Image
LED parpadea
LED parpadea
LED parpadea
LED parpadea

La frecuencia más baja que se puede alcanzar con los temporizadores de 8 bits es 16 MHz / (511 * 1024) = 30, 6 Hz. Entonces, para hacer que un LED parpadee con 1Hz, necesitamos el temporizador1, que puede alcanzar frecuencias 256 veces más pequeñas, 0.12 Hz.

Conecte un LED con su ánodo (pata larga) al pin 9 y conecte su cátodo con una resistencia de 220 Ohm a tierra. Sube el código. El LED parpadeará exactamente a 1 Hz con un ciclo de trabajo del 50%. La función loop () está vacía: el temporizador se inicializa en setup () y no necesita más atención.

Paso 4: atenuador LED

Image
Image
Atenuador LED
Atenuador LED
Atenuador LED
Atenuador LED

La modulación por ancho de pulso es una forma eficaz de regular la intensidad de un LED. Con un controlador adecuado, también es el método preferido para regular la velocidad de los electromotores. Dado que la señal está 100% encendida o 100% apagada, no se desperdicia energía en una resistencia en serie. Básicamente, es como hacer parpadear el LED más rápido de lo que el ojo puede seguir. En principio, 50 Hz es suficiente, pero aún puede parecer que parpadea un poco y cuando el LED o los ojos se mueven, puede producirse un molesto "rastro" no continuo. Usando una preescala de 64 con un temporizador de 8 bits, obtenemos 16MHz / (64 * 256) = 977Hz, que se adapta al propósito. Elegimos timer2, de modo que timer1 permanezca disponible para otras funciones, y no interferimos con la función Arduino time (), que usa timer0.

En este ejemplo, el ciclo de trabajo y, por tanto, la intensidad, se regula mediante un potenciómetro. Un segundo LED se puede regular de forma independiente con el mismo temporizador en el pin 3.

Paso 5: Convertidor de digital a analógico (DAC)

Image
Image
Convertidor de digital a analógico (DAC)
Convertidor de digital a analógico (DAC)
Convertidor de digital a analógico (DAC)
Convertidor de digital a analógico (DAC)

El Arduino no tiene una verdadera salida analógica. Algunos módulos toman un voltaje analógico para regular un parámetro (contraste de pantalla, umbral de detección, etc.). Con solo un condensador y una resistencia, el temporizador1 se puede utilizar para crear un voltaje analógico con una resolución de 5 mV o mejor.

Un filtro de paso bajo puede "promediar" la señal PWM a un voltaje analógico. Un condensador está conectado a través de una resistencia a un pin PWM. Las características están determinadas por la frecuencia PWM y los valores de la resistencia y el condensador. La resolución de los temporizadores de 8 bits sería 5V / 256 = 20mV, por lo que optamos por Timer1 para obtener una resolución de 10 bits. El circuito RC es un filtro de paso bajo de primer orden y tendrá algo de ondulación. La escala de tiempo del circuito RC debe ser mucho mayor que el período de la señal PWM para reducir la ondulación. El período que obtenemos para una precisión de 10 bits es 1024 / 16MHz = 64mus. Si usamos un capacitor de 1muF y una resistencia de 10kOhm, RC = 10ms. La ondulación de pico a pico es como máximo de 5 V * 0,5 * T / (RC) = 16 mV, que se considera suficiente aquí.

Tenga en cuenta que este DAC tiene una impedancia de salida muy alta (10 kOhmios), por lo que el voltaje caerá significativamente si consume corriente. Para evitar eso, se puede tamponar con un opamp, o se puede elegir otra combinación de R y C, por ejemplo 1kOhm con 10muF.

En el ejemplo, la salida DAC se controla con un potenciómetro. Se puede ejecutar un segundo canal DAC independiente con timer1 en el pin 10.

Paso 6: Metrónomo

Image
Image
Metrónomo
Metrónomo
Metrónomo
Metrónomo

Un metrónomo ayuda a seguir el ritmo al reproducir música. Para pulsos muy cortos, la salida del temporizador arduino se puede alimentar directamente a un altavoz, lo que producirá clics claramente audibles. Con un potenciómetro, la frecuencia de los latidos se puede regular de 40 a 208 latidos por minuto, en 39 pasos. Timer1 es necesario para la precisión requerida. El valor de "TOP", que determina la frecuencia, se modifica dentro de la función loop (), ¡y eso requiere atención! Aquí puede ver que el modo WGM difiere de los otros ejemplos que tienen una frecuencia fija: este modo, con TOP configurado por el registro OCR1A, tiene doble búfer y protege contra la falta de TOP y una falla prolongada. Sin embargo, esto significa que solo podemos usar 1 pin de salida.

Paso 7: espectro de sonido

Image
Image
Espectro de sonido
Espectro de sonido
Espectro de sonido
Espectro de sonido

Los seres humanos pueden oír más de 3 órdenes de magnitud de frecuencias de sonido, de 20 Hz a 20 kHz. Este ejemplo genera el espectro completo con un potenciómetro. Se coloca un condensador de 10muF entre el altavoz y el Arduino para bloquear la corriente CC. Timer1 produce una onda cuadrada. El modo de generación de forma de onda aquí es PWM con corrección de fase. En ese modo, el contador comienza a contar hacia atrás cuando alcanza la parte superior, lo que da como resultado pulsos que tienen su media fija, incluso cuando el ciclo de trabajo varía. Sin embargo, también da como resultado un período que es (casi) el doble, y sucede que con la preescala 8, el temporizador1 cubre todo el espectro audible, sin la necesidad de cambiar la preescala. También aquí, dado que el valor de TOP se cambia sobre la marcha, el uso de OCR1A como top reduce las fallas.

Paso 8: servomotores

Image
Image
Servomotores
Servomotores
Servomotores
Servomotores

Hay poderosas bibliotecas de servos, pero si solo tiene dos servos para manejar, también puede hacerlo directamente con timer1, y así reducir la CPU, el uso de memoria y evitar interrupciones. El popular servo SG90 toma una señal de 50Hz y la longitud del pulso codifica la posición. Ideal para timer1. La frecuencia es fija, por lo que ambas salidas en el pin 9 y el pin 10 se pueden usar para dirigir los servos de forma independiente.

Paso 9: Inversor y duplicador de voltaje

Duplicador de voltaje e inversor
Duplicador de voltaje e inversor
Duplicador de voltaje e inversor
Duplicador de voltaje e inversor
Inversor y duplicador de voltaje
Inversor y duplicador de voltaje

A veces, su proyecto requiere un voltaje superior a 5 V o un voltaje negativo. Puede ser ejecutar un MOSFET, ejecutar un elemento piezoeléctrico, alimentar un opamp o restablecer una EEPROM. Si el consumo de corriente es lo suficientemente pequeño, hasta ~ 5mA, una bomba de carga podría ser la solución más simple: solo 2 diodos y dos capacitores conectados a una señal pulsada de un temporizador permiten duplicar el arduino 5V a 10V. En la práctica, hay 2 caídas de diodos, por lo que en la práctica será más como 8,6 V para el doblador o -3,6 V para el inversor.

La frecuencia de la onda cuadrada debe ser suficiente para bombear suficiente carga a través de los diodos. Un capacitor de 1muF mueve 5muC de cambio cuando el voltaje cambia entre 0 y 5V, por lo que para una corriente de 10mA, la frecuencia debe ser de al menos 2kHz. En la práctica, una frecuencia más alta es mejor, ya que reduce la ondulación. Con el timer2 contando de 0 a 255 sin preescala, la frecuencia es de 62,5 kHz, lo que funciona bien.

Paso 10: Transferencia de energía inalámbrica

Image
Image
Transferencia de energía inalámbrica
Transferencia de energía inalámbrica
Transferencia de energía inalámbrica
Transferencia de energía inalámbrica

No es raro cargar un reloj inteligente sin cables, pero lo mismo puede ser fácilmente parte de un proyecto Arduino. Una bobina con una señal de alta frecuencia puede transferir energía a otra bobina cercana mediante inducción, sin contacto eléctrico.

Primero prepare las bobinas. Utilicé un rollo de papel de 8,5 cm de diámetro y alambre esmaltado de 0,13 mm de diámetro para hacer 2 bobinas: la primaria con 20 vueltas, la secundaria con 50 vueltas. La autoinductancia de este tipo de bobina con N devanados y un radio R es ~ 5muH * N ^ 2 * R. Entonces, para N = 20 y R = 0.0425 da L = 85muH, lo que se confirmó con el probador de componentes. Producimos una señal con una frecuencia de 516 kHz, lo que da como resultado una impedancia de 2pi * f * L = 275Ohm. Esto es lo suficientemente alto como para que Arduino no entre en sobrecorriente.

Para hacer funcionar la bobina de la manera más eficaz, nos gustaría utilizar una verdadera fuente de CA. Hay un truco que se puede hacer: las dos salidas de un temporizador se pueden ejecutar en fase opuesta, invirtiendo una de las salidas. Para hacerlo aún más similar a una onda sinusoidal, usamos el PWM de corrección de fase. De esta manera, entre el pin 9 y el 10, el voltaje alterna entre ambos 0V, pin 9 + 5V, ambos 0V, pin 10 + 5V. El efecto se muestra en la imagen a partir de un trazo de alcance (con una preescala de 1024, este alcance de juguete no tiene mucho ancho de banda).

Conecte la bobina primaria a los pines 9 y 10. Conecte un LED a la bobina secundaria. Cuando la bobina secundaria se acerca a la primaria, el LED se enciende intensamente.

Recomendado: