Mostrando postagens com marcador Magnetômetro. Mostrar todas as postagens
Mostrando postagens com marcador Magnetômetro. Mostrar todas as postagens

quarta-feira, 30 de outubro de 2013

Flight Controller +


Pessoal, nesse post vou mostrar como configurar o Multiwii para um quadricoptero em X utilizando a plaquinha IMU GY-80 de acordo com o meu projeto.

Para começar vamos precisar do compilador para o arduino, o mais prático é o oferecido pelo site oficial do arduino em: 
O código fonte do projeto Multiwii pode ser encontrado em:
http://code.google.com/p/multiwii/downloads/list (esse teste foi realizado com a versão 2.2).

Depois de fazer os downloads, instalar o IDE e descompactar o código do projeto, basta abrir o arquivo "MultiWii.ino" pela IDE do arduino e todos os arquivos do projeto vão abrir em várias abas. 

O primeiro passo é fazer a configuração do projeto. Para isso será necessário ir até a aba do arquivo "config.h" e habilitar algumas definições.


Em "SECTION 1 - BASIC SETUP" escolha o tipo do multi-rotor, basta remover o comentário // do define e deixar como abaixo

#define QUADX

Ainda na mesma seção procure por "Combined IMU Boards" e remova o comentário da GY-80 para habilitar os sensores.

#define GY_80 // Chinese 10 DOF with L3G4200D ADXL345 HMC5883L BMP085, LLC

Agora em "SECTION  4 - ALTERNATE CPUs & BOARDS" procure por "Aux 2 Pin" e remova o comentário para ativar o AUX2 no pino 12 do arduino (essa configuração é necessária para utilizar o AUX2 no layout que desenvolvi).

#define RCAUXPIN12

Pronto, as configurações necessárias para testar os código já estão feitas. Agora vou mostrar umas configurações opcionais.

Em "SECTION  2 - COPTER TYPE SPECIFIC OPTIONS" procure por "ARM/DISARM". Nessa configuração é possível ligar os motores com um comando no stick do Yaw ou no do Pitch.

Definindo:

#define ALLOW_ARM_DISARM_VIA_TX_YAW

O multi-rotor vai ligar os motores quando o stick do throttle/yaw for colocado todo para baixo e para direita e desligar quando for colocado para baixo e para esquerda.

Definindo:

#define ALLOW_ARM_DISARM_VIA_TX_ROLL

O multi-rotor vai ligar os motores quando o stick do pitch/roll for colocado todo para baixo e para direita e desligar quando for colocado para baixo e para esquerda.

Na mesma seção em "Cam Stabilisation" é possível ligar o controle para os servos do gimbal.

Definindo:

#define SERVO_MIX_TILT

O gimbal vai funcionar como no sistema SUPER SIMPLE GIMBAL (SSG) que achei genial e pretendo montar esse para o meu quad. Mais sobre esse sistema basta ler esse tópico:
http://www.rcgroups.com/forums/showthread.php?t=1793759 (No tópico fala que é para placa KK2 mas essa versão do Multiwii já tem suporte, eu testei esse modo :D).

Definindo:

#define SERVO_TILT

Os servos vão funcionar do modo tradicional para o gimbal.
Caso não for usar o gimbal, basta deixar as duas definições comentadas.


Abaixo segue uma imagem com as especificações para ligar os ESCs e os receptor.


Também tive que fazer um cabo para ligar os pinos A4 e A5 do arduino no circuito. Usei um pedaço de cabo flat de pc.


Lembrando que foi necessário remover o jumper para isolar a alimentação do arduino e do receptor, no caso eu utilizei outra fonte de energia para o receptor. Quer uma explicação? leia isso:


Com o jumper removido, agora segue o vídeo com o teste feito na minha placa controladora de voo.



Até

segunda-feira, 14 de outubro de 2013

Testando Arduino e Sensores

Pessoal, desde que recebi as placas do Arduino Pro Mini, FTDI e sensores (GY-80) comecei a fazer alguns testes antes de colocar o código do projeto Multiwii. Agora vou mostrar como são feitas as conexões entre esses circuitos.

Para fazer os testes vão ser necessários o driver para o FTDI que pode ser encontrado em http://www.ftdichip.com/Drivers/VCP.htm e a IDE para programar o arduino que pode ser encontrado em http://arduino.cc/en/Main/Software#toc1. Para quem não sabe IDE é sigla para Integrated Development Environment que é um ambiente onde é possível desenvolver códigos, compilá-los e no caso dessa IDE é possível fazer o upload do arquivo binário direto na memória do CI (Circuito Integrado) do arduino que é o Atmega328-P.

Abaixo segue a imagem das minhas placas Arduino Pro Mini e FTDI com as ligações destacadas:
Como pode ser visto a ligação vai ficar assim:

Arduino           FTDI
----------------------
DRT   <--->   DRT
TX      <--->   RX
RX      <--->   TX
VBUS <--->   5V
CTS    (não ligar em nada)
GND   <--->   GND

DRT serve para colocar o Arduino Pro Mini no estado de update de firmware.
TX e RX são para comunicação.
VBUS e GND são para alimentação, quando o FTDI for ligado no USB ele vai energizar o arduino por meio do pino VBUS. Nunca ligue o arduino em outra fonte de energia quando ele estiver ligado ao FTDI.

Abaixo segue um código simples para testar o seu arduino e FTDI:

int inByte = 0;
int led = 13; //Utilizando pino 13 que tem um LED integrado

void setup()
{
  Serial.begin(9600);
  while (!Serial) {
    ;
  }

  pinMode(led, OUTPUT); //Colocando o pino 13 em modo de saída
}

void loop()
{
  if (Serial.available() > 0)
  {
    inByte = Serial.read();
    if (inByte == 49) //Número 1 no teclado
    {
      digitalWrite(led, HIGH); //Pino 13 em high (energizado)
      Serial.println("Ligado"); //Manda o texto pelo FTDI 
    } 
    else if (inByte == 50) //Número 2 no teclado
    {
      digitalWrite(led, LOW); //Pino 13 em low (sem energia) 
      Serial.println("Desligado"); //Manda o texto pelo FTDI
    }
    delay(30); 
  }  
}

Depois de fazer o download da IDE, é necessário fazer algumas configurações iniciais:
  1. Abra a mesma, vá ao menu Tools > Board e selecione "Arduino Pro Mini (5V, 16 MHz) /w Atmega328" caso esse seja seu arduino;
  2. Agora vá ao menu Tools > Serial Port e selecione a porta COM criada pelo driver do FTDI. Se não sabe qual escolher, você pode testar todas (acredito que não tenha muitas) ou procurar no gerenciamento do computador. Basta ir ao "Menu Iniciar" usar o botão direito do mouse na opção "Computador", escolher "Gerenciar", clicar no menu em "Gerenciador de dispositivos", depois procurar em "Portas (COM e LPT)". Você deve encontrar "USB Serial Port (X)" onde X é a porta COM procurada.
Feito as configurações, agora cole o código na tela da IDE e depois clique no botão "Upload" (Botão com uma seta para direita). Se não ocorrer nenhum erro, agora basta ir ao menu Tools > Serial Monitor ou pressionar Ctrl+Shift+M para abrir o serial monitor onde será possível enviar os comandos e ver o retorno.
Agora aperte os números 1 ou 2 na caixa de texto e pressione enter. O LED integrado do arduino deve acender ou apagar de acordo com o seu comando =D

Agora vamos para a ligação e teste dos sensores. O arduino e o sensores se comunicam através de barramento I2C (Inter-Integrated Circuit), onde o arduino age como mestre e o GY-80 como escravo. Esse barramento de comunicação é interessante por permitir que vários dispositivos sejam ligados no mesmo, cada qual tem um número de identificação para comunicação direta. Abaixo segue a imagem da minha placa GY-80 e as ligações em destaque. Só lembrando que a placa GY-80 já tem suporte no código do Multiwii...

Como pode ser visto as ligações ficaram assim:

Arduino           GY-80
------------------------
A4     <----->   SDA
A5     <----->   SCL
5V     <----->   VCC_IN
GND <----->   GND

Apenas com essas ligações vai ser possível ler os dados dos sensores na GY-80, no entanto eventualmente podem ocorrer alguns erros nas leituras devido a oscilações ocorridas quando nenhum dado esta passando pelo barramento. Para corrigir o problema é necessário fazer um pull-up com resistores de 2,2k Ohms ligados entre o A4/A5 e o 5V do arduino (para entender mais sobre isso leia pull-up de resistores). Dessa forma, quando a placa GY-80 não estiver comunicando com o arduino, os valores das saídas SCL/SDA vão estar em high, ou seja, vão estar energizados e não mais oscilando.

Agora que as ligações estão corretas, mantenha o FTDI também conectado ao arduino. É só testar os códigos do link abaixo. Esses são fornecidos junto com o pacote de instruções da placa, mas tive que fazer alterações, pois uma biblioteca antiga de comunicação I2C estava sendo usada. Quando fizer o upload do código, abra o "Serial Monitor" para ver os resultados. 

Link dos códigos de teste:

Link dos datasheets:


Por enquanto é isso.

Até