Postagem em destaque

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte I

Este post é o primeiro de uma série de seis que escrevi tratando de controle de potência e PID (controle proporcional, integral e derivativo...

domingo, 29 de junho de 2014

Comunicação Arduino via Bluetooth I

Outro dia comprei, aproveitando a vinda de amigos dos EUA, alguns gadgets que aqui em Pindorama são caros. Assim vieram um break bluetooth, um acelerômetro (devia ter comprado direto um IMU, que inclui o giroscópio, mas agora já era), um shield GPS e um sensor de impressões digitais.

O primeiro binquedim que funcionou foi o break bluetooth. Muito, muito mole. Ele é igulalim esse aí:


Os quatro pinos de conexão são Vcc, GND, TX e RX, o que indica uma comunicação serial, ou seja, o Arduino verá o bluetooth como um dispositivo serial.

Esse que eu comprei tem um regulador de tensão para poder ser usado em 5V. Outros só podem ser usados em 3.3V, então vc deve alimentá-lo com a saída 3V3 do Arduino e também deve providenciar um divisor de tensão para adequar a comunicação.

Liguei a alimentação e os TX/RX nos RX/TX do Arduino (pinos 0 e 1). Testei e funcionou de cara. O inconveniente dessa abordagem é que vc tem que desligar os fios da comunicação toda vez que for atualizar o software no Arduino, visto que a comunicação PC/Arduino se dá através das mesmas portas.

Para resolver a questão, a gente pode usar outras portas do Arduino como TX/RX. Para isso, primeiro instale a biblioteca SoftwareSerial no seu micro (aqui mesmo no blog ensina como fazê-lo) e em seguida carregue o seguinte pograminha:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX



void setup()

{

  Serial.begin(9600);

  mySerial.begin(9600);

}



int i=0;

void loop()

{

  mySerial.println(i);

  delay(300);

  i++;

}


Observe que o programa usa as portas 10 e 11 como TX/RX, então o seu break bluetooth deve estar conectado nessas portas, RX com TX e TX com RX, claro.

O programa envia para a serial uma sequencia de números inteiros. Como fazer para testar se está funcionando?

A forma mais fácil é se vc tem um celular bluetooth. Nesse caso, instale o software S2 Terminal ou similar em seu celular. Em seguida:

- Conecte o bluetooth segundo as instruções acima.

- Ligue o bluetooth do seu celular.

- Pareie o celular com o Arduino (o Arduino deve aparecer na lista como HC-06, coisa assim).

- Abra o programa de terminal no celular.

- Conecte o programa com o Arduino (depende do programa, no S2 é clicar no ícone que é um plug e selecionar o HC-06.

- Ao fazer isso vc poderá observar que o LED no break bluetooth parará de piscar e ficará aceso, indicando que a conexão existe.

Em seguida o programa começará a mostrar os números enviados pelo Arduino.

É isso. Moleza, não?

Aqui vídeo da bagaça funcionando.



Abracadabraço!

domingo, 15 de junho de 2014

Usando L398 breaks para controlar motores de passo II

Para ler um pouco mais sobre a teoria desse assunto, aqui o datasheet do L298, coração da nossa plaquinha e aqui uma documentação a respeito da própria placa.

Abaixo, um exemplo simples de software para acionar um motor de passo conectado ao break conforme mostrado no esquema do primeiro post:
int IN1=2;
int IN2=3;
int IN3=4;
int IN4=5;
int ENB=6; // Obs: a placa que eu usei usa jumpers como enable, 
int ENA=7; // então nem precisaria de usar esses pinos.
           // Esse fonte abaixo funciona para os dois tipos de placa.

void setup() {
 pinMode(ENA,OUTPUT);
 pinMode(ENB,OUTPUT);
 pinMode(IN1,OUTPUT);
 pinMode(IN2,OUTPUT);
 pinMode(IN3,OUTPUT);
 pinMode(IN4,OUTPUT);
 digitalWrite(ENA,HIGH);
 digitalWrite(ENB,HIGH);
}

void loop(){
 // O sistema vai acionando as bobinas de maneira 
 // a promover o giro do rotor.
 // O intervalo de 30 milissegundos é necessário 
 // para que o rotor gire. Quanto menor,
 // mais rápido o motor gira, até que ele para de 
 // girar e começa a vibrar. Esse é o limite de
 // velocidade para esse tipo de placa controladora, 
 // e depende de cada motor.
 digitalWrite(IN1,LOW);
 digitalWrite(IN2,HIGH);
 digitalWrite(IN3,HIGH);
 digitalWrite(IN4,LOW);
 delay(30);
 digitalWrite(IN1,LOW);
 digitalWrite(IN2,HIGH);
 digitalWrite(IN3,LOW);
 digitalWrite(IN4,HIGH);
 delay(30);
 digitalWrite(IN1,HIGH);
 digitalWrite(IN2,LOW);
 digitalWrite(IN3,LOW);
 digitalWrite(IN4,HIGH);
 delay(30);
 digitalWrite(IN1,HIGH);
 digitalWrite(IN2,LOW);
 digitalWrite(IN3,HIGH);
 digitalWrite(IN4,LOW);
 delay(30);
}

Existe uma biblioteca pronta para controle desse tipo de motor. Ela é interessante porque permite o controle do motor sem ter que dar delay, como a gente faz acima. O programa acima funciona apenas se a única coisa a fazer é acionar o motor, o que quase nunca é o caso. Ao usar a AccelStepper, vc aciona o motor e ele fica acionado enquanto o sistema está fazendo outras coisas.

Abaixo, um exemplo muito simples do uso do mesmo circuito, agora comandado por essa lib.

// ConstantSpeed.pde
// -*- mode: C++ -*-
//
// Shows how to run AccelStepper in the simplest,
// fixed speed mode with no accelerations
/// \author  Mike McCauley (mikem@open.com.au)
// Copyright (C) 2009 Mike McCauley
// $Id: ConstantSpeed.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $

#include <AccelStepper.h>

AccelStepper stepper; 
// Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5

void setup()
{ 
   stepper.setMaxSpeed(600);
   stepper.setSpeed(400);
}

void loop()
{ 
   stepper.runSpeed();
}

É isso. Abracadabraço!

sábado, 14 de junho de 2014

Usando L298 breaks para controlar motores de passo I

Tem uns breaks muito comuns na net (leia-se Mercado Livre etc) que servem para controlar 2 motores CC ou 1 motor de passo. Tenho um deles, e outro dia quis ligá-lo a um motor de passo mas tive muita dificuldade para achar informações sobre como fazer isso. Daí... ideia para um post, por supuesto!

Esse aí é o break. Tem um monte parecido:




Esse é o break com a descrição das conexões:



Observe que o sistema mostra a conexão para dois motores CC. E como ligar um motor de passo?

Abaixo, o esquema que usei. Liguei um motor bipolar (4 ou 5 fios). Para ligar um motor unipolar (6 fios) basta ligá-lo como bipolar, como pode ser encontrado na net.


Observe que a conexão é simples: os pinos de comando são ligados ao Arduino, exatamente como seria feito num motor CC. Liga-se então as bobinas como se fossem os motores CC, cada bobina a um dos conectores para os motores CC. A bateria representa a fonte de alimentação do motor, que normalmente não será o Arduino. Observe a necessidade de "unificar" (conectar) os GNDs (terra) dos dois sistemas. Também existe na placa uma saída 5V, que pode ser usada para alimentar o Arduino.

Abaixo, imagens do circuito montado. O motor foi um daqueles responsáveis pela movimentação do carrinho (cabeçote) de impressora.

















Moleza, não?

O software eu descrevo no próximo post.

domingo, 8 de junho de 2014

Como treinar o seu tubarão I

Eu vinha pensando em construir  algo que voasse. Depois de alguma pesquisa, resolvi que um dirigível seria a melhor forma de começar. Andei procurando no Brasil alguém que fizesse um balão a ser inflado com hélio com dimensões que pudessem ser usadas indoor. Não encontrei. Aí, pesquisando na net, achei esse aqui. Como um amigo vinha de viagem ao Brasil, encomendei um tubarão.

O bicho é diversão pura, como vcs podem ver no vídeo abaixo, que fiz dele, na noite em que chegou.



A ideia a partir de agora é usá-lo em oficinas, aulas e palestras de maneira a ensinar desde conceitos simples até coisas mais complexas em automação usando o brinquedo.

A primeira coisa que fiz foi hackear o controle remoto dele de modo a que pudesse ser comandado pelo Arduino. Agora posso comandá-lo de muitas formas diferentes.

E a estréia dele não poderia ser mais gloriosa. Ontem fiz uma palestra no Lightning Talks, no ITA, e mostrei como ele pode ser comandado pelo controle PS/2, desses de videogame. Abaixo a performance do bicho pelos céus do Instituto de Tecnologia da Aeronáutica, como todos sabem, um centro mundial de excelência em ensino de engenharia.


Aqui, a apresentação de ontem:



Depois eu publico mais detalhes.
Abracadabraço!