Mostrando postagens com marcador Arduino. Mostrar todas as postagens
Mostrando postagens com marcador Arduino. Mostrar todas as postagens

segunda-feira, 30 de dezembro de 2013

GPS + I2C_GPS_NAV


Pessoal, comecei a planejar como adicionar um modulo GPS no quad. Já tem um certo tempo que comprei esse modelo NEO-6M GPS Module (agora quando olhei o valor, está mais barato que os $20,98 que paguei). Ele vem com um modulo de GPS da u-blox e parece ser bom... Tem uma precisão de aproximadamente 5 metros, o que faz o preço dele ser atraente comparado a outros módulos GPS com a mesma precisão.
No site da Hobbyking não diz mas ele funciona com tensão de 5V, vi algumas pessoas afirmando isso nos comentários, então fiz o teste e realmente funciona com 5V (de acordo com o site da u-blox o modulo necessita de 1.8~3.0V de tensão, porém acredito que a placa onde esse está, tenha um regulador de tensão e aceite de 3.3~5V, mas não encontrei nenhuma informação consistente)

Como o modulo completo aceita tensão de 5V, a instalação não é muito complicada, basta utilizar a saída serial do arduino em conjunto com o projeto Multiwii, no entanto eu já estou utilizando a saída serial com o modulo bluetooth, sendo assim precisei procurar uma alternativa... Logo encontrei um adaptador de GPS serial para I2C, I2C_GPS_NAV, que resolveria meu problema (para quem tiver interesse nesse adaptador aqui vai o link). Contudo não fiquei contente com o preço desse adaptador... Foi então que descobri que ele utiliza um Atmega328P e um código aberto que pode ser encontrado em: 


Agora o que eu precisava era somente de outro arduino, sorte que eu já havia comprado outro no Banggood por um ótimo preço, muito muito barato comparado ao primeiro que comprei no DX, porém o do DX parecia ter o layout original e tinha escrito Arduino Pro Mini nele, não que isso importe para mim... Segue o link:


Segue uma fotos do GPS... Ele vem com um mini conector, mas resolvi não usá-lo, coloquei um conector mais prático.


Uma outra vantagem de utilizar esse código é poder ligar um sensor ultrassônico no arduino controlador do GPS e assim melhorar a precisão de altitude. E também é possível utilizar as demais saídas do arduino para outras finalidade. Ex: Ligar os LEDs do quad.


As ligações devem ser feitas assim:

Ligar o GPS no Arduino:



Ligar o Arduino no Sonar


Para ativar o tipo de sonar do HC-SR04 é preciso modificar um valor no arquivo "config.h" do projeto I2C_GPS_NAV. Remover o comentário do valor PINGPONG e deixar comentado o valor MAXBOTIX_PWM:

#define PINGPONG

//#define MAXBOTIX_PWM

Feito as ligações, para estabelecer uma comunicação entre os dois arduinos, basta ligar o A4 no A4 e A5 no A5 de cada um. É recomendado colocar resistores pull-up de 2.2K Ohms entre o A4 e VCC(5V) e o A5 e VCC(5V).

Agora é necessário ativar o GPS I2C no Multiwii, para isso edite o arquivo "config.h" e procure pela seção "GPS". Agora é so remover o comentário do valor I2C_GPS:

#define I2C_GPS

Se estiver utilizando a versão 2.3 do Multiwii, é possível compartilhar o sonar habilitando o valor:

#define I2C_GPS_SONAR

Por enquanto é isso. Estou fazendo muitas mudanças na estrutura do quad, depois venho postar fotos do novo quad hehe.

Até

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é

quarta-feira, 23 de outubro de 2013

Flight Controller

Finalmente a controladora de voo ficou pronta, abaixo segue as imagens.


Chequei todas as conexões da placa para ter certeza que as ligações iriam ficar corretas como no layout. Em seguida, passei esmalte preto para dar um melhor visual (não sei se ficou melhor hehe) e então soldei os componentes. Como dá para ver, o Arduino Pro Mini e a GY-80 encaixaram perfeitamente nos sockets =]
Depois de ter tudo conectado, liguei o FTDI no arduino e fiz upload dos códigos para testar os sensores, felizmente tudo correu bem. O próximo passo foi fazer o upload do código do projeto Multiwii e realizar alguns testes. No segundo post sobre a minha controladora vou detalhar mais como fiz as configurações do código, as ligações e os testes.

Por enquanto é isso.

Até

terça-feira, 15 de outubro de 2013

Layout Flight Controller

Pessoal, comecei a bolar o layout da minha controladora de voo. Baixei um programa free chamado PCBartist, ele é bem legal pois você pode ter certeza das medidas de distância entre conectores e componentes. Comecei a fazer as conexões da minha plaquinha IMU de acordo com o que aprendi e as conexões para ESCs e Receptor seguindo os diagramas do projeto Multiwii.

Eis o meu layout:


Abaixo segue a imagem da placa de fenolite com o layout feito a mão. (Esse layout está um pouco diferente, pois acabei fazendo umas melhorias depois que a placa já estava corroída e esse foi o segundo modelo que fiz então estava sem saco para fazer mais uma :P)


Deu um pouco de trabalho, mas como a impressão pelo PCBartist tem o tamanho real, então basta colocar o papel impresso sobre a placa de fenolite e marcar os pontos onde vão ser perfurados, assim dá para ter uma noção das distâncias. Para quem quer facilidade, existe um papel vendido no mercado livre (aqui e aqui) que ao utilizar o ferro de passar sobre o papel térmico e esse sobre a placa, assim o layout é transferido.

Abaixo segue a placa já corroída no percloreto de ferro. Ficou até legal!


Logo vou colocar os conectores ai venho postar o resultado final.

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é