Desarrollo de un sistema de transmisión automatizada para bicicletas, diseñado para optimizar la experiencia de pedaleo sin necesidad de intervención manual. El núcleo de la propuesta reside en la capacidad del sistema para interpretar el ritmo del ciclista y ajustar los cambios de marcha de forma autónoma, permitiendo una conducción más fluida y eficiente, especialmente en terrenos variables donde la gestión constante de la cadencia es crucial.
A nivel técnico, la solución integra ingeniería mecatrónica avanzada utilizando una placa Arduino Uno como cerebro del sistema. La lectura del entorno se realiza mediante un sensor PAS (Pedal Assist Sensor), que monitorea la velocidad de pedaleo en tiempo real. Esta información es procesada algorítmicamente para determinar el momento exacto del cambio, mientras que un módulo de pantalla OLED proporciona al usuario una interfaz visual clara del estado del sistema y la marcha activa.
Más allá de su funcionalidad mecánica, este desarrollo destaca como una aplicación práctica de habilidades STEM (Ciencia, Tecnología, Ingeniería y Matemáticas), demostrando cómo componentes accesibles pueden modernizar mecanismos de transporte tradicionales. El resultado es un prototipo funcional que no solo resuelve el problema de la gestión de marchas para ciclistas novatos o distraídos, sino que también sirve como una base sólida para futuras implementaciones en movilidad eléctrica y sistemas de asistencia inteligente.
El transistor MOSFET IRLB3034 es un componente de potencia ampliamente utilizado en aplicaciones electrónicas donde se requiere controlar cargas de alta potencia con una eficiencia y confiabilidad superiores. Con características eléctricas impresionantes y una amplia gama de aplicaciones, el IRLB3034 ha ganado popularidad entre los diseñadores y los entusiastas de la electrónica. En este artículo, exploraremos las características clave del IRLB3034 y sus aplicaciones más comunes.
Características del IRLB3034:
El IRLB3034 es un transistor de efecto de campo de metal-óxido-semiconductor (MOSFET) de canal N. Una de sus principales ventajas es su baja resistencia de encendido (Rds(on)), que permite un paso eficiente de la corriente cuando está activado. Esto se traduce en una menor disipación de potencia y una mayor eficiencia en comparación con otros dispositivos de potencia.
Otra característica notable del IRLB3034 es su alta tensión de drenaje a fuente (Vds), que puede alcanzar hasta 40V, lo que lo hace adecuado para aplicaciones que requieren un manejo de voltajes más altos. Además, el IRLB3034 puede manejar corrientes de hasta 195 amperios, lo que lo convierte en una opción robusta para aplicaciones de alta potencia.
Aplicaciones del IRLB3034:
Control de motores: El IRLB3034 se utiliza comúnmente en aplicaciones de control de motores, como controladores de velocidad de motor, control de servomotores y sistemas de tracción eléctrica.
Fuentes de alimentación conmutadas: Debido a su baja resistencia de encendido y alta eficiencia, el IRLB3034 es una opción popular en el diseño de fuentes de alimentación conmutadas, donde se requiere un control preciso y una alta eficiencia energética.
Iluminación LED: El IRLB3034 se utiliza en circuitos de control de iluminación LED, permitiendo el ajuste de brillo y la conmutación rápida de tiras de LED, paneles o lámparas.
Electrónica automotriz: Gracias a su capacidad para manejar altas corrientes y tensiones, el IRLB3034 es utilizado en aplicaciones automotrices, como sistemas de control de luces, controladores de motores y sistemas de gestión de energía.
Consideraciones de diseño: Al utilizar el IRLB3034 en un diseño, es esencial tener en cuenta ciertos aspectos para garantizar un funcionamiento óptimo y seguro. Algunas consideraciones importantes incluyen:
Disipación de calor: Dado que el IRLB3034 puede manejar altas corrientes, es fundamental proporcionar una adecuada disipación de calor mediante el uso de disipadores de calor o sistemas de enfriamiento activo para evitar el sobrecalentamiento.
Protección de diodos de recuperación rápida: Para proteger el transistor de voltajes inversos y picos de tensión, se recomienda utilizar diodos de recuperación rápida (por ejemplo, diodos Schottky) en paralelo con la carga.
Control de puerta: Para garantizar un adecuado encendido/apagado del transistor, se debe aplicar una tensión de compuerta (Vgs) adecuada y asegurar que la señal de control tenga una impedancia baja.
El siguiente código fue hecho para probar una Tira de LED de alta potencia (aún sin disipador) por lo que se mantiene en valores PWM bajos.
/*
Prueba para Usar MOSFET IRF520como interruptor digital con Arduino IDE
*/
int led = D0; // the PWM pin the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 4; // how many points to fade the LED by
int maxFade = 25;
// the setup routine runs once when you press reset:
void setup() {
// declare pin 9 to be an output:
pinMode(led, OUTPUT);
Serial.begin(115200);
}
// the loop routine runs over and over again forever:
void loop() {
// set the brightness of pin 9:
analogWrite(led, brightness);
// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;
// reverse the direction of the fading at the ends of the fade:
if (brightness <= 0 || brightness >= maxFade) {
fadeAmount = -fadeAmount;
if (fadeAmount>0) delay (5000);
}
Serial.print("brightness: ");
Serial.println(brightness);
delay(30);
}
La librería WiFiManager simplifica el proceso de configuración y gestión de conexiones WiFi en los módulos ESP32 y ESP8266. Proporciona una forma fácil de configurar y almacenar las credenciales de red WiFi, permitiendo que los dispositivos se conecten a las redes de manera autónoma y se recuperen de forma automática en caso de desconexiones.
El “WiFiManager” es una biblioteca diseñada para facilitar la configuración y administración del Wi-Fi en dispositivos IoT basados en los microcontroladores ESP32 y ESP8266. Esta biblioteca ofrece una forma conveniente de crear un portal de configuración basado en la web, lo que permite a los usuarios ingresar las credenciales de Wi-Fi sin necesidad de cargar un nuevo código en el dispositivo.
El proceso de funcionamiento del WiFiManager se puede describir en los siguientes pasos:
Inclusión de la biblioteca: En primer lugar, es necesario incluir la biblioteca WiFiManager en el proyecto. Esto se puede realizar descargando e instalando la biblioteca desde el administrador de bibliotecas de Arduino IDE o mediante el uso de un gestor de paquetes como PlatformIO.
Creación de una instancia del WiFiManager: Se crea una instancia del objeto WiFiManager en el código del proyecto.
#include <WiFiManager.h>
WiFiManager wifiManager;
Inicialización y conexión:
Antes de utilizar el WiFiManager, es necesario inicializarlo y conectarlo al punto de acceso Wi-Fi existente. Si se encuentran credenciales de Wi-Fi almacenadas previamente, el dispositivo se conectará automáticamente. En caso contrario, se iniciará el portal de configuración.
void setup() {
// Inicializar el WiFiManager
wifiManager.autoConnect("MiDispositivo");
// Resto del código de configuración o funcionalidad
}
En el ejemplo anterior, “MiDispositivo” es el nombre del punto de acceso que se creará si no se encuentran credenciales de Wi-Fi almacenadas. Este nombre puede modificarse según las preferencias del usuario.
Portal de configuración:
Si no se encuentran credenciales de Wi-Fi almacenadas, el WiFiManager iniciará un portal de configuración. Esto implica que el ESP32/ESP8266 actuará como un punto de acceso Wi-Fi al cual es posible conectarse desde un dispositivo móvil o una computadora.
Al conectarse a este punto de acceso, se abrirá automáticamente una página de configuración basada en la web, donde los usuarios pueden ingresar las credenciales de su red Wi-Fi. Una vez que las credenciales se ingresen y envíen, el ESP32/ESP8266 se conectará a la red Wi-Fi especificada y recordará estas credenciales para futuros usos.
Almacenamiento de la configuración:
Después de que el WiFiManager se conecte exitosamente a la red Wi-Fi especificada, almacenará las credenciales en la memoria no volátil del dispositivo (por ejemplo, en el ESP32/ESP8266). Esto permite que las credenciales se utilicen en las próximas ejecuciones, sin necesidad de ingresarlas nuevamente cada vez que se reinicie el dispositivo.
El temporizador es una especie de interrupción. Es como un reloj simple que puede medir el intervalo de tiempo de un evento. Cada microcontrolador tiene un reloj (oscilador), digamos que en Arduino Uno es de 16Mhz. Este es el responsable de la velocidad. Cuanto mayor sea la frecuencia de reloj, mayor será la velocidad de procesamiento. Un temporizador utiliza un contador que cuenta a cierta velocidad dependiendo de la frecuencia del reloj. En Arduino Uno se necesitan 1/16000000 segundos o 62 nanosegundos para hacer un solo conteo. Lo que significa que Arduino se mueve de una instrucción a otra instrucción por cada 62 nanosegundos.
En esta página se buscan establecer nuestros bits de registro del temporizador para usar la interrupción de desbordamiento del temporizador para alternar un LED cada vez que ocurra una interrupción.
El valor del precargador del bit del temporizador también se puede ajustar usando botones para controlar la duración en la que ocurre la interrupción.
Timers / Temporizadores en Arduino UNO
En Arduino UNO hay tres temporizadores que se utilizan para diferentes funciones.
Timer0 / Temporizador0:
Es un temporizador de 8 bits y se utiliza en funciones de temporizador como delay(), millis().
Timer1 / Temporizador1:
Es un temporizador de 16 bits y se usa en la biblioteca de servos.
Timer2/Temporizador2:
Es un temporizador de 8 bits y se utiliza en la función tone().
Registros de Timer de Arduino
Para cambiar la configuración de los temporizadores, se utilizan registros de temporizador.
A) TIMER1: Registros de control de temporizador / Timer (TCCRnA/B):
Este registro contiene los bits de control principales del temporizador y se utiliza para controlar los preescaladores del temporizador. También permite controlar el modo de temporizador usando los bits WGM.
TCCR1A
7
6
5
4
3
2
1
0
COM1A1
COM1A0
COM1B1
COM1B0
COM1C1
COM1C0
WGM11
WGM10
TCCR1B
7
6
5
4
3
2
1
0
ICNC1
ICES1
–
WGM13
WGM12
CS12
CS11
CS10
Prescaler / Preescalador
Los bits CS12, CS11, CS10 en TCCR1B establecen el valor del preescalador. Se utiliza un preescalador para configurar la velocidad del reloj del temporizador. Arduino Uno tiene preescaladores de 1, 8, 64, 256, 1024.
CS12
CS11
CS10
Uso
0
0
0
No Clock Timer STOP
0
0
1
CLCK i/o /1 No Prescaling
0
1
0
CLK i/o /8 (From Prescaler)
0
1
1
CLK i/o /64 (From Prescaler)
1
0
0
CLK i/o /256 (From Prescaler)
1
0
1
CLK i/o /1024 (From Prescaler)
1
1
0
External clock source on T1 Pin. Clock on falling edge
1
1
1
External Clock source on T1 pin. Clock on rising edge.
B) TIMER 2: Registro de temporizador/contador (TCNTn)
Este registro se utiliza para controlar el valor del contador y establecer un valor de precarga. Fórmula para el valor del precargador para el tiempo requerido en segundos: TCNTn = 65535 – (16x1010xTiempo en segundos / Valor del preescalador) Para calcular el valor del precargador para el temporizador 1 durante un tiempo de 2 segundos:
TCNT1 = 65535 – (16×106x2 / 1024) = 34285
Interrupciones del temporizador de Arduino
Hay varias interrupciones de temporizador en Arduino:
a) Interrupción de desbordamiento del temporizador:
Cada vez que el temporizador alcanza su valor máximo, por ejemplo (16 Bit-65535), se produce la interrupción de desbordamiento del temporizador. Por lo tanto, se llama a una rutina de servicio de interrupción ISR cuando el bit de interrupción de desbordamiento del temporizador está habilitado en el TOIEx presente en el registro de máscara de interrupción del temporizador TIMSKx.
Formato de la función ISR:
ISR(TIMER1_COMPA_vect)
{
}
Registro de comparación de salida (OCRnA/B):
Aquí, cuando se produce la interrupción de coincidencia de comparación de salida, se llama al servicio de interrupción ISR (TIMERx_COMPy_vect) y también se establecerá el bit indicador OCFxy en el registro TIFRx. Este ISR se habilita configurando el bit de habilitación en OCIExy presente en el registro TIMSKx. Donde TIMSKx es Registro de máscara de interrupción de temporizador.
Captura de entrada de temporizador:
A continuación, cuando se produce la interrupción de captura de entrada del temporizador, se llama al servicio de interrupción ISR (TIMERx_CAPT_vect) y también se establece el bit indicador ICFx en TIFRx (registro de indicador de interrupción del temporizador). Este ISR se habilita configurando el bit de habilitación en ICIEx presente en el registro TIMSKx.
Este artículo pretende explicar cómo conectar un módulo con un ESP32/ESP8266 a un servidor WEB que reciba los datos.
El microcontrolador será el cliente de una “página WEB”, accederá con información a un vínculo para insertar información en una Base de Datos
Actualizado: 2/7/2025
CONTEXTO
Insertar datos directamente en una base MySQL desde un microcontrolador resulta sencillo, pero puede presentar riesgos de seguridad y escalabilidad. Como alternativa, se puede usar una API REST o un broker MQTT. Este artículo muestra un enfoque con PHP y HTTP, con medidas básicas de protección.
Medir la temperatura y la humedad es una tarea común en muchos proyectos de electrónica y automatización del hogar. En este tutorial, te mostraré cómo utilizar Arduino en combinación con los sensores de temperatura y humedad DHT11 y DHT22 para obtener lecturas precisas de estos parámetros ambientales. Estos sensores son ampliamente utilizados debido a su costo asequible, su facilidad de uso y su precisión razonable.
Materiales necesarios:
Placa de desarrollo tipo (por ejemplo, Arduino UNO)
Sensor DHT11 o DHT22
Resistencia de 10k ohmios
Protoboard o breadboard
Cables de conexión
Paso 1: Conexiones eléctricas Conecta el sensor DHT11 o DHT22 a la placa Arduino según el siguiente esquema:
Conecta el pin de datos del sensor (generalmente marcado como “out” o “data”) al pin digital 2 de Arduino.
Conecta la alimentación del sensor (VCC) al pin de 5V de la placa de desarrollo.
Conecta el pin de tierra del sensor (GND) al pin GND del circuito.
Si se está utilizando el sensor DHT22, conectar una resistencia de 10k ohmios entre el pin de datos y el pin de alimentación (VCC).
Paso 2: Código de programación Abre el entorno de desarrollo de Arduino IDE y crea un nuevo proyecto. Asegúrate de tener instalada la biblioteca “DHT” en tu entorno. Luego, copia y pega el siguiente código:
#include <DHT.h>
#define DHTPIN 2 // Pin digital al que está conectado el sensor
#define DHTTYPE DHT11 // Si utilizas el DHT22, cambia esta línea por DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Error al leer el sensor DHT!");
return;
}
Serial.print("Humedad: ");
Serial.print(humidity);
Serial.print("% - Temperatura: ");
Serial.print(temperature);
Serial.println("°C");
delay(2000); // Espera 2 segundos antes de tomar la siguiente lectura
}
Paso 3: Compilar y cargar el programa Verifica que la placa Arduino esté conectada correctamente a tu computadora y selecciona el tipo de placa y puerto en el entorno de Arduino. Luego, compila y carga el programa en la placa.
Paso 4: Verificación y lecturas Una vez cargado el programa, abre el monitor serial en el entorno de Arduino. Deberías comenzar a ver las lecturas de temperatura y humedad que se actualizan cada 2 segundos.
Conclusión: En este tutorial, aprendiste cómo utilizar Arduino y los sensores DHT11 y DHT22 para medir la temperatura y la humedad ambiental. Puedes utilizar esta información para una amplia gama de proyectos, como sistemas de monitoreo climático, control de invernaderos, etc.