domingo, 12 de junho de 2016

DRONE DIY - PLACA CONTROLADORA DE VOO COM ARDUINO E MULTIWII - QUADRICÓPTERO

Neste post vou explicar sobre o design, montagem e programação de uma placa controladora de voo para drones DIY com barômetro, bússola, acelerômetro, giroscópio, utilizando o microcontrolador ARDUINO NANO V3.0 328P, que pode ser programada via USB ou Bluetooth pelo software Multiwii:




É uma placa semelhante a Naza, CC3D e Multiwii CRIUS SE, porém, é personalizável de acordo com suas necessidades e recursos. Ela aceita GPS, OSD e outros sensores como ultrassônico, depende de como você irá configurar o programa que será gravado.

Módulos Necessários:

- 1x Arduino nano V3 com atmega 328p;
- 1x Módulo MPU6050 (Acelerômetro e Giroscópio);
- 1x Módulo BMP180 ou 085 (Barômetro);
- 1x Módulo HMC5883L (Magnetômetro);
- *Se preferir existe um Módulo com os 3 sensores acima - Módulo GY87;
- 1x Módulo Bluetooth HC05.

Materiais e ferramentas necessárias para criar a placa:

- 1x Placa de PCB 5x5cm;
- Percloreto de ferro;
- Caneta para retroprojetor;
- Furador de placa;
- 2x Pin headers 1x40;
- 2x Socket Header 1x40;
- Ferro de solda;
- Estanho;
- 2x Resistores de 330 ohms;
- 2x LEDs verde/vermelho;
- 2x Resistores de 4k7 ohms;
- Fios diversos, macho-macho, macho-fêmea e fêmea-fêmea;
- Potes plásticos onde será corroída a placa.

Rádio e Receptor utilizados neste Drone:
FSCT6B

Vamos nos basear no circuito abaixo e utilizar as mesmas conexões para a nossa placa:



Pinos de entrada onde serão conectados ao receptor, neste exemplo é um receptor 6ch.

CH3 - Acelerador = D2
CH1 - Roll (aileron) = D4
CH2 - Pitch (profundor) = D5
CH4 - Yaw (leme) = D6
CH5 - AUX1 = D7
CH6 - AUX2 = D12

Pinos D3, D10, D9 e D11 são ligados para cada saída PWM para os motores conforme imagem abaixo e na nossa placa, devemos posicionar o MPU6050 de modo que o eixo Y aponte para o sentido de voo:

Todos os sensores serão ligados em paralelo, utilizando a comunicação I2C do Arduíno nos pinos A4(SDA) e A5 (SCL). Vamos utilizar dois resistores de 4k7 como resistores de pull up nesses pinos, para manter os pinos SDA e SCL em nivel alto quando não houver comunicação I2C e garantir uma boa comunicação.
O sensor da bússola vai ser responsável por manter nosso travado no sentido de rotação "Z". e deverá ser posicionado com a direção "Y" igual do MPU6050.

Com essas informações, vamos desenhar nossa placa. Utilizei o software Ares (Proteus) para desenhar um layout que fosse mais apropriado para esse projeto e que permitisse um futuro upgrade na nossa placa. Deixei alguns pinos reservados para uso futuro. Vocês podem modificar o layout como preferirem. Alimentei os sensores utilizando os pinos 5V e GND do Arduíno. Abaixo está meu layout, uma visualização 3D e uma figura para impressão que utilizaremos para corroer a placa.


Para transferir a impressão para a placa existem vários métodos, não vou entrar em detalhes pois não é o foco. Utilizei o método mais básico, que é desenhar as trilhas na parte de cobre da placa utilizando uma caneta de retroprojetor.
Após desenhar, preparei a solução de percloreto de ferro e coloquei a placa  para corroer. Depois de corroída, a placa deve ser limpa e verificar se não há falhas nas trilhas, caso ocorra, utilizar o ferro de solda e estanho para repara-las.
Começamos a soldar os resistores, depois os pin sockets e pin headers e por ultimo os LEDs.
Vamos encaixar o Arduíno e sensores na placa conforme a imagem abaixo:


Reparem que deixei o magnetômetro fora da placa conectado com fios, isso porque devemos posicioná-lo em um nível acima da placa e dos motores para evitar interferências eletromagnéticas na bússola. Além disso, a bússola requer um posicionamento de rotação especial em alguns casos para correção da declinação magnética. No nosso caso podemos alterar esse valor no código multiwii.
Também é importante colocar um pedaço de esponja cobrindo o barômetro, isso funciona como um filtro físico contra variações na pressão, por ser muito sensível, o simples vento gerado pelas hélices podem influenciar no sensor.

Pronto, agora podemos começar a programar nossa placa. Você deverá ter a IDE do Arduíno instada em seu computador. O software a ser gravado no Arduíno é o Multiwii. Vem com o código fonte e o Software MultiWiiConf, onde fazemos nossos testes e configurações. Utilizei a versão 2.3 nesse projeto, mas por ser um programa de código aberto, sempre fique atendo a novas versões.

Após baixar o código fonte, abra o arquivo MultiWii.h na IDE do Arduíno e procure pela guia config.h:


Esse código pode ser configurado de maneira simples, apenas comentando (//) ou removendo comentário (//) através dos #define.
Obs: Guarde uma cópia do programa antes de começar a fazer as alterações, caso faça alguma alteração incorreta e o programa não funcione mais.

Vou mostrar as configurações básicas para um quadricóptero tipo X, que utiliza ESCs Simonk, motores A2212 1000kv, bateria lipo 3000mah 3S, receptor 6ch :

  1. Remover (//) da linha  #define QUADX;
  2. Remover (//) da linha #define MINTHROTTLE 1064 ( no meu caso para ESC Simonk), para outros ESCs o padrão é 1150, verificar a linha correspondente e remover //;
  3. Remover (//) da linha #define MAXTHROTTLE 1850 (pode ir até 2000);
  4. Remover (//) da linha #define MINCOMMAND  1000;
  5. Remover (//) da linha #define I2C_SPEED 400000L;
  6. Remover (//) da linha #define GY_521 (pode variar conforme o tipo de sensor ou shield de sensores que você está utilizando);
  7. Remover (//) da linha  #define BMP085;
  8. Remover (//) da linha #define HMC5883;
Isso é o necessário para que possamos gravar o código no microcontrolador e começar a testar.
Na IDE, vá em Ferramentas e escolha o tipo de Placa como "Arduíno Nano" e processador "Atmega 328". Agora é só compilar, ver se não há erros, conectar nosso arduino na USB e gravar o código nele.
Vamos abrir o Software MultiWiiConf (recomendo abrir o da pasta: MultiWiiConf\application.windows32\MultiWiiConf.exe).
Selecione a porta de comunicação, clique em "start" e comece a explorar as diversas configurações que esse software permite. Podemos ver se os sensores estão funcionando corretamente, fazer calibrações, configurar modos de voo etc. O vídeo a seguir mostra um teste feito através deste software verificando se os sensores estão na orientação correta.


Visite esse post abaixo onde detalho melhor como configurar os modos de voo utilizando essa placa e sensores:
Como configurar modos de voo multiwii?

******************
VÍDEO DE TESTE*
******************

A placa controladora pode ser configurada também via bluetooth, através dos pinos TX e RX. Lembre-se de configurar o módulo bluetooth para baud rate de 115200 via comandos AT. Para configurar o módulo bluetooth devemos conectar o mesmo no arduino como no diagrama abaixo:



Vamos abrir a IDE do arduino e copiar o código abaixo:

#include <SoftwareSerial.h> 

SoftwareSerial bluetooth(10, 11); // RX, TX

void setup() {
  delay(500); 
  Serial.begin(9600); 
  Serial.println("Digite os comandos AT :"); 
  bluetooth.begin(9600); 

void loop() {
     if (bluetooth.available()) 
     Serial.write(bluetooth.read()); 
     if (Serial.available())
     bluetooth.write(Serial.read());

Compile e grave o código no arduino. Feito isso, abra o monitor serial da IDE para começar a configuração. 
Antes de ligar a alimentação do módulo bluetooth é importante segurar um botão que fica no módulo por uns 2 segundos enquanto liga a alimentação do mesmo. Isso fará com que ele entre em modo de configuração AT. Você pode verificar se ele entrou em modo AT observando o LED  do mesmo que antes piscava rápido agora pisca mais lentamente. Deixe setado por enquanto o baud rate para 9600, both NL & CR e vamos enviar os seguintes comandos via monitor serial: 
  • AT ( Ao digitar AT testamos o modo AT e a resposta deverá ser OK);
  • AT+NAME? (Retorna o nome do dispositivo);
  • AT+PSWD?( Retorna a Senha do dispositivo).
Se quiser trocar a senha e nome do dispositivo:
  • AT+PSWD=4321(seta a senha para 4321;
  • AT+NAME=multiwiidiy (Seta o nome do dispositivo para multiwiidiy).
Se não houver resposta, pode ser que o baud rate esteja diferente, podemos modificar para mais ou para menos em valores tabelados até que tenhamos resposta do módulo. 
Após ter certeza que o modulo está respondendo, enviamos o seguinte comando para modificar o baud rate do módulo para 115200 e assim poder comunicar com o Android:
  • AT+UART=115200,0,0 ( Seta o baud rate para 115200).
Desligamos a alimentação do arduino para que as alterações tenham efeito. Após isso não utilizaremos mais a ligação no pino D4 do arduino.

 Fiz uma placa à parte com resistores e um encaixe para o módulo bluetooth HC05 como na imagem abaixo, postei uma atualização no post com essa placa já embutida na placa controladora.


 Isso nos permite configurar nossa placa em campo, utilizando um Smartphone. Existem diversos softwares para Android como o EZGUI que permite essas configurações, como PID, auxiliares, modos de voo e muito mais.
Lembrando que não podemos gravar na placa via USB se o bluetooth estiver conectado, pois ocorre um conflito de comunicação. Sempre desconecte o bluetooth quando for programar via USB e vice-versa.
Agora sua placa já está pronta para ser montada no seu Quadricóptero. Lembre-se de posicionar a placa no sentido correto de voo e a bússola em um ponto longe dos fios dos motores.
Segue um vídeo de teste dessa placa montada no Quadricóptero, repare que adicionei um GPS na mesma, conectando através dos pinos I2C e utilizando uma navboard como interface:





Ao adicionar o GPS, temos que configurar no programa config.h todos os parâmetros necessários para que o mesmo funcione corretamente. Sugiro começar apenas com os sensores descritos acima e instalar um GPS somente quando tudo estiver calibrado e tivermos mais confiança e experiencia com o programa e seu Quad.

************ ATUALIZAÇÃO PARA INTERFACE BLUETOOTH*************

Segue atualização do Layout da placa controladora para melhor montagem do módulo bluetooth sem precisar de montar resistores, já embuti eles na placa.
O Jumper é opcional para evitar de remover o módulo bluetooth quando utilizar a porta USB. Esse jumper vai interligar os dois resistores da parte de baixo da imagem e não está no arquivo de schematic do Ares.
Também adicionei um pino de monitoramento de bateria.

Link Dropbox para arquivo Ares (Proteus): DIY Board







Assista o Vídeo e se inscreva no meu canal no youtube!
https://youtu.be/4so6ZdPtz4w

Se ainda não tem um Quadricóptero e gostaria de montar um frame passo-a-passo, utilizando materiais DIY, visite esse post, onde mostrarei como montar essa placa no frame e conectar os motores, ESCs e o receptor. Caso queira montar em um Frame comprado, tem esse aqui que comprei e recomendo.

Para um vôo seguro, siga as normas e cadastre seu modelo acima de 250g no site da ANAC.




 Abraço!.











19 comentários:

  1. Olá Fernando.
    Parabéns pelo post.
    No caso do projeto,vc utilizou somente o código multiwii embarcado no Arduino sem a necessidade da placa Multiwii?
    O Arduino fez toda a parte de controle de voo do drone?

    ResponderExcluir
  2. Sim, essa placa associada aos sensores funciona como uma multiwii.

    ResponderExcluir
  3. Ola tava vendo o seu projeto do quadr aquele codigo esta completo

    ResponderExcluir
  4. Está sim, você pode modificar de acordo com os sensores que você utilizar

    ResponderExcluir
  5. fernando parabens cara pelo projeto! me diz uma coisa, tem como eu conectar uma antena bluetooth HC-05? estou usando um arduino mega 2560, pq n consigo conectar o gps no uno. na real estou no aguardo dos motores para dar continuidade no meu drone, e queria ver se rolava de conectar essa antena no arduino mega.Vc pode me ajudar? n tenho noçao nem uma de programação mas ja fiz o gps e sensor MPU6050 rodarem no wingui e agora queria fazer isso so com meu androide! meu email andre.blenderemb@gmail.com e se quiser seria muito legal vc me add no whats (48)998068585 muito obrigado deis de já! abs PARABENS

    ResponderExcluir
    Respostas
    1. Obrigado André pelo feedback, este módulo HC-05 é o indicado para esse projeto, atualizei o post com mais informações de como configurar o módulo para baud rate 115200 para poder comunicar com o software no android. É muito útil em campo. Com relação ao GPS no arduino nano/uno, será necessário utilizar uma placa de interface I2C (NAVBOARD). No Arduino mega não precisa, pois ele possui varias seriais. Se tiver mais alguma dúvida pode me enviar por e-mail ou whats se quiser, está na guia contato. Vlw.

      Excluir
  6. Pow Fernando, muito obrigado mesmo pela atenção estou levando uma surra gps ja deu certo mas o HC05 n rolou a inda vou olhar agora novamente! muito obrigado e desculpa o incomodo!
    abs feliz ano novo muitos voos saude e paz abs....

    ResponderExcluir
  7. Olá tem como me mandar o diagrama para impressão da placa
    bikedicas80cc@gmail.com

    ResponderExcluir
    Respostas
    1. Hello, please send me this circuit, too, thank you
      djmetal666@gmail.com

      Excluir
  8. Estou com problema no módulo Bluetooth hc-05, os sensores estão funcionando, más a comunicação com o Bluetooth para o smartphone não funciona. Tentei os comandos AT tb não funcionou, não retornava resposta, más o led tinha ficado piscando mais lento que informava que estava em modo de configuração AT. Se poder ajudar agradeço

    E com um código que eu editei apenas para verificar se o motor funcionava deu certo, más é um código muito ruim.

    ResponderExcluir
    Respostas
    1. Você só vai conseguir se comunicar com o smartphone após setar o baudrate via comando AT, talvez se tentar enviar os comandos AT em outros baudrates via IDE do arduino, pode ser que consiga. Enquanto você não tiver resposta do módulo, não é certeza que o mesmo foi configurado.
      Qual código você diz que é ruim?

      Excluir
    2. Ja tentei muitas vezes enviar comandos AT, até em outros Baundrate não vai nem com outros projetos. Más esse é o problema mesmo o Baundrate
      O código ruim, foi um que eu fiz pegando uns exemplos na net para fazer funcionar os motores via bluetooth

      Excluir
  9. ola fernando como posso entrar em contato com vc, eu tava querendo fazer um drone mais o menos igual o seu, e gostaria de trocar umas ideias com vc, meu telefone é 18 - 99800-6983 meu email é eliel_leal_13@hotmail.com.br

    ResponderExcluir
  10. Olá, ainda não tive a oportunidade de trabalhar com mavlink in multiwii.

    ResponderExcluir
  11. Boa Tarde Fernando. Se eu utilizar um arduino Uno preciso mudar o código? Meu rádio é um FlySky fs-i6. Pode ser ? Valeu... parabéns pelo trabalho!!

    ResponderExcluir
    Respostas
    1. Funciona sim no uno, só mudar na hora de compilar no Arduino IDE.
      Precisa verificar as portas se correspondem ao esquema.

      Excluir
  12. Com base nesse projeto, o que seria necessário fazer para controlar o drone por controle bluetooth?

    ResponderExcluir
  13. OI, Seria possível construir o drone sem o Barômetro e o Magnetômetro?

    ResponderExcluir
    Respostas
    1. Sim, é possível, ele vai ser um drone em modo acro e estabilizado. Só não vai travar a altura e nem travar a posição "yaw"nos modos como headfree por exemplo

      Excluir