Comunicación por Infrarrojo con ATtiny85

Comunicación por Infrarrojo

...
Posteado por David.AC el 01-06-2025 a las 17:03
Categoria: Arduino
Realizado por: Amaya Cen David Eduardo , Baeza Grajales Pedro Emmanuel y Gonzalez Gamboa Edwin Gerardo

Presentación.

En esta práctica se implementó un sistema de comunicación por infrarrojo utilizando microcontroladores ATtiny85, los cuales fueron programados mediante un Arduino UNO. El sistema permitió transmitir señales moduladas a 37.9 kHz a través de un LED infrarrojo. La recepción de dichas señales se realizó con un sensor TSOP38238, capaz de demodular la información recibida. La terminal serial del IDE de Arduino se utilizó para monitorear los datos transmitidos y recibidos, comprobando el funcionamiento básico de un enlace de comunicación inalámbrico.

Funcionamiento.

El sistema está compuesto por dos bloques principales: transmisión y recepción de datos.

• Transmisión: El ATtiny85 genera una señal portadora de 37.9 kHz. Esta señal se combina mediante compuertas NAND del circuito integrado SN74LS00N con los datos seriales (TX) enviados desde el Arduino (vía USB serial). La salida resultante modula el encendido del LED IR (IR383) a través de un transistor NPN 2N3904, permitiendo una transmisión de datos efectiva.

• Recepción: El receptor TSOP38238 detecta la señal infrarroja modulada. Esta señal es filtrada y demodulada internamente por el sensor, que entrega la señal digital directamente al pin RX del convertidor USB-Serial, permitiendo su lectura en la terminal serial del Arduino IDE. El capacitor cerámico de 100nF conectado al TSOP se usa para desacoplar ruidos de alimentación, mejorando la estabilidad de la señal recibida.

Realización.

Materiales a utilizar 

Componente Cantidad
Arduino UNO (utilizado como programador ISP) 1
Microcontrolador ATtiny85 2
LED Infrarrojo IR383 de 5 mm 2
Receptor Infrarrojo TSOP382 2
Transistor NPN 2N3904 H331 2
Circuito integrado SN74LS00N (compuertas NAND) 2
Resistencia de 330 ohm 2
Resistencia de 39 ohm 2
Capacitor cerámico de 104 (100nF) 2
Protoboard 2
Cables de conexión (jumpers) 8
HW-409 (adaptador USB de alimentación) 2
Computadora (una como emisor y otra receptor) 2
Cables de conexión (extra) Varios

 

Realización del sistema de transmisión infrarroja con ATtiny85

El desarrollo del proyecto se llevó a cabo en cuatro fases: programación, ensamblaje del transmisor, ensamblaje del receptor e integración final. En cada fase se validó el funcionamiento de los componentes para garantizar una transmisión infrarroja efectiva entre dos computadoras usando hardware simple.

 Etapa 1: Programación del ATtiny85 (Generador de señal portadora)

El sistema depende de una portadora de 37.9 kHz que modula la señal infrarroja. Para generar esta frecuencia de forma autónoma y estable, se utilizó un microcontrolador ATtiny85 programado en el entorno Arduino IDE.

  • Configuración inicial: se configuró un Arduino UNO como programador ISP, cargando el sketch ArduinoISP.

  • Conexión del ATtiny85: se conectaron los pines MISO, MOSI, SCK, RESET, VCC y GND desde el Arduino al ATtiny85 sobre un protoboard.

  • Grabación del bootloader: se seleccionó el reloj interno a 8 MHz, suficiente para realizar retardos precisos con delayMicroseconds().

  • Carga del código: se escribió un programa que genera una onda cuadrada a 37.9 kHz usando funciones de retardo, y se cargó al ATtiny85. Este componente ahora funciona como generador independiente de portadora.

 El propósito es crear una señal constante que será usada como base para modular los datos salientes del transmisor.

Etapa 2: Ensamblaje del transmisor infrarrojo

El módulo transmisor fue construido con tres bloques: lógica de control, driver de potencia y el emisor infrarrojo.

  1. Lógica de modulación:

    • Se empleó un SN74LS00N, un chip con cuatro compuertas NAND.

    • Dos de estas compuertas se conectaron para combinar las señales de la portadora (desde ATtiny85) y de datos (desde TX del Arduino transmisor).

    • Esto produce una modulación OOK (On-Off Keying): el LED IR solo se activa cuando la portadora y los datos están simultáneamente en alto.

  2. Etapa de potencia (con transistor):

    • La señal combinada se conecta a la base de un transistor NPN 2N3904 mediante una resistencia.

    • El colector del transistor se conecta al cátodo del LED infrarrojo, y el ánodo se alimenta con 5V a través de una resistencia de 39Ω.

    • Esto permite al transistor actuar como interruptor rápido, controlando cuándo el LED emite luz modulada.

  3. Emisor IR:

    • El LED infrarrojo IR383 emite la señal cuando es polarizado correctamente por el transistor.

    • La señal infrarroja modulada contiene los datos que se enviarán al receptor.

En conjunto, este bloque transmite datos digitales de forma óptica, codificados por la presencia o ausencia de la luz modulada.

 Etapa 3: Ensamblaje del receptor

El receptor fue diseñado para captar la señal IR y restaurarla como señal digital  para una computadora receptora.

Sensor TSOP38238:

  1. Se conectó a 5V y GND, y se colocó un condensador cerámico de 100nF entre estos pines para evitar ruidos eléctricos.

  2. Condiciones estables de salida:

    • Se colocó una resistencia de 10kΩ como pull-up entre Vcc y la salida del TSOP.

    • Cuando no hay señal, la salida está en nivel alto; cuando detecta señal válida, se pone en nivel bajo.

  3. Interfaz con la PC receptora:

    • La salida del sensor se conectó directamente al pin RX del adaptador HW-409 (USB a Serial).

    • Este adaptador permite que los datos lleguen directamente a una terminal serial en el monitor del IDE de Arduino o cualquier software de terminal como PuTTY o RealTerm.

 Así, el receptor convierte la luz infrarroja en datos digitales sin necesidad de microcontrolador, permitiendo una recepción rápida y directa.

Etapa 4: Integración, validación y pruebas

Una vez ensamblados transmisor y receptor, se realizó la conexión final sobre protoboards separadas:

  • Ambas placas fueron alimentadas por puertos USB con adaptadores HW-409, lo que permite evitar el uso de fuentes externas.

  • La computadora emisora envió datos vía puerto serial al Arduino TX.

  • El Arduino combinó la señal con la portadora del ATtiny85, y se transmitió vía LED infrarrojo.

  • El sensor TSOP38238 en el receptor detectó la señal modulada y restauró los datos, mostrándolos en la PC receptora en tiempo real.

 El sistema fue probado con distancias desde 1 metro hasta 9 metros en línea recta . En condiciones de baja luz y sin obstáculos, el sistema funcionó correctamente con una tasa de error casi nula.

Este proceso permitió construir un sistema de comunicación óptica unidireccional y funcional, usando tecnologías accesibles como ATtiny85 y el transmisor infrarrojo . El uso de portadora y modulación  permitió evitar interferencias con luz ambiental, mejorando la robustez del enlace.

Programación.

/* 
  Generador de señal IR 37.9 kHz para comunicación infrarroja

  Proyecto: Comunicación por IR
  Integrantes: David Amaya Cen, Pedro Baeza Grajales y Edwin González Gamboa

  Descripción:
  Este programa genera una señal cuadrada en el pin 0 del ATtiny85
  con una frecuencia aproximada de 37.9 kHz, usando retardos de 
  microsegundos y algunas instrucciones NOP para afinar la señal.
*/

void setup() {
  // Configura el pin 0 como salida
  pinMode(0, OUTPUT);
}

void loop() {
  // Encender el pin (señal alta)
  digitalWrite(0, HIGH);
  delayMicroseconds(7);
  __asm__ __volatile__ ("nop ");
  __asm__ __volatile__ ("nop ");

  // Apagar el pin (señal baja)
  digitalWrite(0, LOW);
  delayMicroseconds(7);
  __asm__ __volatile__ ("nop ");
  __asm__ __volatile__ ("nop ");
  __asm__ __volatile__ ("nop ");
}
 

Utilización.

Este circuito permite enviar mensajes utilizando luz infrarroja, similar a la de un control remoto. Se conecta cada protoboard al puerto COM3 de la computadora mediante el cable USB, y se abre el monitor serial del entorno de Arduino. Solo se utilizará el apartado de Enviar, configurado a 300 baudios, y se contará con un botón para limpiar los mensajes.

Los dos usuarios deben colocarse frente a frente en línea recta, separados por una distancia de aproximadamente 9 metros. Ambos circuitos funcionan como emisores y receptores. Para un mejor rendimiento, se recomienda utilizar el sistema en un ambiente con poca iluminación, reduciendo interferencias en la señal infrarroja.

Conclusiones.

David Eduardo Amaya Cen: La práctica de comunicación por infrarrojo permitió comprobar que es posible transmitir datos de forma inalámbrica utilizando luz infraroja. A través de la modulación de señales, se logró enviar mensajes entre dos puntos sin necesidad de cables de conexion a conexion . Esto demuestra la utilidad de la tecnología infrarroja en sistemas simples de control o comunicación. Su implementación resultó efectiva a corta distancia(8 , 9 metros).

Pedro Emmanuel Baeza Grajales: El uso de un microcontrolador compacto, junto con compuertas lógicas y componentes básicos, permitió implementar un sistema funcional de transmisión IR. Se logró comprender cómo una señal portadora puede ser modulada con datos para enviar información digital. Este enfoque ayuda a entender conceptos fundamentales de electrónica digital aplicada. La práctica también resalta la importancia del diseño correcto del circuito.

Edwin Gerardo González Gamboa: Esta actividad fue útil para integrar conocimientos de programación, electrónica y comunicación de datos. El sistema IR diseñado funcionó de forma eficiente, demostrando que se pueden crear soluciones tecnológicas con elementos sencillos. Además, se reforzó el uso del entorno Arduino para monitoreo y pruebas. La práctica fomento el aprendizaje aplicado en proyectos reales.

Referencias.

Shawn. (2020). RS232 vs TTL: Guía para principiantes para la comunicación en serie. Seeed Studio. Recuperado de https://www.seeedstudio.com/blog/2019/12/11/rs232-vs-ttl-beginner-guide-to-serial-communication/

Arduino Forum. (s.f.). Using assembly NOP for accurate code timing. Recuperado de https://forum.arduino.cc/t/using-assembly-nop-for-accurate-code-timing/289584

Instructables. (s.f.). How to program an ATtiny85 from an Arduino Uno. Recuperado de https://www-instructables-com.translate.goog/How-to-Program-an-Attiny85-From-an-Arduino-Uno/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=tc

Para comentar debes acceder Acceder

Comentarios


No hay comentarios en este post