Ajuda em projecto - inumeras questoes

Muito boa noite a todos, sou novo aqui no forum e recorri ao forum para a ajuda num projecto.

1ª Questão - Qual e o modulo que voces recomendam para transmitir informação a uma distância superior a 1km? A informação a ser transferida são dados do gps, acelerometro, bussula, pressao, atmosferica e giroscopio (a semelhança do ardupilot).

Os modulos que eu ja procurei foram alguns do xbee, os de 900mhz (https://www.sparkfun.com/products/11634), o apc220, o openbee, da flytron (para open-source, não encontro grande informação) e o rfm22b. Entre estes qual seria o melhor? Existe algum módulo melhor para transferir os dados (em termos de informação, distância alcançada e tutoriais?)?

2ª Questão - Estava a pensar usar um IMU. Como não percebo muito bem de acelerometros e giroscopios (nunca utilizei) qual é o módulo mais recomendado: ArduIMU 3 ou um MPU 9150 (https://www.sparkfun.com/products/11486)? Se houverem outras melhores, não hesitem a indicar.

3ª Questao - Para transferir dados do arduino para o computador (criar .txt), pelo que pesquisei, podemos utilizar o processing ou o gobetwino. Existe mais algum método de fazer isto? O processing permite escrever em várias posições do .txt (2ª linha, a seguir 3ª linha)? Pergunto isto porque gostaria que os dados que são transmitidos fossem armazenados pelo tempo, ou seja, no instante zero escreve na 1ª linha. O segundo pacote de dados na 2ª linha e por aí fora.

Agradeço desde já qualquer resposta.

TheDeadLives

1 - Um radio muito potente... ou, havendo recepcao de telemovel... uma placa GSM. A XBee da para mais de um km? E vai estar tudo em espaco aberto? Ou com edificios?

2 - Nunca usei... nao sei.

3 - Qualquer linguagem de programacao dara para fazer isso... e uma busca na internet dar-te-a imensos resultados. Podes ver por Visual Basic, Python, Java... Tudo depende de com qual te das melhor.

Não, não vai haver edifícios, vai ser em espaço aberto.

SIm, o xbee tem uma placa de 900mhz que permite em zonas urbanas 1.6km, com uma antena nagoya 14km e com uma direccional 40km (apesar de não acreditar que seja possível, mas pronto). Também são ilegais na maior parte dos países (acho que só é aceite em itália).

Também já tinha pensado na placa de gsm, mas recomendaram-me a não utilizar a placa (os dados tem que ser transferidos a cada segundo, pelo menos, nao sei se a placa o ira permitir). O que me disseram foi e cito: “esqueçam
a rede GSM (telemóvel) e protocolos que requerem interpretação (todos os que recorram a layers UDP ou TCP) pois
não tem qualquer beneficio nesta aplicação, antes pelo contrário!”

Em relação à linguagem, a questão foi que nunca vi se era possível ou não, mas pela a olhadela que dei pelo processing, parecia-me que ele so escrevia na mesma linha (no pascal sei como fazer, c nunca experimentei e php acho que n vou utilizar XD - linguagens que sei), mas vou pesquisar melhor.

O meu grande problema são mesmo a questão 1 e 2

Também já tinha pensado na placa de gsm, mas recomendaram-me a não utilizar a placa (os dados tem que ser transferidos a cada segundo, pelo menos, nao sei se a placa o ira permitir). O que me disseram foi e cito: "esqueçam a rede GSM (telemóvel) e protocolos que requerem interpretação (todos os que recorram a layers UDP ou TCP) pois não tem qualquer beneficio nesta aplicação, antes pelo contrário!"

Uhmm e como vais verificar se perdeste pacotes ou nao, ou garantir que em caso de perda os retransmites? Nao sei porque quem te disse isso argumentou isso, mas ok deve ser a tom de desafio. Tens este "canaho" dos fabricantes da Xbee http://www.digi.com/products/wireless-modems-peripherals/wireless-range-extenders-peripherals/xtend#docs nao sei é o valor € do animal :grin:

O problema desse xbee e que e 900MHz, logo nao e permitido, se nao me engano (pelo menos o s3b nao e porque tem uma frquencia de 900MHz).

Então não há qualquer tipo de problema em utilizar gsm? Consegue transferir dados a cada segundo?

Uma questao ridicula… em termos de potencia, como vais alimentar o bicho?

Eu compreendo de certa forma o que dizem acerca do modulo GSM… apenas nao concordo como o dizem. Isto e, nao te dao uma razao racional e devidamente fundamentada para o fazer. (ou nao copiaste aqui).
Os problemas que eu vejo e precisamente o overhead de trabalho que teras para fazer isso, a potencia consumida creio que sera maior e o custo nao ficara barato. Nota que o GSM tens de estar a pagar por dados… o XBee nao.

Ainda pensei em dois modulos GSM para enviar dados atraves de SMS… mas ai vais estar lixado.

A telemetria que pretendes e para uso em controlo ou apenas para monitorizacao?

Quando dizes mais de 1km, pode ser 1.001 km… como pode ser a distancia da California a Beijing.
Importas-te de dar um majorativo para a distancia?

Quando dizes mais de 1km, pode ser 1.001 km... como pode ser a distancia da California a Beijing. Importas-te de dar um majorativo para a distancia?

O objectivo é o alcance máximo ser o que der. No mínimo 1km, o dispositivo irá afastar-se da minha posição 1km, pelo menos. Por isso é que digo 1km pelo menos. Se conseguir 2km, melhor. Julgo que para qualquer projecto (UAV, principalmente) queremos o alcance máximo, para o objecto se poder afastar o máximo de nós e conseguirmos comunicar com ele.

Eu compreendo de certa forma o que dizem acerca do modulo GSM... apenas nao concordo como o dizem. Isto e, nao te dao uma razao racional e devidamente fundamentada para o fazer. (ou nao copiaste aqui). Os problemas que eu vejo e precisamente o overhead de trabalho que teras para fazer isso, a potencia consumida creio que sera maior e o custo nao ficara barato. Nota que o GSM tens de estar a pagar por dados... o XBee nao.

O gsm em termos do custo, o que pensava fazer com ele era enviar por ftp, assim so pagava 1 euro por dia pela internet ;) . E não, não me apresentaram as razões, por isso é que fiquei um pouco na dúvida, mas para prevenir exclui a ideia. Em relação ao consumo, o módulo que eu vi (http://www.cooking-hacks.com/3g-gprs-shield-for-arduino-3g-gps), indicava que seria necessário alimentar com 2000mah, por isso é que exclui, também.

Uma questao ridicula... em termos de potencia, como vais alimentar o bicho?

O arduino iria ser alimentado com baterias, 1000mAh.

A telemetria que pretendes e para uso em controlo ou apenas para monitorizacao?

Em príncipio seria para monitorizacao, mas se conseguisse enviar dados também era bom, por exemplo, para alterar as configurações do gps, acelerometro, giroscopio e da bussula.

Receber a cada meio segundo os dados no centro de controlo (também conhecido como computador ;) ), os dados seria enviados numa variavel (ainda nao vi bem se isto e possivel, depende do modulo de rf que vou utilizar) com o numero do pacote (1,2,3....). Mais ou menos assim (var (numero_pacote, gps, acelerometro, giroscopio, bussula)). Se algum dos dados nao fosse recebido, por exemplo, se salta-se do 1 para o 3 na base, a base pediria ao arduino para reenviar os dados com numero 2, que seriam guardados num sd

Bom estando eu a fazer algo semelhante (mas sem telemetria pois os pontos estao fixos), fico sem perceber qual e o motivo pelo qual queres um cartao SD.

Esse e o meu problema actual. Um cartao SD nao e muito robusto para fazer logging de dados. Eles estragam facilmente. Se, por outro lado, o cartao vai ficar no dispositivo movel, entao ai, realmente seria uma mais valia. Apenas pelo simples facto de portabilidade.

Nunca usei um modulo GSM... logo nao sei como seria ou quao caro seria.

Esse protocolo para o que e, parece-me complicado. Porque nao enviar as variaveis com uma tag a dizer quais sao em vez de andares a fazer seguimento de pacotes?

Envias um pacote T352 (temperatura 35.2 graus), outro H30 (altura de 30 metros) e por ai adiante. Mediante o teu processador e radio, poderias talvez fazer um oversampling dos dados e assim talvez conseguisses cumprir a meta do pacote por meio segundo.

Isto e, se forem enviados 3 pacotes duma variavel, 4 de outra e 2 de outra num segundo, tu efectivamente cumpres o teu objectivo. 1 pacote completo por meio segundo. ;)

Alterar as configuracoes... deve ser possivel... mas convem teres em atencao erros de comunicacao.

Acho que no teu caso, uma XBee seria o melhor... mas esse e o nRF sao os unicos radios que conheco.

O uso do microSD é mesmo para prevenir se alguma das comunicações falhar ser possível ter os dados guardados para enviar novamente, mas também, como, por exemplo, o acelerometro tem uma taxa de 4KHz, se nao me engano, ser possivel guardar toda essa informação no microSD, para depois o colocar no computador e ver a variação dos ângulos.

Ver algo assim depois:

http://www.youtube.com/watch?v=WuHRCnpcsDQ

Em relação que indicaram, sobre guardar os dados do arduino no computador, o que os ficheiros fazem e serial.read. O problema é que o gps está sempre a enviar dados, mesmo que não tenha sinal. Não é possível o arduino transferir apenas variáveis definidas pelo utilizador?

O GPS vai estar sempre a enviar dados... e o Arduino vai ter de os ler todos... e escolher os que interessam para enviar.

Fazer processamento de strings vai-te levar imenso tempo quer para fazer e testar o codigo, quer ao processador que vai andar para tras e para a frente a copiar strings. Nao podes configurar o GPS para so enviar o que pretendes?

O uso do cartao SD para isso e no Arduino faz sentido uma vez que e a melhor solucao. Se nao vais controlar o teu dispositivo com os dados... porque querer recebe-los em real time? a excepcao da posicao do GPS que me parece obvia.

Acelerometro e giro para ver como se encontra, tal como num avião, ver a inclinação e assim. Algo como o ardupilot: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSSuNDjkjXwi-43I3OKWQ1KC8xb9KyyUkGbqzbX2dvOvFWeu2Cg

Pressão porque permite ver a altitude. O gps a uma taxa de 2Hz não dá tempo ao gps para analisar a altitude e para isso uso o sensor de pressão que dá uma aproximação à altitude.

Em relação ao gps, não, não dá para controlar. Eu estou a utilizar o gps da adafruit, o wearable. A adafruit tem uma biblioteca que processa tudo, muito boa até, o problema é que o gps está ligado ao tx e rx, portanto, qualquer informação do gps passa para o serial e não, não dá para controlar.

Por isso é que perguntei no primeiro post se não há uma forma de copiar apenas uma variável do arduino para o computador? Isto é só para testar, quando tiver o módulo de rf ele só transmite a informação que queremos, certo (e que nunca trabalhei com rf)?

E obrigado pela ajuda

Procura por softserial... ficas com uma UART com pinos normais.

bubulindo: Procura por softserial... ficas com uma UART com pinos normais.

E assim ele comunica apenas aquilo que queremos??

Se não me engano, não podemos utilizar o softserial para gps, li isso em algum lado, mas posso experimentar

Eu já trabalhi com GPS e mesmo que o arduino seja obrigado a ler os dados dele, é muito simples fazer uma filtragem destes dados. Você pode fazer com que o arduino apenas envie/grave dados quando ele ler pelo menos 4 satélites.

Sobre o barõmetro, é melhor utilizar ele para saber a altura do que o próprio GPS? O GPS utiliza sua posição em relação aos satélites, enquanto o barõmetro será preciso utilizar um cáuculo, creio eu. Com isso, o barômetro será mais confiável do que o GPS para medua a altidade?

E assim ele comunica apenas aquilo que queremos??

Nao,se o teu gps nao te permitir configurar isso mesmo que cries a porta Serie Virtual, ela vai ser inundada de dados na mesma. Cabe te a ti, ler todos os dados o mais rapido possivel para impedires que os percas com um overflow no buffer da Serial.Apos isso depois podes filtrar o que queres e envia-los ou trata-los como queres.

TheDeadLives:
Pressão porque permite ver a altitude. O gps a uma taxa de 2Hz não dá tempo ao gps para analisar a altitude e para isso uso o sensor de pressão que dá uma aproximação à altitude.

Vi agora o comentario do Hugo… e isto tinha-me passado ao lado.
Um sensor de pressao para medir altitude e extremamente chato e quase garantidamente estara errado a maior parte do tempo. E digo isto com alguma experiencia, os meus relogios com sensor barometrico estao sempre errados no que toca a altura. Porque sempre que os calibro, basta que o clima mude e a pressao de referencia passa a ser diferente.

Tens um sitio de onde possas calibrar a altura com a pressao barometrica? Quanto tempo e que o teu sistema vai estar no ar?

Filantropic: Eu já trabalhi com GPS e mesmo que o arduino seja obrigado a ler os dados dele, é muito simples fazer uma filtragem destes dados. Você pode fazer com que o arduino apenas envie/grave dados quando ele ler pelo menos 4 satélites.

Sobre o barõmetro, é melhor utilizar ele para saber a altura do que o próprio GPS? O GPS utiliza sua posição em relação aos satélites, enquanto o barõmetro será preciso utilizar um cáuculo, creio eu. Com isso, o barômetro será mais confiável do que o GPS para medua a altidade?

O gps envia sempre dados, não é possível controlar. Mesmo que processe os dados, continuara a aparecer no serial os dados vindos do gps. O site da adafruit diz: "GPS modules will always send data EVEN IF THEY DO NOT HAVE A FIX!". Eu tentei alterar o código de forma a que não aparecessem os $GPRMC e $GPGGA mas não consegui, mas também pode ser um problema meu. Se alguém souber (http://learn.adafruit.com/flora-wearable-gps/getting-location-data), talvez possa-me ajudar.

Nao,se o teu gps nao te permitir configurar isso mesmo que cries a porta Serie Virtual, ela vai ser inundada de dados na mesma. Cabe te a ti, ler todos os dados o mais rapido possivel para impedires que os percas com um overflow no buffer da Serial.Apos isso depois podes filtrar o que queres e envia-los ou trata-los como queres.

A questão é a seguinte: como posso enviar aquilo que quero? O gps está sempre a enviar os dados $GPRMC e $GPGGA, não posso controlar. Estando o arduino a processar, no computador teria que processar novamente, o que não faria sentido. PAra além disso, poderia entrar conflito com o resto das variáveis que envio, nao (alterar o tempo em que as analiso)?

Tens um sitio de onde possas calibrar a altura com a pressao barometrica? Quanto tempo e que o teu sistema vai estar no ar?

Tempo - o máximo possível E sim, tenho onde o calibrar.

Tenho outra duvida, é possível ligar os arduinos como um servidores em cloud computing? Isto é, um deles ter parte de um código e um outro a outra parte e cada um processar individualmente e depois enviar para o computador como um so? Vi ai um post, ja nao me lembro onde, que tinha uma mensagem de algo semelhante e que falava em arduino master e slavers. Isso e possivel (aumentariamos o ram, a memoria, etc)?

TheDeadLives: Tenho outra duvida, é possível ligar os arduinos como um servidores em cloud computing? Isto é, um deles ter parte de um código e um outro a outra parte e cada um processar individualmente e depois enviar para o computador como um so? Vi ai um post, ja nao me lembro onde, que tinha uma mensagem de algo semelhante e que falada em arduino master e slavers. Isso e possivel (aumentariamos o ram, a memoria, etc)?

Sim é possível. Estou trabalhando num projeto assim. Em que tenho um Arduino Mega 2560 ligado na internet, e outros 5 atmega328 com sensores e reles. Estou fazendo a comunicação sem fio entre eles com o módulo transceiver (transmite e recebe dados). Até o momento tenho 3 se comunicando e salvando os dados e recebendo comandos pela internet, todos passando pelo arduino servidor.

Ainda sou novo nesse mundo de arduino, mas pelo que vi até agora, sua imaginação é o limite. ]:D

Abraços,

Bem, tenho um programa em python que le serial, copia as frases emitidas pelo arduino (frases vindas do gps) e guardas num .txt. Após isto, converte os valores de $gpgga para longitude e latitude.

A minha questão é a seguinte: como posso fazer uma aplicação com python que mostre directamente (sem abrir nenhuma aplicação) o mapa e as coordenadas que envio. Algo como sito:

http://image.slidesharecdn.com/npujolgpstracker-140118084302-phpapp02/95/slide-22-638.jpg?cb=1390056428 http://1.bp.blogspot.com/_F0i917zfySk/THSSyADuaMI/AAAAAAAAB3k/EZAYjd0lAFE/s1600/ground_station_gps.png

Agradecido