Show Posts
Pages: [1] 2
1  International / Portugues / Re: Acionar saídas Digitais do Arduino + Xbee - usando Visual C# - Urgente on: January 04, 2012, 06:48:10 pm
Acabei de fazer um teste aqui usando o X-CTU... Na verdade, em modo API nunca vou receber as letras propriamente ditas....

Recebo isso:
~.
.....@l.....EG~.     ---> Apertei Letra E
.....@l.....R:~.      ---> Apertei Letra R
.....@l.....EG~.     ---> Apertei Letra E
.....@l.....R:         ---> Apertei Letra R

Tem isso aí acima em Hexadecimal também....

Pois é, como faço o "decoder" disso aí acima dentro do Arduino para eu acionar os relés???

Abraço,
2  International / Portugues / Acionar saídas Digitais do Arduino + Xbee - usando Visual C# - Urgente on: January 04, 2012, 06:17:25 pm
Senhores,

Estou com um baita problema e não sei se vocês podem me ajudar:

Estou usando uma tela de supervisório com 4 botões, onde tento acionar remotamente, em um conjunto arduino (stalker V2) + Xbee Pro S2 as saídas digitais que posteriormente acionará uma carga AC (placa de relés).

Que que eu fiz: Fui no programa X-CTU ou RCOM-MeshBee e vou usar as letras QWERTYUI para ligar/desligar as saídas. Por exemplo: Q = Liga saída 10; W = Desliga saída 10; E = Liga saída 11; R = Desliga saída 11... Daí, as letras acima em hexadecimal enviadas a esse kit, são por exemplo: Q - 7E 00 0F 10 00 00 13 A2 00 40 6C BC 73 23 41 00 00 51 AA ; W - 7E 00 0F 10 00 00 13 A2 00 40 6C BC 73 23 41 00 00 57 A4 e assim sucessivamente...

Dentro do meu arduino, estou usando a seguinte lógica, dentro de um programa relativamente extenso:

if(Serial.available()>0)
  {
   if(Serial.read() == 'Q')
   digitalWrite(10, HIGH);
   if(Serial.read() == 'W')
   digitalWrite(10, LOW);
   
   if(Serial.read() == 'E')
   digitalWrite(11, HIGH);
   if(Serial.read() == 'R')
   digitalWrite(11, LOW);
   
   if(Serial.read() == 'T')
   digitalWrite(12, HIGH);
   if(Serial.read() == 'Y')
   digitalWrite(12, LOW);
   
   if(Serial.read() == 'U')
   digitalWrite(13, HIGH);
   if(Serial.read() == 'I')
   digitalWrite(14, LOW); 
  }

Entretanto, na hora que envio o comando, vejo que o kit está recebendo a informação por causa do led RSSI, entretanto as saídas não são acionadas.

Pergunto: Alguém sabe o que está acontecendo?

Estou usando modo API no Xbee. Por favor, se alguém souber de alguma coisa, qualquer informação é bem vinda!

Obrigado!
3  International / Portugues / Re: Acionar, via arduino, pino 9 Xbee (Hibernação) on: January 03, 2012, 07:46:49 pm
Fechado!
Coloque lá que vou tentar descobrir o pino! Amanhã a gente testa!!!!
Abraço,
4  International / Portugues / Re: Acionar, via arduino, pino 9 Xbee (Hibernação) on: January 03, 2012, 07:37:47 pm
Fechado!
5  International / Portugues / Re: Acionar, via arduino, pino 9 Xbee (Hibernação) on: January 03, 2012, 07:26:52 pm
Eita amigo... não é esse shield não. Uso o stalker V2 (http://www.seeedstudio.com/wiki/Seeeduino_Stalker_v2.1)

Abaixo, segue o código que estou usando. Agradeço sua colaboração!!!
Veja se pode me ajudar.

#include <math.h>

#define TEMPERATURA_ADC 1
#define CORRENTE_ADC    0
#define BAT_ADC         7

#define blinkLed 8

#define BAUDRATE 9600

void sendXbeeTxAPI(byte address64bits[], byte divisor, int valor, int latency_ms, boolean typeTransmission);


   float pad = 9805;                       //valor resistencia do divisor de tensão
                                       
   float thermr = 10000;   float Temp;
   
   long previousMillis = 0;
   long previousMillis2 = 0;
   
   long interval = 1000;
   
   //For analog read
   double value;

   //Constants to convert ADC divisions into mains current values.
   double ADCvoltsperdiv = 0.0032;
   double VDoffset = 1.25; //Initial value (corrected as program runs)

   //Equation of the line calibration values
   double factorA = 15.2; //factorA = CT reduction factor / rsens
   double Ioffset = -0.08;
     
   //Constants set voltage waveform amplitude.
   double SetV = 127;

   //Counter
   int i=0;

   int samplenumber = 1000;
 
   //Used for calculating real, apparent power, Irms and Vrms.
   double sumI=0.0;
 
   int sum1i=0;
   double sumVadc=0.0;

   double Vadc,Vsens,Isens,Imains,sqI,Irms;
   double apparentPower;
   
void setup()
{
  pinMode(blinkLed, OUTPUT);
  Serial.begin(BAUDRATE); 
}

void loop()
{
   unsigned long currentMillis = millis();
   if(currentMillis - previousMillis > interval) {
     
      previousMillis = currentMillis;
     
      //SUPERVISORIO#########################################################
      byte address64bits[] = {0x00, 0x13, 0xA2, 0x00, 0x40, 0x6C, 0xBC, 0xC5};
      int latency_ms = 50;
     
      //trata dado temperatura e envia pacote API para coordenador
      byte divisor = 'Q';
      int valor = Temp;
      sendXbeeTxAPI(address64bits, divisor, valor, latency_ms, true);
     
      //trata dado corrente e envia pacote API para coordenador
      divisor = 'W';
      valor = Irms;
      sendXbeeTxAPI(address64bits, divisor, valor, latency_ms, true);
     
      //trata dado tensão bateria e envia pacote API para coordenador
      divisor = 'U';
      analogReference(DEFAULT);//referencia de tensão interna 1.1v no Atmega328
      int valorADC = analogRead(7);
      valor = valorADC*3;       
      sendXbeeTxAPI(address64bits, divisor, valor, latency_ms, true);
     
     
      //ETHERNET#############################################################
      address64bits[0] = 0x00; address64bits[1] = 0x13; address64bits[2] = 0xA2; address64bits[3] = 0x00;
      address64bits[4] = 0x40; address64bits[5] = 0x6F; address64bits[6] = 0x21; address64bits[7] = 0x68;
      latency_ms = 50;
     
      //trata dado temperatura e envia pacote API para ethernet
      divisor = 'Q';
      valor = Temp;
      sendXbeeTxAPI(address64bits, divisor, valor, latency_ms, true);
     
      //trata dado corrente e envia pacote API para ethernet
      divisor = 'W';
      valor = Irms;
      sendXbeeTxAPI(address64bits, divisor, valor, latency_ms, true);
     
      //trata dado tensão bateria e envia pacote API para ethernet
      divisor = 'U';
      analogReference(DEFAULT);//referencia de tensão interna 1.1v no Atmega328
      valorADC = analogRead(7);
      valor = valorADC + valorADC + valorADC;   
      sendXbeeTxAPI(address64bits, divisor, valor, latency_ms, true);
     
      }
     
   corrente();
   temperatura();
 
}

void temperatura(){
  analogReference(DEFAULT); 
  value = analogRead(TEMPERATURA_ADC);
 
  long Resistance;   
 
  Resistance=((1024 * pad / value) - pad);
  Temp = log(Resistance);
  Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
  Temp = Temp - 273.15;     
}

void corrente(){
   analogReference(DEFAULT);
   value = analogRead(CORRENTE_ADC);
   //Summing counter
   i++;
   //Voltage at ADC
   Vadc = value * ADCvoltsperdiv;
   //Remove voltage divider offset
   Vsens = Vadc-VDoffset;
   //Current transformer scale to find Imains
   Imains = Vsens;                 
   //Calculates Voltage divider offset.
   sum1i++; sumVadc = sumVadc + Vadc;
   if (sum1i>=1000) {VDoffset = sumVadc/sum1i; sum1i = 0; sumVadc=0.0;}
   //Root-mean-square method current
   //1) square current values
   sqI = Imains*Imains;
   //2) sum
   sumI=sumI+sqI;
   if (i>=samplenumber)
   { 
      i=0;
      //Corrente em mA
      Irms = 100*factorA*sqrt(sumI/samplenumber)+Ioffset;
                   
      apparentPower = Irms * SetV;
       
      sumI=0.0;
 
   }
}

void sendXbeeTxAPI(byte address64bits[], byte divisor, int value, int latency_ms, boolean typeTransmission)
{
  if(value > 9999)
  return;
 
  if (typeTransmission)
  {
      byte unidade = value%10+0x30;
      value /= 10;     
      byte dezena = value%10+0x30;
      value /= 10;
      byte centena = value%10+0x30;
      value /= 10;     
      byte milhar = value%10+0x30;
     
      //Inicializa pacote API
      //0x7E inicia pacote
      Serial.print(0x7E ,BYTE);
      //Tamanho pacote MSB
      Serial.print(0x00 ,BYTE);
      //Tamanho pacote LSB
      Serial.print(0x16 ,BYTE);
      //Frame ID (0x10: transmissão mensagem)
      Serial.print(0x10 ,BYTE);
      //Sem retorno de resposta
      Serial.print(0x00 ,BYTE);
      //64 bits address
      Serial.print(address64bits[0] ,BYTE);
      Serial.print(address64bits[1] ,BYTE);
      Serial.print(address64bits[2] ,BYTE);
      Serial.print(address64bits[3] ,BYTE);
      Serial.print(address64bits[4] ,BYTE);
      Serial.print(address64bits[5] ,BYTE);
      Serial.print(address64bits[6] ,BYTE);
      Serial.print(address64bits[7] ,BYTE);
      //16 bit MY
      //Se desconhecido, MY: 0xFFFE
      Serial.print(0xFF ,BYTE);
      Serial.print(0xFE ,BYTE);
      //Opcções de envio
      Serial.print(0x00 ,BYTE);
      Serial.print(0x00 ,BYTE);
      //Pacote de mensagem
      Serial.print('[' ,BYTE);
      Serial.print(divisor ,BYTE);
      Serial.print(':' ,BYTE);
      Serial.print(milhar ,BYTE);
      Serial.print(centena ,BYTE);
      Serial.print(dezena ,BYTE);
      Serial.print(unidade ,BYTE);
      Serial.print(']' ,BYTE);
      //Soma do checksum
      long sum = 0x10 +
                 address64bits[0] +
                 address64bits[1] +
                 address64bits[2] +
                 address64bits[3] +
                 address64bits[4] +
                 address64bits[5] +
                 address64bits[6] +
                 address64bits[7] +
                 0xFF + 0xFE +
                 '[' + divisor + ':' +
                 milhar + centena + dezena + unidade + ']';
                 
      Serial.print(0xFF - (sum & 0xFF) ,BYTE);
  }
 
  if (!typeTransmission)
  {
      byte valueHighBit = value >> 8 & 0xFF;
      byte valueLowBit  = value & 0xFF;
     
      //Inicializa pacote API
      //0x7E inicia pacote
      Serial.print(0x7E ,BYTE);
      //Tamanho pacote MSB
      Serial.print(0x00 ,BYTE);
      //Tamanho pacote LSB
      Serial.print(0x14 ,BYTE);
      //Frame ID (0x10: transmissão informação)
      Serial.print(0x10 ,BYTE);
      //Sem retorno de resposta
      Serial.print(0x00 ,BYTE);
      //64 bits address
      Serial.print(address64bits[0] ,BYTE);
      Serial.print(address64bits[1] ,BYTE);
      Serial.print(address64bits[2] ,BYTE);
      Serial.print(address64bits[3] ,BYTE);
      Serial.print(address64bits[4] ,BYTE);
      Serial.print(address64bits[5] ,BYTE);
      Serial.print(address64bits[6] ,BYTE);
      Serial.print(address64bits[7] ,BYTE);
      //16 bit MY
      //Se desconhecido, MY: 0xFFFE
      Serial.print(0xFF ,BYTE);
      Serial.print(0xFE ,BYTE);
      //Opcções de envio
      Serial.print(0x00 ,BYTE);
      Serial.print(0x00 ,BYTE);
      //Pacote de mensagem
      Serial.print('[' ,BYTE);
      Serial.print(divisor ,BYTE);
      Serial.print(':' ,BYTE);
      Serial.print(valueHighBit ,BYTE);
      Serial.print(valueLowBit ,BYTE);

      Serial.print(']' ,BYTE);
      //Soma do checksum
      long sum = 0x10 +
                 address64bits[0] +
                 address64bits[1] +
                 address64bits[2] +
                 address64bits[3] +
                 address64bits[4] +
                 address64bits[5] +
                 address64bits[6] +
                 address64bits[7] +
                 0xFF + 0xFE +
                 '[' + divisor + ':' +
                 valueHighBit + valueLowBit + ']';
                 
      Serial.print(0xFF - (sum & 0xFF) ,BYTE);     
  }
 
      //digitalWrite(8, HIGH);
      //delay(latency_ms);
      //digitalWrite(8, LOW);
6  International / Portugues / Re: Acionar, via arduino, pino 9 Xbee (Hibernação) on: January 03, 2012, 07:16:45 pm
Na verdade irá monitorar constantemente a temperatura, corrente de um motor elétrico de 15cv, além do nível de tensão de bateria que alimenta o "kit".

Na verdade, queria mesmo que ele acordasse a cada 10s, enviasse e voltasse a dormir, simples, sem muita embolação, mais mesmo para economia de energia e prolongamento da vida útil, visto que terei um painel solar para apoio.

Diante dos fatos, a programação seria exatamente aquela que você passou acima?
7  International / Portugues / Re: Acionar, via arduino, pino 9 Xbee (Hibernação) on: January 03, 2012, 07:00:38 pm
Então,

o Pino 9 é no Xbee, mas qual pino do arduino que representa o 9 do xbee estou procurando agora....

Devo colocar isso ao final da rotina, para, enviar e dormir, enviar e dormir e assim infinitamente...

OK?
8  International / Portugues / Acionar, via arduino, pino 9 Xbee (Hibernação) on: January 03, 2012, 06:35:36 pm
Senhores,

Boa noite!

Qual o comando que devo colocar na rotina do meu arduino para eu acionar/desacionar o pino 9 do Xbee preso a ele para que eu possa usar a função hibernação.

Abraço,
9  Using Arduino / Project Guidance / Remote configuration X-CTU Arduino + Xbee: not works... why? on: October 27, 2011, 10:03:59 pm
Why when I try to do a remote configuration of my XBee (either router or end device, so api), and while they are connected to the arduino Stalker, they do not appear in the remote X-CTU and therefore can not perform a remote configuration?

I'm a few days ago with this problem, but so far unsolved.

Thank you!
10  International / Portugues / Configuração remota X-CTU Xbee conectado ao Arduino - Não aparece on: October 27, 2011, 09:52:22 pm
Senhores,

Por que quando tento fazer uma configuração remota do meu xbee (seja ele router ou end device, modo api), estando eles conectados ao arduino Stalker, eles não aparecem no modo remoto do X-CTU e consequentemente não consigo realizar uma configuração remota?

Estou há dias com esse problema, mas até agora sem solução.

Obrigado!
11  International / Portugues / Re: Arduino X Reles 12v on: October 18, 2011, 08:27:35 pm
Ow. Você não tem dessas placas prontas para vender????
12  International / Portugues / Re: [Problemão] Comunicação entre vários arduinos (com Xbee) sem erros - Roteamento on: October 18, 2011, 08:25:15 pm
Rapaziada,

Consegui fazer a rede ter roteamento automático, porém só na ida, ou seja, tenho um router e 2 end. Afasto os 3 do coordenador até perder o sinal. Insiro uma antena no router que comunica com o coordenador e os 2 end conectam nele fazendo ponte.... tudo ok por aí...

Porém, quando desligo o router e coloco os 2 end perto do coordenador de volta, não comunica de jeito nenhum. Daí só dando um reset no buffer xbee (botão no arduino) para que ele volte comunicar.

Alguém tem pelo menos algum palpite?

obrigado!
13  International / Portugues / Re: [Problemão] Comunicação entre vários arduinos (com Xbee) sem erros - Roteamento on: October 16, 2011, 07:35:36 pm
Wagner:

Boa noite!

Tenho um xbee coordenador API, um outro xbee Router API e outros 2 xbee end device API.

Por que quando coloco todos na rede e afasto meu end devices até perder sinal com o coordenador e levo o router a meia distância para fazer a ponte, sendo que o router consegue comunicar com o coordenador, por que os end device não fazer a ponte com o router para comunicar com o coordenador automaticamente?

Tem alguma configuração em específico para isso dentro do X-CTU?

Quero lembrar que dentro do meu algoritmo (no arduino) há o endereço de destino de todos eles, que é o MAC do coordenador. Testei aquilo que você disse acima, mas não está funcionando.

Obrigado!
14  International / Portugues / Re: [Problemão] Comunicação entre vários arduinos (com Xbee) sem erros - Roteamento on: October 16, 2011, 06:50:42 pm
Opa!

A parada do lixo que estava falando era do cabeçalho do pacote. O dado, entre colchetes, está íntegro. Quando eu coloco em Hexa, aparece certinho.

Vou testar agora a parada que você disse do router. Vou inserir um na rede, router API, com o mesmo software do Arduino que tem nos outros e testar para ver se ele faz a ponte com o coordenador. Depois tiro ele de campo e vamos ver no que vai dar.

Obrigado por enquanto. Outras dúvidas surgirão e conto com seu apoio.
15  International / Portugues / Re: [Problemão] Comunicação entre vários arduinos (com Xbee) sem erros - Roteamento on: October 16, 2011, 02:29:36 pm
Grande Grande... Obrigado pelas respostas.

Coloquei meu coordenador como API e aquilo que estava vindo aparentemente legal começou a vir assim agora:

Dentro dos colchetes continua legal, mas esse lixo fora, não faço a mínima idéia do que seja... Tem algum palpite?


C~.......@n..."A[F:0606]?~.......@n....A[C:0576]?~.......@n..|.A[T:0026].~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n....A[A:0000]S~.......@n....A[A:0000]S~.......@n....A[B:0042]L~.......@n....A[C:0576]?~.......@n....A[B:0043]K~.......@n..."A[E:0000]L~.......@n..."A[E:0045]C~.......@n....A[C:0576]?~.......@n..."A[F:0606]?~.......@n..|.A[T:0026].~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n..."A[E:0044]D~.......@n..."A[F:0606]?~.......@n..."A[E:0000]L~.......@n..|.A[T:0026].~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n..."A[E:0000]L~.......@n..."A[E:0045]C~.......@n..."A[F:0606]?~.......@n....A[A:0000]S~.......@n....A[B:0043]K~.......@n....A[C:0576]?~.......@n....A[B:0043]K~.......@n....A[A:0000]S~.......@n....A[B:0043]K~.......@n..|.A[I:0003].~.......@n....A[C:0576]?~.......@n..|.A[B:0636].~.......@n..."A[E:0000]L~.......@n..."A[E:0009]C~.......@n..."A[F:0606]?~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n..."A[E:0000]L~.......@n..."A[E:0046]B~.......@n..."A[F:0606]?~.......@n....A[A:0000]S~.......@n....A[B:0042]L~.......@n....A[C:0576]?~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n..."A[E:0000]L~.......@n..."A[E:0045]C~.......@n..."A[F:0606]?~.......@n....A[A:00(-]^~.......@n....A[B:0027]I~.......@n....A[C:0576]?~.......@n....A[A:0000]S~.......@n..."A[E:0000]L~.......@n..."A[E:0045]C~.......@n..."A[F:0606]?~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n....A[A:0000]S~.......@n....A[B:0043]K~.......@n....A[C:0576]?~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n....A[A:0000]S~.......@n....A[B:0043]K~.......@n....A[C:0576]?~.......@n..|.A[T:0026].~.......@n..|.A[I:0003].~.......@n..|.A[B:0636].~.......@n..."A[E:0000]L~.......@n..."A[E:0009]C~.......@n..."A[F:0606]?
Pages: [1] 2