sexta-feira, 10 de agosto de 2018

Módulo Multiprotocolo DIY


Olá, nesse post irei mostrar como montar um módulo transmissor multiprotocolo semelhante aos existentes no mercado, utilizando um Arduino e o módulo NRF24L01. Com esse módulo, podemos controlar diversos drones existentes no mercado com protocolos compatíveis por meio da saída PPM de um transmissor mais profissional qualquer, como o  FrSky X9D / X9D Plus / X12S, FLYSKY TH9X, or Turnigy 9XR / 9XR PRO, etc.




O módulo Multiprotocolo foi desenvolvido para que possamos controlar diversos modelos de drones utilizando sempre o mesmo rádio que estamos acostumados, tendo em vista que alguns rádios que acompanham estes drones e mini drones não são muito sensíveis ou não agradam muito aos usuários.

Existem alguns modelos pronto para compra no mercado, caso você não tenha habilidades com fabricação de placas, abaixo estão alguns exemplos :


                   

Para fabricarmos o nosso módulo Multiprotocolo DIY, segue  a lista de componentes:
  • 1x Arduino Promini;
  • 1x Módulo NRF24L01;
  • 1x Regulador de tensão de 3,3V, ex: (LD1117 ou Ams1117);
  • 1x Placa para circuito impresso de face única (55mm x 42mm);
  • 2x Resistores de 10k ohm;
  • 1x Barra de terminal fêmea de 5 sockets.
Ferramentas e outros materiais necessários para fabricação da placa:
  • Ferro de solda;
  • Estanho;
  • Caneta de retroprojetor ou marcador de DVDs ou marcador permanente;
  • Percloreto de ferro para corrosão;
  • Recipiente plástico ou de vidro para realizar a corrosão da placa.
  • Perfurador de placas ou mini drill ou micro retífica com broca de 1mm.
  • Programador USB FTDI para gravar o programa o arduino promini.

Os componentes principais para este projeto são o Arduino e o Módulo NRF24L01.
O Arduino escolhido para este projeto é o Arduino promini (ATMega328p) 16Mhz, devido ao seu tamanho compacto. Caso não tenha o promini, pode ser utilizado o Arduino nano  ou até mesmo o Uno, o fator principal é o tamanho para que possa caber dentro do slot do módulo do rádio controle. 
Iremos utilizar 2 entradas analógicas e 4 digitais do Arduino.


O módulo NRF24L01 Wireless Transceiver é responsável pela comunicação wifi entre dispositivos como Arduino, PIC, Raspberry, BeagleBone e dentre outros microcontroladores. Seu alcance pode chegar a 10 metros em ambientes internos e 50 metros em campo aberto. Ele possui uma antena projetada na própria PCB que opera na frequência de 2,4GHz com velocidade de operação de 2Mbps, modulação GFSK, habilidade de anti-interferência, verificação de erros por CRC, comunicação multi-ponto de 125 canais e controle de fluxo e opera na faixa de tensão de 1,9 a 3,6v. 
Devido a tensão de saída de alguns rádios ser superior a 3,6V, vamos utilizar um regulador de tensão de 3,3V para alimentar o Arduino e o NRF24L01. O regulador escolhido foi um regulador de tensão SMD devido ao seu tamanho .

O nosso rádio controle escolhido para teste é o Radio Turnigy 9x. Ele possui um conector no padrão JR para conexão de módulos. Segue abaixo a pinagem do módulo que iremos nos basear para conexão com nosso módulo multiprotocolo DIY:



Iremos utilizar somente 3 pinos: PPM, +BAT e GND.
O pino principal é o PPM, de onde sai o sinal codificado de todos os canais. Os demais pinos são para a alimentação de nossa placa, +BAT e GND.
Se estiver utilizando outro rádio, procure por esses mesmos pinos em outros modelos de conector ou mesmo na placa do rádio  .

Abaixo está o circuito onde juntamos esses componentes:


Para o layout da placa PCB, deixei somente os pinos que realmente importam para soldar na placa e mais alguns para estruturar os módulos. Segue os arquivos para auxiliar a fazer a placa, feito no Ares (Proteus):

PCB Layout (Ares Proteus/ PDF)

Começaremos pela fabricação da placa, existem diversos métodos para fabricação de PCB, vou mostrar um bem simples que estará ao alcance de qualquer pessoa. Primeiramente vamos imprimir em escala real o layout da placa, recortar e colar com cola branca sobre a PCB.
*Cuidado para não colar na face de cobre ou com o desenho espelhado, colei na face sem cobre.
Depois utilizando uma serra, corte nas extremidades do retângulo limitador da placa, cortando com as medidas de 42x55mm:




Após cortar, fica fácil fazer os furos com uma broca de 1mm, seguindo as marcações da impressão :


Após realizar todos os furos, podemos lavar a placa para remover o papel e a cola para que possamos fazer o desenho das trilhas. É bom passar uma palha de aço levemente sobre a parte cobreada da placa para garantir que não fique nenhum resíduo de cola. Agora com uma outra impressão, vamos posicionar ao lado da nossa placa para facilitar a identificar as ligações e então podemos desenhar as trilhas ligando os pontos utilizando uma caneta marcadora permanente.


 Eu costumo preencher as áreas não utilizadas com tinta para que desgaste menos percloreto de ferro na hora de corroer:


Certifique-se de que não há nenhuma trilha incorreta ou em contato com outra, caso esteja, utilize um arame ou agulha para raspar a tinta, faça a correção e então podemos mergulhar no Percloreto de ferro e realizar a corrosão. Não vou entrar muito em detalhe sobre esse processo, mas não tem mistério, com a mistura correta de percloreto de ferro, é só mergulhar e movimentar cuidadosamente a placa até que toda a parte que não está coberta pela tinta seja corroída. Temos o resultado a seguir:


Antes de soldar os componentes, faça um teste de continuidade simples para verificar possíveis curto circuitos indesejados. Podemos iniciar a solda dos componentes:


Após soldar, faça novamente o teste de continuidade para garantir que não há curto circuito, principalmente no regulador de tensão SMD.
Reparem que possui jumpers na parte de cima da placa debaixo do NRF24L01 e no conector SIL fêmea que é soldado virado para baixo. Fiz o reforço com cola quente para evitar que o conector sofra algum esforço que afete a solda.
Agora que tudo está soldado, é hora de trabalhar na gravação do programa.
O Arduino promini não possui porta USB, por isso é necessário o uso de um gravador FTDI. A imagem abaixo do site www.arduinoecia.com.br mostra como deve ser as conexões para passar o programa para o microcontrolador:


Vamos abrir a IDE do arduino, abrir o programa (nRF24_multipro.ino), selecionar o Arduino correto e a porta COM, compilar e gravar. A única alteração que fiz no código para que funcione no rádio Turnigy 9x com firmware original, foi na ordem dos canais nas linhas de código abaixo:

No link abaixo se encontra o programa já modificado para ser utilizado no Turnigy 9x, lembrando que funcionará em qualquer outro radio que seguir o padrão AETR.

Multipro (Dropbox)

Após gravar o código já podemos testar o módulo. Vamos conectá-lo no slot do módulo.
Se desejarem podemos fazer um case para proteger o nosso módulo, mas isso vai ficar para uma próxima atualização:



Após conectar, ainda não ligue o rádio, a escolha do modelo de seu drone é feita por meio de uma combinação dos sticks no momento da inicialização do rádio. Então para que o seu rádio e seu modelo consigam se comunicar, é preciso se atentar na combinação correta:

Procedimento para fazer o bind:
  1. Desligue o Radio;
  2. Ligue o Drone;
  3. Enquanto segura os sticks na posição correspondente ao modelo de seu drone, ligue o Radio e aguarde o bind reparando nos LEDs do drone e do módulo;
  4. Divirta-se.
A seleção do Protocolo do modelo depende da combinação dos sticks conforme abaixo:
Rudder left + Aileron left = Bayang protocol with Silverware telemetry for OpenTX
Rudder right + Aileron right + Elevator down = EAchine E010, NiHui NH-010, JJRC H36 mini
Rudder right + Aileron right + Elevator up = FQ-777-124 Pocket Drone
Rudder right + Aileron left + Elevator up = CX-10 older red PCB/CX11/CX205/CX30, JXD389/391/393, SH6057/6043/6044/6046/6047, FY326Q7, WLToys v252 Pro/v343, XinXun X28/X30/X33/X39/X40
Rudder right + Aileron left + Elevator down = WLToys V930/931/939/966/977/988
Rudder right + Elevator down = HiSky RXs, HFP80, HCP80/100, FBL70/80/90/100, FF120, HMX120, WLToys v933/944/955
Rudder right + Elevator up = Syma X5C (older model), X2 ...
Rudder right + Aileron right = MJX X600
Rudder right + Aileron left = EAchine H8 mini 3D, JJRC H20/H22
Elevator down + Aileron left = Syma X5C-1/X11/X11C/X12
Elevator down + Aileron right = Attop YD-822/YD-829/YD-829C ...
Elevator up + Aileron right = EAchine H8(C) mini, BayangToys X6/X7/X9, JJRC JJ850, Floureon H101 ...
Elevator up + Aileron left = EAchine H7
Elevator up = WLToys V202/252/272, JXD 385/388, JJRC H6C, Yizhan Tarantula X6 ...
Elevator down = EAchine CG023/CG031/3D X4
Aileron left = Cheerson CX-10 green pcb (Meu modelo de teste neste post)
Aileron right = Cheerson CX-10 blue pcb & some newer red pcb, CX-10A, CX-10C, CX11, CX12, Floureon FX10, JJRC DHD D1

Recursos extras, se o seu modelo suportar:
Channel 5: led light, 3 pos. rate on CX-10 and FQ777-124, H7, inverted flight on H101
Channel 6: flip control
Channel 7: still camera
Channel 8: video camera, pitch trim (FQ777-124)
Channel 9: headless
Channel 10: calibrate Y (V2x2), pitch trim (H7), RTH (H8 mini/H20, FQ777-124), 360deg flip mode (H8 mini 3D/H22)
Channel 11: calibrate X (V2x2), roll trim (H7,FQ777-124)
Channel 12: Reset / Rebind

No meu caso o modelo é um Cherson CX-10 green PCB, então devo ligar o drone, em seguida ligar o rádio segurando o stick do aileron para esquerda.

Segue o vídeo de teste:



Se não estiver funcionando, vamos verificar alguns itens:

  • Canais do rádio invertidos?
  • Ordem dos canais no rádio, AETR?
  • Ordem dos canais no programa, AETR?
  • Limite dos endpoints com 120%  no rádio?
  • Combinação correta de posição do stick ao ligar o rádio?
Assista o Vídeo e se inscreva no meu canal do youtube: 
https://youtu.be/4SUtfplV4wU

Obrigado e até a próxima.

quarta-feira, 1 de agosto de 2018

Carrinho de Controle Bluetooth com Arduíno


Olá, nesse post vamos aprender a controlar um carrinho/robô Arduíno controlado via Bluetooth pelo nosso Smartphone.





Podemos utilizar o mesmo chassis que utilizamos para o nosso carro de controle remoto IR.
Se não tiver um cassis recomendo o da lista de material abaixo que é um bom começo para iniciantes.
Vamos a lista de materiais:

  • 1x Arduino Uno ou Nano;
  • 1x Ponte H dupla( L9110, L298n ou de transistores);
  • 1x Módulo Bluetooth HC05 ou HC06;
  • 1x Kit chassis + Motores dc com redução.
  • 1x cabo adaptador de bateria para Arduino.
  • Aplicativo utilizado : Arduino Bluetooth RC Car (Testado em sistema Android):.

Primeiramente vamos montar nosso chassis e a eletrônica sobre ele:

Após tudo organizado, iremos fazer as conecxões de acordo com a ponte H que estivermos utilizando, o esquema abaixo se refere a uma ponte H L298n, mas a única coisa que muda são as conexões dos motores, a princípio nada muda na programação:


*Caso utilize uma alimentação separada para o Arduíno e outra para os motores, devemos interligar os negativos.

Como podem ver no esquema, a bateria está alimentando o Arduíno e os motores por meio da ponte H nos pinos 12V e GND. O módulo Bluetooth está sendo alimentado pelo Arduíno pelos pinos 5V e GND. 
Os pinos TX e RX do Arduino são ligados ao RX e TX do módulo bluetooth ( TX do bluetooth no RX do Arduino e RX  do bluetooth no TX do Arduino), sempre "cruzado" para que a comunicação entre o Arduino e o módulo bluetooth aconteça.

Os pinos digitais 3, 9, 10 e 11 são responsáveis pelo controle das direções em conjunto com a ponte H. Devem ser conectados nas entradas IN1 a IN4 da ponte H conforme esquema e sequencia abaixo:

PINO 3 - IN2 da Ponte H
PINO 9 - IN1 da Ponte H
PINO 10 - IN3 da Ponte H
PINO 11 - IN4 da Ponte H

A ordem das ligações é importante para o chaveamento correto dos transistores da ponte H, para que haja o controle e reversão corretos de acordo com o nosso código. 
Você poderá mudar depois que entender o funcionamento e deixar de acordo com o que julgar melhor.
Você pode visitar esse post para entender o funcionamento da ponte H.

Após feito as conexões, iremos para o nosso programa. Para isso é necessário que você possua a IDE do Arduino instalada em sua máquina.

Segue o programa no Dropbox no link abaixo:


Após copiar o programa para sua IDE, vamos selecionar o tipo de arduino e a respectiva porta COM.
Vamos primeiro verificar a programação se não possui nenhum erro e em seguida gravar o programa no arduino.

Chegou a hora do teste!

Para conectar seu celular ao módulo bluetooth, será necessário primeiramente fazer o pareamento.
Ative o bluetooth do celular, ligue a eletrônica do carrinho e certifique-se de que o módulo bluetooth está piscando aguardando conexão. Busque na lista de dispositivos encontrados o módulo. A senha de pareamento geralmente é 1234. O módulo bluetooth irá parar de piscar ao estabelecer conexão com o celular.
Após o pareamento concluído, vamos abrir o aplicativo Arduino Bluetooth RC Car, para conectar ao nosso carrinho.

A tela inicial do aplicativo possui vários botões que podemos utilizar para programar nosso carrinho.
Na nossa programação utilizei somente os direcionais e um para acionar qualquer coisa, pode ser um farol ou uma buzina.
Para realizar a conexão com o nosso carrinho, a eletrônica deve estar ligada e o smartphone pareado com o módulo bluetooth.
Primeiramente clicamos no ícone da engrenagem abaixo: 


Selecionamos a opção "Connect to a car":


 Escolhemos na lista o nome referente ao módulo bluetooth (HC-06 ou HC-05 ou qualquer nome programado ao módulo):



Pronto, o símbolo que estava vermelho no canto superior esquerdo agora ficará verde indicando que a conexão foi estabelecida.
Agora podemos testar as direções utilizando as teclas direcionais.
Caso a direção do seu carrinho não esteja correspondendo ao do aplicativo, reveja as ligações e se a ponte H utilizada é do mesmo tipo.



Caso não esteja conseguindo conexão tente algum desses passos:
  • Verifique se o módulo está ligado;
  • Verifique se o pareamento foi realizado com sucesso;
  • Revise novamente se as conexões (TX/RX) estão cruzadas;
  • Talvez seja necessário uma configuração do módulo Bluetooth por meio de códigos AT para modificar baudrate, etc.
Você pode editar o programa para adicionar mais funções, o aplicativo do celular possui no menu "Settings" a lista de comandos enviados ao módulo Bluetooth, assim você pode escolher o comando e utilizar como quiser no seu código. Segue a lista de comandos no aplicativo:


Por exemplo, quando o aplicativo envia o comando "F", o nosso programa o interpreta na função IF e envia o respectivo comando para a ponte H mover o carro para frente:

 // Se o estado recebido for igual a 'F', o robo se movimenta para frente.
  if (state == 'F') {
    analogWrite(motorB1, vSpeed);
    analogWrite(motorA1, vSpeed);
    analogWrite(motorA2, 0);
    analogWrite(motorB2, 0);
 }

Agora que sabe como modificar o programa, aproveite para adicionar atuadores como farol, buzina, etc.

Espero que tenham gostado deste post. Muito obrigado e até o próximo!

Se inscrevam no meu canal do youtube!  https://youtu.be/4so6ZdPtz4w
Obrigado