• Welcome to LusoRobótica - Robótica em Português.
 

Fato Light Wire - Controlo sem fios

Started by Kristey, 15 de January de 2014, 11:41

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Kristey

Bem depois de ter metido alguns dos meus projectos no facebook a minha prima mostrou-me isto:
Japan tron dance

Ora bem vou ter de fazer isto para a rapariga e para o grupo de dança dela. O meu problema está a ser o (tempo), porque precisa disto para março!
Mas penso que isso terá comunicação sem fios.
Um controlador MASTER e cada fato é um SLAVE...
Tava a pensar usar um LilyPad (Nao sei qual deles), as funções vao ser simples on off do light wire e programar uma sequencia para a coreografia.
A minha questão é isto é mesmo comunicação sem fios entre todos os fatos? se sim qual a melhor (Nunca pesquisei nem trabalhei com comunicações sem fio)

senso

Tenh ideia que li algures que isso usava nRF's, um nRF24l01 a fazer broadcast e os fatos todos a receber.
Avr fanboy

Kristey

#2
Onde é que poso encontrar mais info sobre isso?
Até agora vi isto:
Bibliotecas: http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01
Dispositivos: http://dx.com/p/nrf24l01-2-4ghz-wireless-transceiver-module-126467#.UtbR9nnraZM

As minhas duvidas e onde nao consegui encontrar info é:
-Comunicação multi Reciver
-Como identificar cada fato (fato 1, fato 2, fato 3) Pelo que ja vi estes dispositivos têm 125 canais, é por ai que se "distingue cada fato"?
-Distancia maxima admitida para comunicação sem falhas.

senso

Se leres a datasheet metade das duvidas eram respondidas.
Cada micro/receptor tem o seu endereço, o que envia escolhe o endereço, e manda a cada um deles, penso que tambem podes fazer broadcast para sinais de sincronização por exemplo.
A distancia é relativa, depende da antena que usares, do que tens á volta da mesma, o valor máximo teórico são 100 metros acho eu, com antena decente quase de certeza que consegues uns 30-40m.
Avr fanboy

Kristey

#4
Como eu andei a procura do modulo nao vi o datasheet my bad.
Como isto vai ser para coser em roupa queria ver se conseguia usar esse mesmo modulo, com essa antena mesmo assim desenhada na pcb:


Tenho entao de trabalhar com isto de um lado (controlador com Arduino por exemplo) e depois do outro lado posso usar mais um um attiny85 visto que so preciso de no maximo 2 canais de PWM (acopolados depois a um transistor para ligar o controlo/potencia para ligar o fio) certo?

Ligo os dois por serial (com o NRF24L01 a fazer a connecção) Estou a pensar bem?


senso

Avr fanboy

tarquinio

Tens tambem módulos desses com antena. Se vais ter um sistema master-slave e os vários slaves vão andar a saltitar por aí, eu usaria um módulo com antena maior no master. Lembra-te que as distancias das specs costumam ser "optimistas", na realidade tens muitas coisas a causar potenciais interferencias e a diminuir cada vez mais a distancia maxima.

Kristey

#7
Quote from: senso on 15 de January de 2014, 19:57
Cada micro/receptor tem o seu endereço, o que envia escolhe o endereço, e manda a cada um deles, penso que

Sou com dificuldades em conseguir perceber como funciona isto no SPI.
JA percebi que terei estes pinos:
SCLK (Clock)
MOSI (Master Out, Slave In)
MISO (Master In, Slave Out)
SS1
SS2
...
SS# (sendo # o numero de slaves)
Mas nao tou a perceber como raio mando a informação.
(Sei que existe ja a biblioteca para arduino mas gostava de perceber o protocolo primeiro)
Sei que na documentação do NRF24L01 para arduino existem para o SS duas variaveis (CE -> 8; CSN -> 7) vou tentar perceber para que servem.

Quanto à distancia isso pode ser um problema, mas tambem o palco tem 18 metros de frente e 7 de profundidade.
O que dá uma distancia maxima de 19.31 metros de distancia maxima dos entre os o slave e mo Master.
Algum problema com isso arranjo um modulo que tenha antena, compro uma extensão e fixo a antena no meio do palco.

MAntunes

Kristey, não sei se irá ajudar, mas aqui vai:

Tutorial 08 for Arduino: SPI Interfaces

Boa sorte nesse projeto!

dropes

Isto faz-me lembrar um pedido de um ilusionista em que queria transmitir toda a informação no inicio do truque para que não houvessem interferências com telemóveis ou outras coisas para estragar tudo.
Nesse caso o sincronismo tinha de ser perfeito, enquanto que no teu, tendo cristais no micro não vejo problemas de dessincronização. A única coisa seria iniciarem em simultâneo os "slaves" para que sejam apresentados os valores de intensidade luminosa com os intervalos de tempo programados em cada.

Quanto à transmissão de dados pode ser das duas formas, com ou sem fios.

ps: o projecto do ilusionista não teve seguimento.

Kristey

La está o meu problema ate agora sao os endereços.
Continuo sem perceber com defino os endereços, e ainda por cima ai nesse codigo em baixo aparecem umas variaveis TX e RX que pensei nao fazerem parte do SPI (ou eu estou todo confuso)


https://www.youtube.com/watch?v=YpasceYkimI

Eu posso usar este codigo por exemplo para transmitir, e depois confiro o "data" que é transmitido.
Se transmitir OFF meto um pino a 0 que por sua vez liga ao gate de um mosfet e interrompe a corrente do fio electroluminescente. o ON fará o contrario.

Estou a pensar bem?

tarquinio

Quote from: Kristey on 15 de January de 2014, 23:48
Sou com dificuldades em conseguir perceber como funciona isto no SPI.
JA percebi que terei estes pinos:
SCLK (Clock)
MOSI (Master Out, Slave In)
MISO (Master In, Slave Out)
SS1
SS2
...
SS# (sendo # o numero de slaves)
Mas nao tou a perceber como raio mando a informação.
(Sei que existe ja a biblioteca para arduino mas gostava de perceber o protocolo primeiro)
Sei que na documentação do NRF24L01 para arduino existem para o SS duas variaveis (CE -> 8; CSN -> 7) vou tentar perceber para que servem.

Isto está na pagina da library:
CE Pin controls RX / TX, default 8.
CSN Pin (Chip select not), default 7.

O CE é o pino que decide se vais transmitir ou receber (porque não podes fazer as duas coisas ao mesmo tempo), e o CSN é o Slave select... Não sei se não estarás a fazer confusão com os SS... O SS serve para o arduino dizer ao dispositivo X que está ligado a ele "Olha agora vou falar contigo", não tem nada a ver com os outros dispositivos que estão ligados aos outros arduinos. Neste caso portanto vais ter apenas um SS.

Quanto à transmissão, instala a library e espreita os sketches PingClient e PingServer e ficas logo com uma idéia da coisa

tarquinio

Na library que tá na página do Arduino tens estes dois métodos para definir os endereços:

  Mirf.setTADDR((byte *)"serv1");
  Mirf.setRADDR((byte *)"serv1");


O primeiro define para onde é que queres transmitir, o segundo define o teu próprio endereço. No video que tu linkaste usam outra library, mas tem as funções equivalentes...

Kristey

Eu falei no SS porque pensei que entao o endereço era dado por diferentes SS's

Pelos vistos nao é nada disso :/ Segundo o que dizes o SS é igual.


Codigo da documentação do arduino
Se eu escrever:
  Mirf.setTADDR((byte *)"fato1");
  Mirf.setRADDR((byte *)"master");

Significa que ele é o master e que está a transmitir para  fato1 certo?
A sintaxe é estranha para o que eu estou habituado.

tarquinio

É mais ou menos assim. Há qui duas coisas importantes a distinguir.
A imagem que tu colocaste no ultimo post mostra um ciruito com 1 master e 3 slaves. Mas estes masters e slaves não tem nada a ver com a comunicação do Nrf24L01. São simplesmente 3 dispositivos que estao ligados ao mesmo micro.
Imagina por exemplo um arduino ethernet com um SD card... Tanto o chip ethernet como o SD card estão ligados por spi exactamente aos mesmos pinos. Então quando o arduino começa a escrever coisas por SPI, quem é que vai responder? A idéia do SS é essa, cada dispositivo ligado por SPI vai ter um SS próprio, e antes de transmitir os dados ele ajusta-os de modo que os dados sejam lidos pelo dispositivo certo. Neste caso o arduino é o master, e tanto o chip ethernet como o sd card são slaves.

Agora quando pensas na estrutura da comunicação entre os vários arduinos, o spi já não é praqui chamado, isso já ficou tratado noutro nível. Quando dizes que tens uma rede wireless em Master-Slave, significa apenas que tens 1 ponto comum que fala com todos os outros, e que todos os outros falam apenas com esse ponto comum. Se pensares que estamos a falar de ondas de rádio, quando algum dos módulos transmite, todos os outros que estão à volta vão ouvir. O rádio é transmitido para todo o lado, não consegues mandar uma mensagem de modo a ser captada apenas por um receptor específico. Eles simplesmente vão ignorar todas as transmissões que não lhes sejam destinadas.
Quando fazes:

Mirf.setRADDR((byte *)"master");

Não estás a definir a configuração da rede, estás simplesmente a dizer que ele se chama "master". Mas podes dar o nome que quiseres. Se tiveres 4 módulos com os nomes xpto1, xpto2, xpto3 e xpto4, e tiveres o módulo xpto2 a mandar mensagens para todos os outros, e os outros por sua vez apenas mandarem mensagens para o xpto2, então tens uma rede master-slave em que o xpto2 é o master, e os xpto1, xpto3 e xpto4 são os slaves. Não tens de configurar nada a dizer especificamente "este é um master" e "este é um slave", os endereços para onde envias as mensagens é que vão decidir isso.