terça-feira, 20 de junho de 2017

Modulo Infravermelho YS-IRTM

Modulo Sensor/Atuador Infravermelho YS-IRTM

O módulo infravermelho possui um sensor e um emissor infravermelho para comunicação com aparelhos eletrônicos que usem a codificação NEC.

O protocolo NEC está descrito em detalhes no artigo:

http://www.sbprojects.com/knowledge/ir/nec.php

Um comando é transmitido apenas uma vez, mesmo quando a tecla no controle remoto permanece pressionada. A cada 110 ms um código de repetição é transmitido enquanto a tecla permanece pressionada. Este código de repetição é simplesmente um pulso AGC de 9ms seguido por um espaço de 2,25ms e uma rajada de 560μs.

Mas tudo isso é detalhe, pois o módulo realiza esta (de)codificação automaticamente e a comunicação é feita através de duas linhas seriais, TX e RX, que podem ser ligadas, respectivamente, nas linhas RX e TX do Arduino Galileo/Uno. A pinagem está definida claramente na serigrafia da placa do módulo, cuja alimentação é de 5 Volts.

Use preferencialmente no Arduino as portas 2 (RX)  e 3 (TX), que e podem ser acessadas com a biblioteca Serial2. Caso você utilize uma versão diferente de Arduino, pode usar as portas 0 (RX)  e 1 (TX) para esta função e a biblioteca Serial.

Para transmissão, por exemplo, de um sinal codificado 1C 2F 33, enviar a seguinte sequência para a saída TX:  {A1, F1,1C, 2F, 33}.

A velocidade padrão de comunicação da porta serial do módulo é de 9600 bauds, mas é possível alterar essa velocidade  por exemplo, para 57600 bauds, com o comando {A1, F3,04,00,00}, onde o terceiro byte é codificado com a seguinte tabela:

01 - 4800 bps
02 - 9600 bps
03 - 19200bps
04 - 57600bps

Para receber um código, basta apenas receber os dados pela porta serial. Quando fazemos a operação de decodificação, só precisa apontar o controle remoto para o receptor infravermelho, pressionar o botão para ser decodificado, para ver o resultado de decodificação pelo assistente de depuração de serial, o resultado é uma saída como “Código do usuário 1 + Código de Usuário 2 + código de comando”. 

Então, se você receber o código 04 FB 12, para enviar o mesmo código usando o módulo YS-IRTM, você tem que enviar os  "start" bytes A1, F1 primeiro. Então, o código para ser enviado deve parecer como  A1 F1 04 FB 12. 

Veja maiores detalhes:

 https://forum.arduino.cc/index.php?topic=359707.0

Para a programaçãoem Javascript, com uso do Johnny-five, não há API disponĩvel para este módulo. É necessário então o uso da rotina de comunicação serial da biblioteca StandardFimataPlus, já que na biblioteca StandardFirmata, as interfaces serias não estão habilitadas.

Veja o exemplo de teste a seguir:

var Board = require("firmata");

Board.requestPort(function(error, port) {
if (error) {
console.log(error);
return;
}

var board = new Board(port.comName);

board.on("ready", function() {
console.log("READY");

var HW_SERIAL1 = board.SERIAL_PORT_IDs.HW_SERIAL1;
var maxBytesToRead = 4;

board.serialConfig({
portId: HW_SERIAL1,
baud: 9600
});

// leave 2nd parameter (maxBytesToRead) to read all available bytes in buffer
// board.serialRead(HW_SERIAL1, maxBytesToRead, function(data) {
board.serialRead(HW_SERIAL1, function(data) {
console.log(new Buffer(data).toString("hex"));
});

board.on("string", function (message) {
console.log(message);
});

// log serial pin numbers
for (var pin in board.pins) {
var modes = board.pins[pin].supportedModes;
for (var mode in modes) {
if (modes[mode] === board.MODES.SERIAL) {
console.log("serial pin: " + pin);
}
}
}

});
});


 

Um comentário:

  1. eu sei que tem 3 anos mas obrigado cara, me ajudou muito, vou ficar te devendo essa kkk

    ResponderExcluir