En este tutorial veremos como fabricar un temporizador para cámaras analógicas antiguas con actuador lineal. Veremos como armar el circuito, el actuador lineal con el servomotor, analizaremos el código fuente paso a paso, y finamente testereemos todo el dispositivo para comprobar su funcionamiento.
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
¿Que es un timer o temporizador?
Un temporizador es un dispositivo que se utiliza para controlar la conexión o desconexión de un circuito.
En cuanto a su funcionamiento es muy similar al de un relay, ya que los reles al recibir un pulso inmediatamente cambian la posición de sus contactos, y en cuanto a los temporizadores necesita agotarse el tiempo programado para intercambiar sus contactos.
Materiales
Servo MG995 versión de 360°
El mg995 – 360°, es un servo de rotación continua (360°) es una variante de los servos normales, en los que la señal que enviamos al servo controla la velocidad de giro, en lugar de la posición angular como ocurre en los servos convencionales.
Este servo de rotación continua es una forma sencilla de conseguir un motor con control de velocidad, sin tener que añadir dispositivos adicionales como controladores o encoders como ocurre en el caso en el caso de motores DC o paso a paso, ya que el control está integrado en el propio servo.
Especificaciones
- Material de los engranes: Metal
- Rango de giro: 360 °
- Voltaje de operación: 3 V a 7.2 V
- Velocidad de operación sin carga : 0.17 segundos / 60 grados (4.8V); 0.13 segundos / 60 grados (6.0V)
- Torque: 15 kg / cm
- Temperatura de trabajo: -30 °C a 60 °C
- Largo del cable: 310 mm
- Peso: 55 g
- Dimensiones: 40.7 mm x 19.7 mm x 42.9 mm
Incluye:
- 1 Servomotor Tower Pro Mg995 giro continuo.
- 3 Tornillos para ensamble.
- 3 Coples (horns).
Un resistor de 1 Kohm
Arduino nano
El Arduino Nano es una placa pequeña, completa y compatible con la placa de pruebas basada en el ATmega328 (Arduino Nano 3.x). Tiene más o menos la misma funcionalidad del Arduino Duemilanove, pero en un paquete diferente. Solo carece de un conector de alimentación de CC y funciona con un cable USB Mini-B en lugar de uno estándar.
Microcontrolador | ATmega328 |
Arquitectura | AVR |
Tensión de funcionamiento | 5 V |
Memoria flash | 32 KB de los cuales 2 KB utiliza el gestor de arranque |
SRAM | 2 KB |
Velocidad de reloj | 16 MHz |
Pines analógicos IN | 8 |
EEPROM | 1 KB |
Corriente CC por pines de E / S | 40 mA (pines de E / S) |
Voltaje de entrada | 7-12 V |
Pines de E / S digitales | 22 (6 de los cuales son PWM) |
Salida PWM | 6 |
El consumo de energía | 19 mA |
Tamaño de PCB | 18 x 45 mm |
Peso | 7 g |
Diagrama de pines
Un buzzer
Display oled sh1106
Se trata de un módulo de pantalla OLED monocromática DE 128×64 puntos con interface I2C .Que presenta varias ventajas en comparación con pantallas LCD, y podemos destacar su alto brillo, un muy buen contraste, un ángulo de visión más amplio, y bajo consumo de energía. ES compatible con Arduino Rasberry Pi y microcontroladores PIC entre otros. Trabaja con niveles lógicos de 3.3V a 5V tiene un angulo de visión mayor a los 160 grados. el Tamaño de la pantalla es de 1,3 pulgadas. Se alimenta con un voltaje de 3.3V a 5V Se lo puede usar en aplicaciones como relojes inteligentes, MP3, termómetros, instrumentos, y proyectos varios, etc.
Librería
Características
- Interface: I2C(3.3V / 5V logic level)
- Resolution: 128 x 64
- Angle of view: >160 degree
- Display color: Blue
- Display size: 1.3 inch
- Driver IC: SH1106
- Power supply: DC 3.3V~5V
- Operating temperature: -20~70’C
- Application: smart watch, MP3, thermometer, instruments, DIY projects, etc.
Un diodo led
Un pcb
Descargar archivo gerber en –> timer
Pines hembra
Pines macho
Tres pulsadores
Un zócalo de 30 pines
Código Fuente
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 |
#include <Servo.h> #include "U8glib.h"//Librería para el control del display oled U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);// I2C / TWI // Se habilita esta linea según el display a usar en este caso el driver SH1106 int periodo = 1000; unsigned long Tiempo = 0; // estas constantes no cambiarán: const int set = 2; // Pulsador para setear el tiempo const int start = 3; // Pulsador para inicializar el timer const int buzzer = 4; // Salida donde está el buzzer Servo servoMotor; // Creamos el objeto servo // Variables que cambian int botonContador = 0; // contador para el número de pulsaciones de botones int estadoSet = 0; // estado actual del botón "set" int estadoStart = 0; // estado actual del botón "start" int ultimoEstadoBoton = 0; // estado anterior del botón "set" void setup() { servoMotor.attach(12);//Pin para el control del servomotor // inicializar el pin del botón como entrada: pinMode(set, INPUT_PULLUP); //Resistencia de pullup interna pinMode(start, INPUT_PULLUP); //Resistencia de pullup interna // inicializa pin como una salida: pinMode(buzzer, OUTPUT); // inicializar la comunicación serial: Serial.begin(9600); } void loop() { // Leemos si se ha precionado alguno de los botones estadoSet = digitalRead(set); estadoStart = digitalRead(start); ////////Botón "set"//////////////////// // Si las variables son distintas se cumple esta condición if (estadoSet != ultimoEstadoBoton) { // si estadoSet es igual un valor HIGH if (estadoSet == HIGH) { Serial.println(botonContador); //Mostramos el valor de tiempo, cuando apretamos el botón "set" u8g.firstPage(); do { draw();//Llama a la función draw } while( u8g.nextPage() ); botonContador= botonContador + 5;//Se configura para intervalo de 5 segundos } } // guarda el estado actual como último estado, // para la próxima vez ultimoEstadoBoton = estadoSet; //Botón "start" //Si se precionó el botón start if(estadoStart==LOW){ botonContador= botonContador - 4; //Se cumple mientras sea distinto de 0 while(botonContador!=0){ //Se cumple cada un segundo if(millis() > Tiempo + periodo){ Tiempo = millis(); botonContador--; //Decremente en 1 el valor ingresado con el botón set //Llamamos a la función draw() para mostrar datos en el display u8g.firstPage(); do { draw();//Llama a la función draw } while( u8g.nextPage() ); Serial.println(botonContador);//Imprimimos en el terminal serial el decremento del conteo //Si el valor es igual a 0 se cumple la condición if(botonContador==0){ //Seteamos todas las variables con el valor 0 botonContador = 0; estadoSet = 0; estadoStart = 0; ultimoEstadoBoton = 0; digitalWrite(buzzer, HIGH); //Activamos el buzzer servoMotor.write(180);//Baja el actuador lineal delay(500); digitalWrite(buzzer, LOW); //Apagamos el buzzer servoMotor.write(90);//Detiene al servo motor delay(600); digitalWrite(buzzer, HIGH); //Activamos el buzzer servoMotor.write(0);//Sube el actuador lineal delay(450); servoMotor.write(90);//Detiene al servo motor digitalWrite(buzzer, LOW); //Apagamos el buzzer } } } } } //Mostramos datos en el display void draw(void) { //Imprimimos en pantalla el valor de la frecuencia obtenida //u8g.setFont(u8g_font_unifont); u8g.setFont(u8g_font_osb35); u8g.setPrintPos(0, 50); u8g.print(botonContador); u8g.print(" S"); } |
PROYECTOS RECOMENDADOS