Loading...
  Show Posts
Pages: 1 ... 3 4 [5] 6 7 ... 20
61  International / Portugues / Re: AJUDA COM PINOS TX / RX on: October 16, 2011, 11:10:15 pm
Não conheço a biblioteca e nem este dispositivo RF então fico te devendo essa. Vamos ver se alguém no fórum possa te dar uma luz.
62  International / Portugues / Re: [Problemão] Comunicação entre vários arduinos (com Xbee) sem erros - Roteamento on: October 16, 2011, 03:26:00 pm
Tudo isto tem no datasheet e eu já respondi isto em outro post nesta thread.

Tou dando CTRL+C, CTRL+V:
Quote
Com ele no modo API, você vai precisar desenvolver um software no PC, que vai abrir a porta serial(UartSbee com o coordenador) e "decifrar" os pacotes que chegam. Eu geralmente uso python e um módulo chamado python-xbee(http://code.google.com/p/python-xbee/).
63  International / Portugues / Re: [Problemão] Comunicação entre vários arduinos (com Xbee) sem erros - Roteamento on: October 16, 2011, 01:40:29 pm
O que você sugere de melhoria?
não sei, isto cabe a você testar e ver o que é melhor no seu projeto.

Outra coisa, existe uma forma de ordenar os dados recebidos? (sem ser aquela história que estamos querendo fazer do request/ack)?
Não tem. XBee é FIFO(first-in, first-out).

O coordenador ficará mesmo em modo AT, não haverá problema?
Não sei, como eu disse eu nunca utilizei XBee desta maneira.

Todos os programas do Arduino estão endereçados ao nó coordenador (13A200 406CBCC5). Se quiséssemos colocar um router no meio, conforme escopo desenhado do projeto, iria funcionar do mesmo jeito? E se tirássemos o router, a rede iria automaticamente se ajustar (meio óbvio que não).... Existe algum algoritmo pronto para isso? Uma rotina automática?
Eu ACHO que os XBee's se ajustam automaticamente sim. Se você configurar um como router e os end devices descobrem que a qualidade de sinal do router é melhor eles começam a utiliza-lo. Se você desligar ele, os end-devices vão demorar um tempinho mas vão começar a ir direto para o coordenador. Recomendo a você ler o datasheet do seu XBee lá com certeza fala como funciona isto.

Observe uma coisa, pode ser do programa - veja que não é cíclico (no caso abaixo deixei apenas 1 kit funcionando).
Matemática simples. 50ms é MUITO rápido. Você está mandando 25 bytes de cada arduino por ciclo que tem um delay de 50 milisegundos. 25bytes são 200 bits(vamos chamar isto de "pacote"). Se você estiver usando 9600bps de baud rate, você conseguiria enviar/receber apenas 48 "pacotes" por segundo(9600bps/200 bits). E você está enviando 20(1 segundo = 1000ms, 1000ms / 50ms = 20) apenas de um kit. Ou seja são 60 pacotes por segundo dos 3 kits. O que está acontecendo é um buffer overflow nos XBee's. Já te expliquei o que acontece quando o buffer enche em outro post nesta thread. É exatamente o comportamento que você está tendo no "receptor".
64  International / Portugues / Re: AJUDA COM PINOS TX / RX on: October 16, 2011, 01:19:49 pm
Muitas perguntas... E não entendi o que o RF TWS-BS3 tem haver com tudo o que você perguntou.

o que estou querendo é saber que instruções via software posso utilizar para enviar via pino tx em um arduino e receber no pino rx do outro arduino
É só ligar o TX do primeiro arduino no RX do outro e RX do primeiro arduino no TX do outro.

gostaria de armazenar está informação enviada, que no caso seria um número, já localizei diversos softwares à respeito mais nenhum conseguiu fazer a comunicação que pretendo.
Se você vai receber um número entre 0-255, isto é um byte. Se você for enviar números entre 0-65535 aí são 2 bytes(é o tipo int). Precisa fazer manipulação de bytes para conseguir mandar os 2 bytes necessários. E assim por diante(o long por exemplo vai até 2 milhões e precisa de 4 bytes). Em http://arduino.cc/en/Reference/VariableDeclaration, no final tem alguns tipos de variáveis que o arduino tem implementado. Eu fiz uma "função" para enviar um float(que são 4 bytes) via serial:
Code:
uint8_t payload[4] = {};
void addToPayload(float f) {
  byte * b = (byte *) &f;
  uint8_t payloadPointer = 0;
  payload[payloadPointer++] = b[0];
  payload[payloadPointer++] = b[1];
  payload[payloadPointer++] = b[2];
  payload[payloadPointer++] = b[3];
}

Depois vc precisa receber isto do outro lado e fazer o inverso(transformar os 4 bytes recebidos em float novamente). Vou deixar isto como exercício para vc.

Para receber 6 bytes do outro lado:
Code:
if (Serial.available() == 6) { // Eu recebi 6 bytes de dados?
  byte ch[6];
  for (int i=0; i<6; i++) {
    ch[i]=Serial.read(); // Aqui você pega efetivamente 1 byte por vêz dos 6 que vc recebeu
  }                            // Agora você tem um array com os 6 bytes que mandou do outro arduino
}

iniciação da porta serial, baudrate, comando de envio, os comandos de recebimento, bibliotecas, como especificar os pinos no void setup.
Iniciar porta serial, baudrate, vc coloca no setup() o Serial.begin(BAUDRATE). Por exemplo Serial.begin(9600) vc inicializa o serial em 9600 bps. Precisa fazer isto nos 2 arduinos para usar o mesmo baudrate. Para enviar, você faz Serial.print("Hello World!") ou Serial.println("Hello World!") a diferença entre os 2 é que o último manda um \r\n(que é o "pular linha").
65  International / Portugues / Re: [Problemão] Comunicação entre vários arduinos (com Xbee) sem erros - Roteamento on: October 14, 2011, 09:38:41 pm
O coordenador mesmo em AT, ele usa API. Só que ele te cospe os dados que chegam diretamente no DOUT.

Qualquer XBee só manda ACK quando o frame_id de quem está mandando os dados é > 0(está no datasheet).

Você já tentou aumentar o tempo de sleep/delay de 50ms para algo 1 segundo e ver se o problema permanece? Você realmente precisa destes dados tão rápido quanto 50ms?

66  International / Portugues / Re: [Problemão] Comunicação entre vários arduinos (com Xbee) sem erros - Roteamento on: October 14, 2011, 09:24:38 pm
Python é uma linguagem de programação como o C# que você está usando e roda em windows tranquilamente. Vai uma curva de aprendizado razoável para trocar o C# por python.

Nada te impede de fazer em C#, entretanto desconheço módulos/libraries prontas para lidar com a API do XBee nesta linguagem o que deve dificultar e aumentar o tempo para ter um código mínimo funcional.

Pode até ser que o coordenador em AT funcione, mas eu pessoalmente nunca fiz desta maneira e não consigo pensar em nada do que pode estar gerando este comportamento de "encavalar" que você descreveu.
67  International / Portugues / Re: [Problemão] Comunicação entre vários arduinos (com Xbee) sem erros - Roteamento on: October 14, 2011, 09:06:33 pm
Você é de SP capital?

As mancadas são normais, só estou tentando te ensinar as boas práticas.

Por partes novamente.

Arduinos:
O link que te passei do google code, é uma library XBee para o arduino pronta. Leia mais aqui: http://www.arduino.cc/en/Hacking/Libraries. Você instala ela(é só descompactar basicamente) e reiniciar a IDE do Arduino. Ela tem diversas funções já prontas para facilitar sua vida quando precisa se comunicar via XBee's usando a API dele. Como eu já disse, olhe os exemplos que vem junto com a library.

Coordenador:
Seu coordenador então está em AT. Bom, esta não é a melhor maneira de fazer isto e eu nunca fiz assim. Acho que você deveria colocar ele em API e por ser um "re-flash" de firmware e configuração, vc vai precisar reprogramar todos os seus end points para entrar na nova rede que o coordenador vai criar.

Com ele no modo API, você vai precisar desenvolver um software no PC, que vai abrir a porta serial(UartSbee com o coordenador) e "decifrar" os pacotes que chegam. Eu geralmente uso python e um módulo chamado python-xbee(http://code.google.com/p/python-xbee/).

Minha conta no github tem diversos projetos usando ambos arduino-xbee e python-xbee: https://github.com/trunet/

Enfim, você vai precisar ler um pouco para entender o que está fazendo.
68  International / Portugues / Re: [Problemão] Comunicação entre vários arduinos (com Xbee) sem erros - Roteamento on: October 14, 2011, 08:40:14 pm
Entendi melhor agora.

Quanto ao código, aqui no forum, tem umas tags [ code ], [ /code ]. Retire o espaço e coloque seu código entre estas tags. Ele vai melhorar a legibilidade do código e deixar seu post limpo.

Está tudo correto no hardware. Eu vi que vc escreveu o código do modo API no arduino(0x7E, ...). Isto tem seus prós e contras mas acho que está complicando o negócio. Você pode baixar uma lib pronta que já faz tudo para vc poder enviar ou receber as coisas do XBee no arduino sem se preocupar com checksum, etc... Se chama xbee-arduino e pode ser baixado em http://code.google.com/p/xbee-arduino/. Olha os exemplos que vem junto que os códigos de envio e/ou recepção já estão lá prontos.

Agora o que realmente não entendi é que o seu XBee Coordinator está ligado no PC com modo API e você está recebendo os dados PLAIN-TEXT(você consegue ler na tela do X-CTU certo?) ao invés de receber os bytes da API no X-CTU(que é ilegível). Pode estar aí o problema.
69  International / Portugues / Re: [Problemão] Comunicação entre vários arduinos (com Xbee) sem erros - Roteamento on: October 14, 2011, 08:11:49 pm
Vamos por partes. Seus XBee's são os recomendados(Series 2) para este tipo de projeto e estão em modo API o que também vai facilitar resolver isto.

Tudo leva a crêr que é alguma coisa no software. O XBee recebe e joga tudo direitinho no TX(DOUT), e ele não encavala a recepção. O que "pode" acontecer é de receber muita coisa e você não conseguir ler, assim o buffer enche e ele começa a esvaziar(ou seja você perde o pacote). O modo API do XBee tem checksum, ou seja, ele não tem como "corromper" ou "encavalar".

Se você testou cada arduino individualmente e o seu coordinator recebe corretamente me faz acreditar que o código no coordinator está fazendo alguma coisa errada. Portanto verifique o código de onde está seu coordinator. Se estiver usando threads tome o cuidado de sincroniza-las quando necessário para não gerar um deadlock ou algum race condition.

Hardware:
Você tem um schema ou alguma documentação de hardware do seu projeto?

Pelo que entendi(me corrija por favor) você tem alguns arduinos com shield XBee e sensores de corrente(quantos???), sensores de temperatura(quantos???). Você tem outros arduinos com shield XBee que tem relés ligados neles(quantos???).

Software:
Você está usando nos arduinos a lib http://code.google.com/p/xbee-arduino/?
O seu coordinator está ligado em um PC? Se for, em que linguagem está desenvolvendo e qual lib está usando ou fez na mão?

Se der para postar o código em algum lugar como github ou mesmo pastebin, iria ajudar.
70  International / Portugues / Re: [Problemão] Comunicação entre vários arduinos (com Xbee) sem erros - Roteamento on: October 14, 2011, 07:41:56 pm
Preciso saber melhor seu ambiente para tentar ajudar.

Qual XBee está usando, Series 1 ou 2?
Os XBee's end device estão funcionando com modo API ou apenas como serial transparente?
O XBee coordinator está como API ou serial transparente?

Se estiver tudo com serial transparente e vc setou em todos os end-devices os DL/DH(destination low/high) para o coordinator e o coordinator está também como transparente, você não vai ter como saber quem enviou aqueles dados e vai virar uma zona.
71  International / Portugues / Re: Como configurar o Apache para usar USB on: October 12, 2011, 05:12:04 pm
Sabe se tem como adicionar o apache ao grupo dialout sem criar um novo usuario?

Code:
# usermod -G dialout apache
72  International / Portugues / Re: Atmega stand-alone RX TX on: October 11, 2011, 11:51:55 am
Não entendo muito disso, mas eu acho que as linhas seriais são "pull-high", ou seja, estão sempre com 5V e quando tem comunicação ela é "drived low". Ou seja, seu LED vai ficar aceso sempre e ficar apagando quando tiver comunicação. Além da comunicação ser BEM rápida, pode ser que o LED fique sempre ligado e você não consiga ver ele apagando por conta da velocidade de troca do HIGH/LOW quando há dados na linha.

Eu vi o schematic do arduino UNO que usa um ATMEGA8U2 para poder comunicar serial USB->ATMEGA328P e os LEDs de TX/RX estão ligados em pinos diferentes controlados pelo bootloader deste uC.

Enfim, teste smiley-wink. Mas acho que não vai funcionar.
73  International / Portugues / Re: Como configurar o Apache para usar USB on: October 11, 2011, 11:40:10 am
acho que pode ser permissão. veja o usuário/grupo que o apache está rodando(no debian se não me engano é apache/apache mesmo).

depois veja a permissão do seu device USB(ex.: ls -la /dev/ttyUSB0)... se tiver grupo dialout rwx neste device, vc precisa acrescentar o usuário apache neste grupo:
# useradd -G dialout apache

Reinicia o apache e teste novamente.

[]s

Wagner Sartori Junio
74  International / Portugues / Re: Questão muito básica on: October 07, 2011, 08:52:43 pm
Na verdade não há problema nenhum em ligar diretamente se você não exceder os 40mA limite do Arduino.

eu quis dizer que não adianta trocar o resistor. se for usar os 2 led's e eles vão usar >40mA vc precisa do transistor. desculpe não ter explicado corretamente.
75  Using Arduino / LEDs and Multiplexing / Re: 3216 LED matrix refresh rate on: October 07, 2011, 04:30:55 pm
We have made some code on http://arduino.cc/forum/index.php/topic,50326.0.html and we achieve between 83 and 120 fps.

We're using this library: http://code.google.com/p/ht1632c/
Pages: 1 ... 3 4 [5] 6 7 ... 20