collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: IR comando  (Lida 6858 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
IR comando
« em: 22 de Julho de 2013, 09:34 »
Bom  dia,
Acontece que  tenho um projecto  +/- preparado codigo dos comandos gravados, pcb feitas, e soldadas,  e deixei  o codigo para a ultima da hora, concluindo lixei-me. E só tenho até sexta feira para resolver o problema.

Acontece que a Biblioteca VirtualWire e IRRemote, entram em conflito porque  ambos usam o timer.

Como não consegui resolver este problema fui passar umas  horas ao google e descobri uma possivel solução, mas no entanto não como o problema foi resolvido, porque o meu inglês é medíocre e o tradutor não é melhor não percebo o que quer dizer com 4 usec steps. http://forum.arduino.cc/index.php?topic=66430.0

Se puderem ajudar agradeço
« Última modificação: 22 de Julho de 2013, 09:41 por dio123 »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: IR comando
« Responder #1 em: 22 de Julho de 2013, 17:05 »
Altera as bibliotecas para funcionarem em conjunto.
Passos de 4us, convinha ao menos fazeres um quote, não vou ler isso só para chegar ou não ao texto que tens duvidas...
Os comandos IR mandam pulsos via IR, possivelmente esse código que falam no tópico só consegue enviar pulsos multiplos de 4us, 4,8,12,16,18, etc..
Avr fanboy

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: IR comando
« Responder #2 em: 22 de Julho de 2013, 17:26 »
Podes espreitar este projecto meu e ver se te ajuda...
http://sequencedecoder.weebly.com/
Estas a tentar controlar o quê mesmo?

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: IR comando
« Responder #3 em: 22 de Julho de 2013, 18:11 »
Boa tarde,
Tenho uma box tdt satélite, e na casa de férias passa imagem para 2 televisões.  E eu quero mudar de canal sem estar a ir ao piso 1.
Do piso 0 envio o código de um outro comando e no piso 1 recebo o código e faz a equivalência ao comando da box.

O problema está nos timers das bibliotecas, mas nao tenho capacidade de alterar o codigo, porque não percebo grande parte do microcontrolador,  e nao tenho estudo para isso

tarquinio Vou exprimentar o site que me deu.

O comentário que não percebo é este.
Citar
how do i give delay of 8.8 uS..
the delayMicroseconds() takes only integer values..

And only has resolution of 4 usec steps.

Quote
Returns the number of microseconds since the Arduino board began running the current program. This number will overflow (go back to zero), after approximately 70 minutes. On 16 MHz Arduino boards (e.g. Duemilanove and Nano), this function has a resolution of four microseconds (i.e. the value returned is always a multiple of four).
[/color]

is there any kind of delay around nanoseconds?

None avalible or really possible as basic single instruction timing is around 64 nsec.   
« Última modificação: 22 de Julho de 2013, 18:13 por dio123 »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: IR comando
« Responder #4 em: 22 de Julho de 2013, 18:35 »
É basicamente o que disse...
Com delays só fazes delays multiplos de 4us, logo se precisas de um delay que não de 4 us, é simples, meter nops á mão, não é que seja algo ideal, mas funciona garantidamente.
Já agora, para que é que precisas dessa virtualWire e o que é que isso faz?
Avr fanboy

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: IR comando
« Responder #5 em: 22 de Julho de 2013, 18:56 »
A library que eu fiz tambem não usa os registos directamente (o que significa que poderia ser mais precisa) mas nunca tive problemas por causa disso. Os receptores de infravermelhos parecem ter um range de frequencias maior do que eu estava à espera quando comecei a desenvolver essa library.
Aqui em casa tenho um sistema parecido, com o sinal de uma ZONbox a ir para várias televisões e com vários sensores espalhados pela casa para poder controlar a box de qualquer lado, funciona tudo ok :)

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: IR comando
« Responder #6 em: 22 de Julho de 2013, 20:42 »
Neste caso a biblioteca virualwire e usada para receber o código do comando que vem do piso 0 para o piso 1 por rf 433mhz.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: IR comando
« Responder #7 em: 23 de Julho de 2013, 00:39 »
Não precisas de essa biblioteca para NADA, se esses módulos falam serial, usa serial nativo, metes um checksum no fim dos dados e está feito.
Avr fanboy

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: IR comando
« Responder #8 em: 23 de Julho de 2013, 17:29 »
Boa tarde,
Estou aqui na volta disto e não consegui nada de jeito.

Estou enviar uma letra A em cada segundo, mas no receptor recebo montes de  coisas, mas não tem nenhum padrão fixo. A mim dá-me a impressão que os numeros e letras são alatórios.
E mesmo sem o receptor ligado ao pino rx o led acende

Mas é +/- isto que o senso sugeriu que eu usa-se?


Citar
int led = 13;
#include <LiquidCrystal.h>
int incomingByte = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(1200);
  lcd.begin(16, 2);
}
void loop() {         
    if (Serial.available() > 0) {
                 incomingByte = Serial.read();
                 lcd.print(incomingByte, HEX);
                    if (incomingByte == 'A')
                 {
                     digitalWrite(led, HIGH);
                     dela
                 }
    }
       incomingByte = 0;
}

Citar
Envia letra   

void setup() {
 Serial.begin(1200);       
}
void loop(){
     Serial.print('A', HEX);    // send data out tx
     delay(1000);
 }
 
« Última modificação: 23 de Julho de 2013, 17:31 por dio123 »

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: IR comando
« Responder #9 em: 23 de Julho de 2013, 21:07 »
Ainda não percebi bem exactamente que hardware é que estas a usar para enviar o sinal... É algo deste tipo?
http://www.electan.com/433mhz-link-kit-p-3039-en.html

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: IR comando
« Responder #10 em: 23 de Julho de 2013, 21:16 »
Ah e agora que olhei bem para o código... Estás a enviar 'A' em hex, o que significa qhe ele vai enviar "41".
Depois ao ler estas a ler o 4 e o 1 em separado...

Tens de enviar e receber as coisas sempre da mesma forma.
Porque não fazes simplesmente
Código: [Seleccione]
Serial.print('A'); 

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: IR comando
« Responder #11 em: 23 de Julho de 2013, 22:05 »
tarquinio - sim, os kits rf são iguais a esses de 433Mhz.

O problema é que sem o transmissor ligado estou sempre a receber dados de algures, ou é intereferencia ou não sei.

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.649
    • Electronic Gear for Musicians
Re: IR comando
« Responder #12 em: 23 de Julho de 2013, 22:26 »
Eh perfeitamente normal acontecer isso c esses modilos pois nao teem qq forma de tratamento de dados, trabalham em tipo CW AM ou CW FSQ.

A maneira de resover isso eh criar um protocolo de comunicacao. Algo simples tal como enviat e Cabecalho-Dados-CRC.
Assim so passa o q tiver sido enviado pelo transmissor e nao pelo ruido ambiente.



Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: IR comando
« Responder #13 em: 23 de Julho de 2013, 23:40 »
Pois eu tb tenho projectos com módulos desses e tive o mesmo problema... É como o asena disse, os receptores apanham ruido de todo o lado. Tens de implementar o teu protocolo de tratamento de comunicação e filtrar as mensagens no receptor... Eu faria algo do tipo um header com 2 bytes fixos + 1 byte para indicar o tamanho da mensagem + n bytes da mensagem + um crc de 2 bytes. Não é algo muito complicado e já deve filtrar o ruido todo.
A minha experiencia com esse tipo de módulos é que apanham realmente muita interferencia mas quando o transmissor está a enviar coisas até se portam bem, pelo menos para velocidades de transmissão baixas.

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: IR comando
« Responder #14 em: 26 de Julho de 2013, 18:14 »
Boa tarde,
Encontrei um projecto onde tem aquilo que preciso. Usar rf nos pinos tx e rx
http://nootropicdesign.com/projectlab/2010/12/26/rf-wireless-temperature-sensor/

Fui exprimentar, mas a transmissão está muito lenta, ou está a falhar muitas recepções.
Estou a usar velocidade 1200. Neste caso adaptei e ficou assim.
Atmega recebe o comando envia o outro atmega recebe e liga e desliga o led. No entanto é preciso clicar no camando muitas das vezes não apaga nem acende o led a primeira.

« Última modificação: 26 de Julho de 2013, 23:18 por dio123 »