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é

2 comentários:

  1. Marcos, bom dia!

    Achei muito interessante seu projeto e gostaria de parabenizá-lo primeiramente! Iniciei recentemente com o Arduino e meus conhecimentos com programação ainda são bem básicos. Vi em alguns videos que o multiwii tem um programa que você abre na IDE do Arduino para alterar as configurações etc...Minha dúvida com relação ao Arduino + GY 80 e quanto a programação, é preciso efetuar algum tipo de programação ou apenas ajustar o código do multiwii para controlar um quadricoptero com essas duas placas.
    Obrigado!

    ResponderExcluir
    Respostas
    1. Basta apenas ajustar as definições no arquivo 'config.h' contido no código do projeto Multiwii.

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

      Abraço.

      Excluir