En este tutorial veremos como hacer un alimentador de peces automático con arduino nano, un motor paso a paso 28byj-48 con su respectiva controladora. Además se incluye un RTC o reloj en tiempo real, ds1307 aunque también sirve el ds3231, que nos va a permitir configurar el sistema para que haga la descarga de alimento a la hora programada, se incluye el código fuente, el archivo gerber, los archivos stl para imprimir el alimentador, todo totalmente gratis como siempre.
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
Circuito
Usaremos los pines 2, 3, 4 y 5 para el control del motor pasa a paso, y los pines A4 con el pin SDA del módulo RTC, y el pin A5 con SCL del RTC.
Materiales
Un 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
Pines hembra
Un led
Un motor paso a paso 28byj-48 con su controladora
Los parámetros de este motor paso a paso son:
- Modelo: 28BYJ-48 – 5V
- Tensión nominal: 5V (o 12 V, valor indicado en la parte trasera).
- Cantidad de fases: 4.
- Reductor de velocidad: 1/64
- Ángulo de paso: 5,625° / 64
- Frecuencia: 100Hz
- Resistencia en CC: 50Ω ±7 % (25° C)
- Frecuencia con tracción: > 600Hz
- Frecuencia sin tracción: > 1000Hz
- Torque con tracción: >34,3mN.m (120Hz)
- Torque en autoposicionamiento: >34,3mN.m
- Torque con fricción: 600-1200 gf.cm
- Arrastre en torque: 300 gf.cm
- Resistencia de aislación > 10MΩ (500V)
- Aislación eléctrica: 600VAC/1mA/1s
- Grado de aislación: A
- Aumento de temperatura: < 40K (120Hz)
- Ruido: < 35dB (120Hz, sin carga, 10cm)
ULN2003APG
Especificaciones principales:
- 500 mA de corriente de colector nominal (de salida única)
- 50 V de salida (hay una versión que soporta 100 V de salida)
- Incluye diodos de retorno de salida
- Entradas compatibles con TTL y 5-V CMOS lógica
Pines macho
Un resistor de 1 Kohm
Un módulo rtc ds1307
Descripción
El módulo RTC se basa en el módulo de reloj DS1307 de alta precisión en tiempo real.
A través de la interfaz I2C para comunicarnos con singlechip, puede leer año, mes, día, semana, hora, minuto, segundo, puede leer hasta año 2100.
La interfaz de Control es I2C.
Voltaje recomendado: cc 5 V, la dirección del módulo es 0x68, el nivel de interfaz de Control es 5 V o 3,3 V.
El reloj de tiempo real serie (RTC) DS1307 es un reloj / calendario decimal de código binario completo (BCD) de baja potencia.
Más 56 bytes de NV SRAM. Dirección y datos son transferido en serie a través de un I2C, bus bidireccional.
El reloj / calendario proporciona segundos, minutos, horas, información de día, fecha, mes y año. El fin de la fecha del mes se ajusta automáticamente por meses con menos de 31 días, incluidas correcciones por salto año. El reloj funciona en 24 horas o 12 formato de hora con indicador AM / PM. El DS1307 tiene un
circuito de detección de energía incorporado que detecta fallas de energía y cambia automáticamente al suministro de respaldo.
La operación de cronometraje continúa mientras la parte opera desde el suministro de respaldo.
Características
Especificación de voltaje de alimentación VCC: 4,5 ~ 5,5 V;
Voltaje de la batería: 3,5 V ~ 2,0; H
Entrada de nivel igh: 2,1 vvcc + 0,3 V;
Entrada de bajo nivel:-0,3 ~ + 0,8 V;
Interfaz de Control: 4 pines (GND, VCC, SDA, SCL), GND para cable de tierra, VCC para fuente de alimentación, SDA para cable de datos de interfaz I2C, SCL para cable de reloj de interfaz I2C;
IC en tiempo Real: DS1307Z; sincronización independiente: a través de la interfaz I2C se comunican con MCU.
Batería: Batería de CR1220;
Orificio instalado: agujero de tornillo de 4 m2, agujero de diámetro: 2,2mm, fácil de instalar.
Un zócalo para el arduino nano
Circuito impreso (pcb)
Archivo gerber –> MULTIPLES SERVOS
Archivos STL
Código fuente
Recuerden instalar la librería RTClib.h de Adafruit, y para evitar cualquier tipo de incompatibilidad, recomiendo instalar la versión que figura en la imagen.
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 |
#include <Wire.h> #include "RTClib.h" bool estado = false; int diasSemana; // Pines para controlar el motor paso a paso #define IN1 2 #define IN2 3 #define IN3 4 #define IN4 5 // Secuencias del motor paso a paso int paso [4][4] = { {1, 1, 0, 0}, {0, 1, 1, 0}, {0, 0, 1, 1}, {1, 0, 0, 1} }; //Elegimos el tipo de módulo RTC RTC_DS1307 rtc; //RTC_DS3231 rtc; void setup() { Serial.begin(9600); // Todos los pines como salida pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); delay(1000); //Inicializamos el módulo rtc if (!rtc.begin()) { Serial.println(F("No se pudo encontrar el RTC")); while (1); } //Ajuste automático de la fecha y hora, según la hora de tu pc // rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //Ajuste manual de la fecha y hora rtc.adjust (DateTime (2021, 3, 6, 22, 59, 55)); } // Comprobar si esta programado el encendido bool encendidoProgramado(DateTime date) { diasSemana = date.dayOfTheWeek(); float hours = date.hour() + date.minute() / 60.0; // Programamos la hora de activación bool horaActivacion = ((hours >= 20.00 && hours < 23.50)); // Programamos los días de la semana para la activación, en este caso todos los días de la semana bool diaActtivacion = (diasSemana == 0 || diasSemana == 1 || diasSemana == 2 || diasSemana == 3 || diasSemana == 4 || diasSemana == 5 || diasSemana == 6 ); if (horaActivacion && diaActtivacion) { Serial.println("Encendido programado"); return true; } return false; } void loop() { //Muestra la fecha y hora en el monitor serial DateTime now = rtc.now(); Serial.print("Fecha: "); Serial.print (now.day (), DEC); Serial.print ('/'); Serial.print (now.month (), DEC); Serial.print ('/'); Serial.print(now.year (), DEC); Serial.print (" Hora: "); //Serial.print ("--"); Serial.print (now.hour (), DEC); Serial.print (':'); Serial.print (now.minute (), DEC); Serial.print (':'); Serial.print (now.second (), DEC); Serial.println (); if (estado == false && encendidoProgramado(now)) { estado = true; //Movemos el motor paso a paso algunos grados for (int m = 0; m < 51; m++){ for (int p = 0; p < 4; p++) { digitalWrite(IN1, paso[p][0]); digitalWrite(IN2, paso[p][1]); digitalWrite(IN3, paso[p][2]); digitalWrite(IN4, paso[p][3]); delay(2); } } } else if (estado == true && !encendidoProgramado(now)) { estado = false; Serial.println("Tiempo cumplido"); } delay(1000); } |
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
PROYECTO RECOMENDADO