sexta-feira, 2 de novembro de 2012

[Tutorial] Controlando Servo Motor utilizando o teclado

Publicação retirada de: www.renatopeterman.com.br

Já faz alguns dias que venho estudando um pouco de eletrônica para o desenvolvimento do meu TCC. Estive pesquisando um pouco sobre microcontroladores e recentemente andei desenvolvendo umas aplicações com o Arduino Duemilanove.
Andei fazendo uns testes com servo motor, e resolvi fazer este tutorial para compartilhar.
Abaixo segue um video que fiz da aplicação em funcionamento.

Para este tutorial é necessário que você saiba um mínimo de programação e já tenha feito alguma coisa com o arduino. Se quiser saber mais acesse o site: www.arduino.cc.
Este projeto nada mais é do que uma interface desenvolvida em C# que permite controlarum servo motor conectado ao arduino a partir das setas direita e esquerda do teclado. Ao final estão os links para download dos projetos que podem ser abertos no Visual Studio (utilizei a versão 2008).
Desenvolvi uma versão mais simples utilizada no tutorial e uma outra um pouco mais completa, os dois projetos estão disponiveis para download no final.
Tentei desenvolver utilizando Java, porém, não consegui compilar no Windows 64 bits. Mas futuramente posto alguma coisa. ;)
Utilizei o servo S3003 da Futaba, mas acredito que não há problema em usar outro modelo.
Abaixo segue uma lista do que utilizei no desenvolvimento:
1º: Conectar o Servo Motor ao Arduino
O Servo Motor que estou utilizando possui um conector com tres fios, um vermelho (5V), um preto (GND) e um branco (responsável pela comunicação com o servo), cada um desses deve ser conectado de acordo com a figura abaixo:



2º: Código para o Arduino e Teste
O programa que será gravado no Arduino, recebe três caracteres através através da comunição serial, por exemplo: se receber “000″ o motor ira para 0 graus, se receber “050″ para 50 graus, “120″ para 120 graus, e assim por diante. É dessa forma que os comandos são enviados para o servo
Note que quando inicio a comunicação Serial utilizando “Serial.begin(9600)”, estou definindo que a taxa de transmissão (baud rate) da porta será de 9600.
Abra a IDE Arduino 0018. Automaticamente ela já inicia com um novo projeto.
Em seguida, utilize o código abaixo e faça o upload para o seu Arduino ou se preferir, faça o download do arquivo no final da página e abra-o na IDE.

// Importa a biblioteca Servo.h do arduino
#include <Servo.h>

// Cria uma variavel do tipo Servo que será
// o nosso servo.
Servo servo1;

// Array de char que receberá o comando
// via serial
char buffer[4];

// Variavel que identifica quantos
// caracteres foram recebidos, pois só é
// possível receber um caracter por vez
int received;

void setup(){

  // Define o baud rate (taxa de trasmissão) como 9600
  Serial.begin(9600);

  // Atribui o servo ao pino 8 do Arduino
  servo1.attach(8);

  // Atribui o valor 0 para a variavel received
  received = 0;

  // Na posição 0 do array, atribui o valor '\0'
  // que identifica onde começa o array
  buffer[received] = '\0';
}

void loop(){

  // Verifica se existe alguma entrada de dados
  // disponivel na entrada serial
  if(Serial.available()){

    // Salva os caracteres no array a cada iteração
    buffer[received++] = Serial.read();

    if(received >= (sizeof(buffer)-1)){

      // Imprime na saída serial o valor
      // Apenas para mostrar o valor
      Serial.println(buffer);

      // Converte o valor de "char" para "int"
      int numero = atoi(buffer);

      // Envia o comando para o Servo Motor
      servo1.write(numero);

      // Zera novamente a variavel
      received = 0;
    }

    // Limpa o buffer da entrada serial
    Serial.flush();

  }

}

Após ter feito o upload do código para o Arduino, você pode testar utilizando o Serial Monitor da IDE.
Insira valores entre 0 e 180 utilizando 3 caracteres por exemplo:
Para 0, digite 000
Para 2, digite 002
para 87, digite 087
para 153, digite 153
e assim por diante.
As duas figuras abaixo demonstram como abrir e como utilizar o serial monitor:







3º: Implementação em C#
No código C# utilizamos a Classe “SerialPort” para conectar a porta serial (no meu caso a porta “COM3″) e enviamos o comando desejado através da função “Write()” ou“WriteLine()”, podendo ser uma string, um array de char ou de bytes. Simples não ?… hehe
Para saber qual porta você está utilizando, na IDE Arduino 0018 vá no menu Tools->Serial Port, conforme a figura abaixo:


Abaixo segue o código utilizado na classe da Janela que conecta na porta e interage com o Servo Motor utilizando as setas do teclado.

// Importa a biblioteca Servo.h do arduino
#include <Servo.h>

// Cria uma variavel do tipo Servo que será
// o nosso servo.
Servo servo1;

// Array de char que receberá o comando
// via serial
char buffer[4];

// Variavel que identifica quantos
// caracteres foram recebidos, pois só é
// possível receber um caracter por vez
int received;

void setup(){

// Define o baud rate (taxa de trasmissão) como 9600
Serial.begin(9600);

// Atribui o servo ao pino 8 do Arduino
servo1.attach(8);

// Atribui o valor 0 para a variavel received
received = 0;

// Na posição 0 do array, atribui o valor '\0'
// que identifica onde começa o array
buffer[received] = '\0';
}

void loop(){

// Verifica se existe alguma entrada de dados
// disponivel na entrada serial
if(Serial.available()){

// Salva os caracteres no array a cada iteração
buffer[received++] = Serial.read();

if(received <= (sizeof(buffer)-1)){

// Imprime na saída serial o valor
// Apenas para mostrar o valor
Serial.println(buffer);

// Converte o valor de "char" para "int"
int numero = atoi(buffer);

// Envia o comando para o Servo Motor
servo1.write(numero);

// Zera novamente a variavel
received = 0;
}

// Limpa o buffer da entrada serial
Serial.flush();

}

}
No mesmo projeto desenvolvi outra aplicação um pouco mais completa conforme a figura abaixo, os arquivos de ambas estão disponíveis para download no final da página.



4º: Fim
Acho que é isso ai, agora é só divertir e usar a criatividade. :D
Abaixo segue o link para download do projeto completo, com o projeto para upload no Arduino e as duas aplicações desenvolvidas em C#.

Publicação retirada de: http://www.renatopeterman.com.br/blog/

sábado, 27 de outubro de 2012

[Programas] Simulador de ciruitos - Fritzing

O Fritzing é a ferramenta ideal para documentar, analisar ou compartilhar projetos de microeletrônica e Arduíno. Utilizado para desenhar protótipos e circuitos, ele é grátis e OpenSource.

As duas características que mais chamam atenção:

-Traz como modo de visualização o modelo real, diagramático e impresso em PCB, onde no ultimo é possível fazer a encomenda da placa personalizada através do site do programa.

-Forum aberto, onde todos os dias usuários adicionam placas e circuitos adicionais para download como: Sonares, Shield extensores e motores diferenciados. Precisa de uma peça que não esta no pacote padrão do Fritzing só basta ir ao forum e procurar!  http://fritzing.org/forum/

Download



[Apostila] Arduíno Básico

Faça o download do melhor livro para iniciantes sobre Arduíno - Arduíno Básico

Contendo mais de 50 projetos com analise profunda de Hardware e Software de cada. Livro essencial para aqueles que desejam se aprofundar em eletrônica e microcontroladores.

Downlaod




segunda-feira, 15 de outubro de 2012

[ Apostilas ] O padrão XBEE - ZigBEE

Estou disponibilizando 3 apostilas introdutórias sobre o padrão de rede mais promissor para o Arduíno o XBEE ou ZigBEE ( uma em espanhol ).

Download - Aqui

domingo, 14 de outubro de 2012

[ Tutorial ] Servo motor com Joystick

Material necessário: 
  • Modulo Joystick Keyes
  • Arduino UNO ( ou outro modelo )
  • BreadBoard ( Qualquer tamanho )
  • Cabos e Jumper para realizar as ligações

Passo a passo:

O pino responsável pelo Eixo Y deve ser ligado em uma porta analogica do Arduíno;
O pino "-" ou GND deve corresponder a porta GND do UNO;
O pino "+" ou PWR deve ser conectado a porta 5V;
O Eixo X não sera utilizado, portanto não há necessidade de conecta-lo;
O pino B ou Button, é utilizado para o botão de pressão do Joystick, nesse projeto não há necessidade de usar-lo;



Sketch: 

#include <Servo.h>   //biblioteca para controle de servo motores
Servo servo1;   // nomeia uma variável para ser servo motor
int port;   // variavel que recebera dados do joystick

void setup(){
  servo1.attach(7);   //diz que o servo1 esta conectado a porta digital 7
  servo1.write(90);   //servo1 começa em posição 90 graus
}

void loop(){
  port = analogRead(5);   //port recebe dados do joy
  port = map(port,0,1023,0,180);   //a rotina map, mapeia os dados (Quase uma regra de 3)
  servo1.write(port);   // servo1 se movimenta com os dados já mapeados do joystick
  delay(15);   //um pequeno atraso na progamação para tornar o controle "mais humano" 
}


Observação: Note que a função analogRead retorna valores de 0 a 1023 e o nosso servo se movimenta de 0 a 180 graus (alguns de 0 a 360), servo motores apenas são controlados pela quantidade de graus, portanto deve se diminuir o intervalo gerado por analogRead, nesses casos deve ser utilizada a função map.


Resultado final:

sábado, 13 de outubro de 2012

Diferenças entre placas Arduíno

Entendendo os diferentes modelos de Arduíno disponíveis no mercado:



Arduíno UNO: A placa padrão, traz as funcionalidades básicas da linha. Baseada no microcontrolador ATmega 328, possui 13 pinos de entrada e saida (I/O) digital do quais 6 tem suporte a PWM e 6 entradas analógicas ( normalmente utilizada para sensores ). O UNO é uma versão melhorada do Arduíno Duemilanove.

Arduíno Leonardo: O Leonardo difere de todas as placas precedentes por que o ATmega32u4 tem comunicação USB embarcada, eliminando a necessidade de um segundo processador. Isto permite ao Leonardo aparecer em um computador conectado como um mouse ou um teclado além de uma porta COM virtual (CDC) serial. Isto tem outras implicações no comportamento de uma placa, que estão detalhados na página de primeiros passos (em inglês).

Arduíno Ethernet: O Arduíno Ethernet é diferente de outras placas pelo fato de não possuir um chip conversor de USB para serial, possui leitor de carão microSD embarcado. Voltado para comunicação em rede, o que facilita a comunicação com outras placas Arduíno e com uma área de trabalho (PC - Notebook).

Arduíno Pro: O Arduíno pró é direcionado para instalações semi-permanentes em objetos ou exibições. A placa vem sem conectores pré-montados permitindo ao usuário o uso de diversos tipos de conectores ou cabos soldados diretamente. O desenho dos pinos é compatível com os shields Arduíno  A versão de 3,3V pode ser alimentada por uma pilha.

Arduíno MEGA: Para protótipos avançados em que haja uma maior necessidade de memoria e de entradas, tanto digitais como analógicas  O mega é compatível com a maioria dos shields desenhados para os Arduino Uno, Duemilanove e para o Diecimila.

Arduíno LilyPad: O LilyPad Arduíno é uma placa-microcontrolador desenvolvida para vestimentas e tecidos inteligentes. Ele pode ser costurado diretamente sobre tecido e de modo similar ser conectado com fontes de alimentação, sensores e atuadores com linha condutiva.

Arduíno Bluetooth: O Arduíno BT é uma placa Arduíno com um módulo Bluetooth incorporado, permitindo a comunicação sem fio. O uso de um conversor de corrente contínua, permitindo que a placa seja alimentada com um mínimo de 1,2V mas com um máximo de 5,5V.

Arduíno Nano: O Arduíno Nano é uma versão para ser acoplada a uma protoboard com uma porta USB acoplada. Ele é a versão mais pequena e completa das placas Arduíno. O Nano foi desenvolvido e é produzido pela Gravitech. Eletronicamente ele tem tudo o que o Diecimila tem com mais pinos de entrada analógica e um jumper acoplado de +5V AREF. Fisicamente ele não tem a entrada auxiliar nem o jumper para selecionar a fonte de alimentação. Como o Nano detecta automaticamente chaveia para a maior fonte de alimentação não há necessidade do jumper de seleção.

Arduíno MEGA ADK: O Arduino ADK (Android Development Kit) é um microcontrolador baseado no ATmega2560. Ele tem uma interface USB host, para se conectar com celulares Android. Largamente utilizado para desenvolvimento de interfaces e aplicações baseadas no sistema móvel da Google.

Arduíno Fio: O Arduino FIO (Funnel IO) é uma placa desenvolvida por Shigeru Kobayashi baseado no design original do LilyPad. Funnel é um conjunto de ferramentas para esboçar sua idéia fisicamente, e consiste de bibliotecas de software e de hardware. Utilizando o Funnel o usuário pode criar interfaces com sensores e/ou atuadores com várias linguagens de programação como ActioScript 3, Processing e Ruby.

Conversor Serial: Esta placa converte uma conexão USB em uma conexão serial de 5V TX e RX que você pode conectar diretamente ao Arduíno Mini, Arduíno Ethernet ou outros microcontroladores permitindo que eles se comuniquem com computadores.

Arduíno Mini: Semelhante ao Nano, apenas menor e com 14 pinos digitais e 8 analógicos. Deve ser utilizado em projetos onde o espaço utilizado deve ser o minimo possível, como: Aeromodelos e produtos de bolso.

Fonte: http://www.multilogica-shop.com
          http://arduino.cc/
          http://pt.wikipedia.org/wiki/Arduino