Trasmettirore IR ESP8266 (ESP-12)

LED IR e MCU ESP8266

Per questo progetto ho utilizzato un led  IR KEL5002A con picco di emissione a 940nm

KEL5002A_max_rate.png

Questo led può essere pilotato da un segnale impulsivo con una corrente di picco di 1A per ottenere la massima intensità di emissione IR (e quindi la massima portata del sistema di trasmissione). Per lo scopo di questo progetto non è sufficiente una portata di qualche metro ed quindi è possibile pilotare il led direttamente da un pin GPIO,  aggiungendo soltanto una resistenza per limitare la corrente in uscita. Per ottenere una corrente più elevata sarebbe invece stato necessario pilotare il led con un circuito “driver” opportunamente dimensionato.

Le uscite digitali di ESP8266 possono fornire al massimo una corrente di 12mA a 3.3V. Si tratta di un valore notevolmente inferiore ai 40mA  tipici della schede Arduino.

polarizzaizone_kel5002_emissione

La caduta di tensione ai capi del diodo è di circa 1.2V.  Mettendo una resistenza da 220 ohm in serie a led si ottiene quindi una corrente di circa 10mA.

polarizzaizone_kel5002_tensione

Hardware

Per realizzare questo progetto ho utilizzato una Devboard NodeMCU che utilizza un modulo ESP-12 ed integra connessione USB, alimentazione e pin di connessione facili da utilizzare su breadboard.

scema_led_ir

I LED è pilotato con un segnale ad onda quadra con frequenza di circa 38Khz in modo da poter essere facilmente decodificato da ricevitori IR integrati.

5159e97ece395f9643000000
Modulazione segnale IR con burst di impulsi 
51153f0dce395f773f000005
Modulazione e demodulazione IR. Animazione tratta da sbproject.

Software

const long burstDuration = 300; //pulse burst duration [microseconds]
const long outOffTime = 300; //pause between two bursts  [microseconds]
unsigned long lastTransmissionOnTime =0;
unsigned long lastTrasmissionEndTime =0;
bool isTransmitting =false;
unsigned long currentMicros = 0;

void setup() {
 analogWriteFreq(38000); //set PWM 38KHz
}

void loop() {
 currentMicros = micros();
 
 if(isTransmitting){
    if(currentMicros>lastTransmissionOnTime+burstDuration){
       //turn off PWM out pin
       analogWrite(D1, 0);
       isTransmitting=false;
       lastTrasmissionEndTime=currentMicros;
    }
 }else{
    if(currentMicros>lastTrasmissionEndTime+outOffTime){
       //turn on PWM out pin
       lastTransmissionOnTime=currentMicros;
       analogWrite(D1, 512); //512 --> 50% duty cycle
       isTransmitting=true;
    }
 }
}

 

Annunci

One thought on “Trasmettirore IR ESP8266 (ESP-12)

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...