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!.