Transmisor Serial Infrarrojo

“Emisión y Recepción de Datos Inalámbricos Usando Señales Infrarrojas"

...
Posteado por Brayan.CT el 31-05-2025 a las 01:59
Categoria: Arduino
Realizado por: Chan Tec Brayan Ricardo, May Pérez Yulisa María, Yam Cetina Diego Alonzo

Presentación.

Este proyecto consiste en el desarrollo de un sistema de comunicación inalámbrica utilizando tecnología infrarroja (IR), implementado mediante un circuito ensamblado en el protoboard con un microcontrolador ATTiny85 y la terminal de Arduino para el envio de mensajes. Ambos elementos trabajan en conjunto para permitir la transmisión de mensajes de texto desde una computadora a otra.

El sistema emplea un emisor y un receptor infrarrojo como medio de transmisión, buscando alcanzar un rango funcional de hasta 19 metros. La comunicación está basada en un protocolo simple que define la estructura de los datos, permitiendo así un envío ordenado y comprensible de la información. Este sistema es de bajo costo y fácil de implementar.

Funcionamiento.

Esta práctica, de comunicación inalámbrica infrarroja (IR), funciona con el microcontrolador ATtiny85 el cual genera una señal de modulación de 37.9 kHz para, la cual es necesaria para modular la portadora infrarroja del receptor (TSOP38238).  Lo cual permitirá la transmisión a larga distancia y permite que el receptor pueda distinguir la señal útil.

Para que este sistema de comunicación infrarroja funcione correctamente, se utilizó la terminal serial del Arduino IDE como interfaz de entrada y salida de los mensajes. El proceso completo de funcionamiento es el siguiente:

  1. Se envia el mensaje desde la terminal de Arduino(emisor), el cual será enviado por el USB serial en TX hacia el emisor.
  2. El ATtiny85, como ya esta programado, se encarga de generar la señal portadora de 37.9kHz. Esto ayuda al receptor (TSOP38238) detectar la señal correcta.
  3. Luego la señal TX se combina con la señal generada por ATtiny85 usando el 74LS00 C7 el cual es un conjunto de compuertas NAND. Estas permiten encender el LED infrarrojo para emitir la luz modulada.
  4. Como siguiente, se amplifica la señal IR usando el transistor 2N3904, el cual asegura que el LED tenga la suficiente potencia para alcanzar distancias largas.
  5. El receptor detecta la luz infrarroja, filtra la señal y entrega los datos, esta llega al Pin RX.
  6. Finalmente, el mensaje recibido se muestra en la terminal serial de Arduino de la laptop receptora.

 

 

 

 

 

 

 

 

 

 

 

 

Realización.

Materiales

 

Cantidad

 

Nombre del Componente

2

 

74LS00 C7 - 4 compuertas NAND de 2 entradas

2

 

ATTINY85-20PU - Microcontrolador AVR de 8 bits

2

 

UVLED5MM J3 - LED UV 5mm 400–405nm

2

 

TSOP38238 E9 - Módulo receptor IR de 38kHz

4

 

RES1/2W - Resistencia de carbón 1/2 W 2 de 330 ohms y 2 de 29 ohms

1

 

2N3904 - Transistor NPN

2

 

CER - Capacitor cerámico 50V

1

 

Protoboard

8

 

Jumpers

2

 

Conector USB serial

 

Montaje

Programación del ATtiny85

Primero se tienen que instalar los enlaces necesarios para poder programar el ATtiny85, ya que este no es compatible con el Arduino de forma predeterminada.
Se debe pegar una URL en el administrador de URLs de Arduino y posteriormente descargar la librería que permitirá “quemar” el ATtiny85 para grabarle la frecuencia de 37.9 kHz.

Paso 1. Configurar el Arduino Uno como ISP (In-System Programmer)

  • Conectar el Arduino a la computadora.
  • Abrir Archivo > Ejemplos > 11.ArduinoISP > ArduinoISP.
  • Se abrirá el sketch llamado ArduinoISP.
  • Selecciona:
    • Placa: Arduino Uno
    • Puerto: El correspondiente a tu Uno
    • Programador: AVRISP mkII (no se cambia aún)
  • Haz clic en Subir (ícono de flecha) para cargar ArduinoISP al Uno.

Esto servirá para que el Arduino Uno actúe como un puente entre la computadora y el ATtiny85, permitiendo grabarle su memoria.

Paso 2. Seleccionar y conectar el ATtiny85

  • Ve a Herramientas > Placa y selecciona ATtiny25/45/85.
  • Configura:
    • Procesador: ATtiny85
    • Clock: 8 MHz (internal)
    • Puerto: El del Arduino Uno
    • Programador: Arduino as ISP

Ahora hay que conectar el ATtiny85 con la placa del Arduino Uno de acuerdo con el siguiente esquema de conexiones:

 

Conexión Arduino – ATtiny85

https://content.instructables.com/FVK/WJ7T/IVHQFYT5/FVKWJ7TIVHQFYT5.jpg?auto=webp&frame=1&fit=bounds&md=MjAxNi0xMS0xNCAxNDowMDoyMS4w

 

 

 

 

 

 

 

 

 

ATtiny85 Pin

Nombre

Conexión en Arduino Uno

1

RESET

Pin 10

4

GND

GND

5

PB0 (MOSI)

Pin 11

6

PB1 (MISO)

Pin 12

7

PB2 (SCK)

Pin 13

8

VCC

5V

 

  • Importante: Colocar un capacitor de 10 μF entre RESET y GND del Arduino Uno.


Esto evita que el Uno se reinicie cuando se usa como programador, lo cual puede causar errores como:
avrdude: stk500_recv()

Paso 3. Grabar el Bootloader

Esto configura los "fusibles" del ATtiny85 para usar el reloj interno a 8 MHz:

  • Ve a Herramientas > Grabar bootloader.
  • Si ves el mensaje "Done burning bootloader", estás listo.

Paso 4. Grabar el programa Blink

Este código genera una señal por un período corto de 7 microsegundos y la desactiva por 7 microsegundos, generando así una señal cuadrada de 37.9 kHz, que es lo que se necesita en el ATtiny85 para poder enviar datos.

El código __asm__ __volatile__("nop "); no hace nada, pero consume tiempo (1 ciclo por instrucción), lo cual permite ajustar la frecuencia poco a poco hasta que se obtenga la deseada.

  • Ve a Archivo > Ejemplos > 01.Basics > Blink.
  • Se abrirá el sketch.
  • Configura y añade los __asm__ __volatile__("nop "); necesarios para conseguir la frecuencia.
  • Le damos grabar y listo.

Frecuencia 37.9 kHz

  • Verifica con el osciloscopio que esté en la frecuencia correcta conectándolo en el pin de salida del ATtiny85 y el GND del mismo.

Ya que cada ATtiny85 debe tener su propia frecuencia para poder ser efectiva el envío de datos.

Ensamblaje del circuito en el protoboard

Este circuito es donde se integrará el ATtiny85 para funcionar finalmente.

Nos basamos del siguiente diagrama.

Conexiones

1. USB-SERIAL

  • Tiene dos líneas:
    • TX (transmisión) → conectada a la entrada 1 del NAND (74LS00).
    • RX (recepción) ← conectada a la salida del TSOP38238.

 2. TSOP38238 (receptor IR)

  • Pata 1 (izquierda): Conectada a GND (tierra).
  • Pata 2 (medio): Salida digital del TSOP → conectada directamente al RX del USB-Serial.
  • Pata 3 (derecha): Conectada a VCC (5V).
  • Entre pata 1 y pata 3 (GND y VCC): hay un capacitor de 100 nF.

3. ATtiny85

  • Una salida digital del ATtiny  → conectada a la entrada 2 del NAND (pin 2 del 74LS00).

4. Compuertas NAND (74LS00)

  • Compuerta 1 (pines 1 y 2 → salida pin 3):
    • Entrada 1: TX desde USB-Serial.
    • Entrada 2: Señal 37.9 kHz desde ATtiny85.
    • Salida (pin 3): conectada a ambas entradas de la siguiente compuerta para invertir.
  • Compuerta 2 (pines 4 y 5 → salida pin 6):
    • Entrada 4 y 5: ambas conectadas a la salida de la compuerta 1 (pin 3).
    • Actúa como inversor.
    • Salida (pin 6): conectada a la siguiente compuerta.
  • Compuerta 3 (pines 9 y 10 → salida pin 8):
    • Entradas 9 y 10: ambas conectadas a la salida del inversor (pin 6).
    • Actúa nuevamente como inversor.
    • Salida (pin 8): conectada a una resistencia de 330Ω.

5. (LED IR y Transistor 2N3904)

  • Salida del NAND (pin 8) → conectada a una resistencia de 330Ω.
  • Otra pata de la resistencia de 330Ω → conectada a la base del transistor 2N3904.
  • Colector del 2N3904 → conectado a una resistencia de 39Ω, y del otro lado a un LED IR que va a VCC (5V).
  • Emisor del 2N3904 → conectado a GND (tierra).

 

 

 

 

 

Programación.

Este codigo se uso para poder programar el ATtiny85, para generar la señal de 37.9 kHz.

Se realizo en el IDE Arduino.

/*

  Blink

 

  Turns an LED on for one second, then off for one second, repeatedly.

 

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO

  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to

  the correct LED pin independent of which board is used.

  If you want to know what pin the on-board LED is connected to on your Arduino

  model, check the Technical Specs of your board at:

  https://docs.arduino.cc/hardware/

 

  modified 8 May 2014

  by Scott Fitzgerald

  modified 2 Sep 2016

  by Arturo Guadalupi

  modified 8 Sep 2016

  by Colby Newman

 

  This example code is in the public domain.

 

  https://docs.arduino.cc/built-in-examples/basics/Blink/

*/

 

// the setup function runs once when you press reset or power the board

void setup() {

  // initialize digital pin LED_BUILTIN as an output.

  pinMode(0, OUTPUT);

}

 

// the loop function runs over and over again forever

void loop() {

  digitalWrite(0, HIGH);  // turn the LED on (HIGH is the voltage level)

  delayMicroseconds(7);     

  __asm__ __volatile__ ("nop ");

  __asm__ __volatile__ ("nop ");

   

  digitalWrite(0, LOW);   // turn the LED off by making the voltage LOW

  delayMicroseconds(7);  

  

   __asm__ __volatile__ ("nop ");

   __asm__ __volatile__ ("nop ");

   __asm__ __volatile__ ("nop ");

  __asm__ __volatile__ ("nop ");  

  __asm__ __volatile__ ("nop ");                  // wait for a second

}

 

Utilización.

Ejecución

      1. Se conecta todo el circuito realizado (en el protoboard) a través del USB serial. Este es reconocido por la computadora, ya que en una práctica anterior se utilizó el mismo puerto COM.

 

 

 

 

 

 

 

 

 

 

    1.     2. Abrimos el IDE Arduino, entramos en la parte de terminal para enviar el mensaje.

Escribimos el mensaje que queremos enviar de una computadora a otra.

 

Emisor: a1 b2 c3

Recibió el receptor: a1 b2 c3

En este caso somos lo emisores.

 

Emisor: D4 E5 F6

Recibió el receptor: D4 E5 F6

En este caso somos los receptores.

Importante: La ventaja de este sistema es que no requiere un formato específico de envío de información, lo que lo hace fácil de usar.

Resultados de la practica

  • Funcionó correctamente.
  • Se enviaron los mensajes sin pérdida de datos.
  • Se logró una comunicación efectiva a una distancia de aproximadamente 7.99 metros.

 

Problemas encontrados

  • Nuestro ATtiny no estaba en la frecuencia necesaria. Se tuvo que cargar varias veces el código al ATtiny85 e ir revisando con el osciloscopio si tenía la frecuencia de 37.9 kHz.
  • Hubo errores en la alineación entre los LEDs emisores y los receptores; no estaban correctamente orientados uno frente al otro. Se realizaron modificaciones al circuito para ajustar sus posiciones y asegurar una transmisión y recepción adecuada.
  • Los cables que teniamos no eran estables, si nos moviamos para probarlo, cuando se enviaba el mensaje o se recibía, este no llegaba correctamente, o en su lugar se recibían símbolos erróneos o caracteres extraños (?).

 

 

Conclusiones.

Diego Yam

En este proyecto fue muy importante saber cómo funciona un componente que es el ATtiny85, el cual es el que nos ayudó a generar la frecuencia necesaria para poder trabajar con el infrarrojo y transmitir los mensajes.


Esto fue importante ya que se aprendió a programarlo desde cero y a armar el circuito con las compuertas lógicas y los demás componentes, como las resistencias, capacitores y el receptor de infrarrojo. También se entendió que se necesitaba una frecuencia de 37.9 kHz para poder hacer que funcione el receptor y lograr que el mensaje llegue sin errores.
Es interesante saber cómo se puede hacer para generar el mensaje y mandarlo a un destino específico, cómo se puede usar el ATtiny85 para la frecuencia deseada, cómo cada componente tiene una función específica y cómo usar el Arduino Uno para poder programarlo y hacer que funcione.


Este proyecto se me hizo interesante ya que nos puso a prueba nuestros conocimientos para poder resolver el problema de cómo transmitir el mensaje hacia otro infrarrojo. Nos ayudó a entender cómo se puede mandar un mensaje a largas distancias y cómo, por pequeños errores, puede fallar el circuito y no funcionar adecuadamente.

Yulisa May

La realización del transmisor serial infrarrojo en protoboard fue una práctica más compleja. A lo largo de la actividad, se trabajó desde el diseño del circuito que se iba a implementar, con la ayuda del maestro, quien nos guió en la parte base de la conexión y sobre los resultados que se debían obtener con la práctica.


Parte de esta práctica consistió en verificar el diagrama para asegurar que los componentes funcionaran correctamente, ya que el componente ATtiny85 se programa para generar la frecuencia necesaria, en este caso 37.9 kHz, para la correcta operación del transmisor.
La funcionalidad de la comunicación infrarroja consiste en transmitir datos de forma serial, e integrar correctamente los componentes electrónicos en un protoboard. Aunque al principio hubo complicaciones con las conexiones y la programación, poco a poco se logró entender cada parte del circuito, lo que nos ayudó a concretar su funcionamiento y lograr la comunicación.

Este proyecto no solo permitió aplicar la teoría en la práctica, sino también comprender lo que se pedía y tratar de no complicarse en la parte práctica.

 

Brayan Chan

Este proyecto nos permitió comprender de forma práctica cómo funciona la comunicación infrarroja y la importancia de cada componente en el circuito. Aprendimos a programar el ATtiny85 con Arduino Uno para generar la frecuencia exacta necesaria, y a armar el circuito en el protoboard basándonos en un diagrama.


Aunque hubo errores bastante sencillos de resolver, no sabíamos con certeza cuál era el que impedía que se enviaran los datos. Pero al final, los solucionamos.


Esta práctica del transmisor serial infrarrojo me dejó un gran interés por cómo aplicar este tipo de comunicación inalámbrica en otras áreas o proyectos.

Referencias.

Instructables. (2025, 16 mayo). How to Program an Attiny85 Using a Arduino Uno. Instructables. 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

Domando Ingeniería. (2022, 3 junio). Como Programar Attiny con Arduino Nano para Proyectos con Arduino Simples [Vídeo]. YouTube. https://www.youtube.com/watch?v=A-Z9vzR7VL0

Para comentar debes acceder Acceder

Comentarios


No hay comentarios en este post