Conheça meus projetos
DIY - Faça você mesmo
Construa você mesmo um carrinho que pode ser controlado por celular através de conexão Bluetooth
1653 Acessos
-
37 Curtidas - Dificuldade postado 19 de Julho de 2016 - atualizado 09 de Dezembro de 2016
Autor: Alex Pisciotta
O carrinho foi projetado para estudo na área da mobilidade, sendo instrumento para estudo de módulos de comunicação e de sensoriamento. Para tanto, iniciei o projeto com o básico: plataforma mecânica, circuito driver, arduino para controle das funções e um módulo de comunicação Bluetooth.
Foram adquiridos, em uma loja de brinquedos, um par de carrinhos estilo "tomba-e-volta". Foi removida a carcaça do carrinho, e foram removidas duas rodas do mesmo lado do chassi. Dessa forma, obtemos dois conjuntos com duas rodas e um motor independentes, que serão unidos em um chassi feito de CD velho.
Um CD velho une os dois conjuntos mecânicos. O CD foi escolhido porque o acrílico é relativamente resistente e leve, e o orifício central ajuda a passar fios elétricos entre as camadas de circuitos. Observe que as laterais do CD foram cortadas para permitir a distância mínima entre os motores.
Fixe os dois conjuntos de motores na base de acrílico utilizando cola quente e pequenas cantoneiras geralmente encontradas em lojas de móveis planejados. Alinhe os motores para ter um conjunto simétrico.
Dessa forma, obtemos uma plataforma que se apoia em 4 rodas, e cada lado dessa plataforma é tracionada por um motor, o que permite a execução de manobras como as de um tanque de guerra (mas sem as esteiras).

Na parte traseira do chassi foi fixada com 4 parafusos a placa de interface Dupla Ponte H, que é descrita adiante. Na parte frontal do chassi se reservou espaço para uma bateria de 9V e um suporte de 4 pilhas AA. A bateria de 9V fornece energia para a placa de controle (o Arduino), e as 4 pilhas fornecem 6V para o circuito de interface, alimentando os motores. Para que as pilhas e bateria não caiam durante a movimentação do carrinho, foi fixado um anteparo feito com cartão (de plano de saúde obsoleto) dobrado em L. Nas laterais foram fixados outros 2 cartões dobrados em L para apoiar mais um CD, formando uma plataforma elevada, aonde foram colocados o Arduino e um mini breadboard para a ligação da alimentação e dos periféricos como farol, buzina e módulo Bluetooth.
O circuito consiste em duas pontes H, uma para cada motor, que permite sua ativação na direção desejada. Colocando os dois motores para frente, o carrinho irá para frente. Colocando ambos os motores para trás, o carrinho vai para trás. Colocando o motor da direita para frente e o da esquerda para trás, o carrinho girará para a esquerda sobre seu próprio eixo, e vice-versa.
FuncionamentoNa figura abaixo temos setas indicando o fluxo de corrente quando o pino "frente" do motor M1 é acionado. Com uma tensão positiva nesse pino, a corrente é limitada pelo resistor de 1k e satura o transistor 2N2222, que faz fluir corrente da base do transistor PNP TIP32 em direção à base do transistor NPN TIP31 do braço oposto, fazendo esses dois transistores conduzirem, permitindo a passagem de corrente elétrica no motor em um sentido. Ao aplicar tensão positiva no braço oposto do circuito, a corrente flui no motor pelo sentido contrário, invertendo o seu sentido de rotação. Os diodos D1 a D8 servem para impedir a queima dos transistores devido à alta tensão reversa gerada pelo motor DC durante o desacoplamento sucessivo de suas bobinas pelas escovas durante seu funcionamento.

À partir do diagrama esquemático foi criado o leiaute (isso mesmo, "layout" é inglês, e já temos essa palavra em nosso idioma) da placa de circuito impresso. Eu utilizei os softwares gratuitos SCHExpress e PCBExpress, que podem ser instalados baixando o instalador no site oficial www.expresspcb.com. Nesse site você encontra tutoriais, compartilha componentes customizados com a comunidade e ainda pode encomendar suas placas com qualidade profissional.
Existem outros softwares que você pode utilizar para essa tarefa, mas a maioria é paga, e alguns incluem simulação de circuitos (o que é muito bom para quem está estudando eletrônica ou projetando circuitos próprios). Os principais são Multissim da National Instruments, Eagle da CadSoft (https://cadsoft.io/ não simula circuitos, possui autorouter e disponibiliza versão gratuita com limitações) e o Proteus. A grande desvantagem do expressPCB é não possuir a ferramenta Autorouter, o que significa que você deve desenhar todas as trilhas da sua placa, enquanto o software apenas indica os pontos comuns do seu circuito. Para circuitos pequenos isso não chega a ser um problema, mas torna seu uso desfavorável em circuitos mais complexos. Enfim, utilizando esses softwares cheguei ao seguinte leiaute:
O conector J1 recebe a alimentação 6V do grupo de pilhas, e a polaridade é indicada tanto na serigrafia quanto no lado cobreado. O conector J2 é onde os sinais do Arduino devem ser conectados. Os conectores M1 e M2 vão para os respectivos motores.
Lembrando que para se fazer a transferência do leiaute para a sua placa pelo método térmico se deve utilizar a imagem espelhada, como segue:
Baixe nestes links o leiaute e a serigrafia para você poder montar a sua placa.
Usei o método de transferência térmica do leiaute para a placa cobreada, fiz a corrosão no percloreto de ferro e então soldei os componentes.
Fixei a placa com parafusos e porcas na base de acrílico, liguei a alimentação. Ficaram faltando 4 ligações elétricas da ponte-H para os comandos dos motores. Esses comandos serão enviados pelo Arduino após a programação.
Convencionei as ligações do Arduino da seguinte forma:
Dessa forma, para se locomover para frente é necessário acionar os pinos 13 e 11. Para ré, devem ser acionados os pinos 12 e 10 do Arduino. Para rotacionar para a esquerda, acionam-se os pinos 13 e 10, e para rotacionar para a direita, os pinos 11 e 12 do arduino.
Foi escolhido um aplicativo Android chamado Bluetooth RC Controller, que disponibiliza uma série de botões para envio dos comandos via Bluetooth. Esse aplicativo também permite o controle de direção utilizando o acelerômetro do celular, enviando os comandos ao inclinar o celular em diferentes direções.
Abrindo o aplicativo, clicando na engrenagem e em Settings, pode-se verificar os caracteres correspondentes a cada comando. São esses caracteres que o Arduino deve receber e transformar em ações.
A tabela a seguir mostra todos os comandos possíveis de serem enviados pelo aplicativo:
| Comando | Descrição |
|---|---|
| F | Frente |
| B | Ré |
| R | Direita |
| L | Esquerda |
| G | Esquerda para frente |
| I | Direita para frente |
| H | Esquerda ré |
| J | Direita ré |
| S | Parado |
| W (maiúsculo) | Ligar Luzes frontais |
| w (minúsculo) | Desligar Luzes frontais |
| U (maiúsculo) | Ligar luzes trazeiras |
| u (minúsculo) | Desligar luzes trazeiras |
| V (maiúsculo) | Ligar Buzina |
| v (minúsculo) | Desligar Buzina |
| X (maiúsculo) | Ligar função extra |
| x (minúsculo) | Desligar função extra |
| 0 (zero) | Velocidade 0 |
| 1 | Velocidade 10 |
| 2 | Velocidade 20 |
| 3 | Velocidade 30 |
| 4 | Velocidade 40 |
| 5 | Velocidade 50 |
| 6 | Velocidade 60 |
| 7 | Velocidade 70 |
| 8 | Velocidade 80 |
| 9 | Velocidade 90 |
| q | Velocidade 100 |
| D | Parar TUDO |
Para o arduino receber esses dados do celular, deve ser utilizado um módulo Bluetooth, que faz a interface sem fio na porta serial do arduino. Eu comprei um módulo bluetooth HC-06 que veio em encapsulamento ZigBee, o que se tornou um problema para conseguir realizar a conexão, pois os pinos não possuem o mesmo padrão de espaçamento que a breadboard ou a maioria dos conectores. Eu tive que improvisar uma conexão utilizando material de sucata. Abaixo observa-se o esquema elétrico desse módulo, e em breve publicarei um artigo somente sobre comunicação via bluetooth.
O programa do arduino deve receber os comandos provenientes do aplicativo Android, identificar o comando e transformá-lo em sinais que a placa de interface possa converter em comandos elétricos. O programa é apresentado a seguir:
//Programa Controle Carrinho Bluetooth e RCControler
//Desenvolvido por Alex Pisciotta Junho de 2016
char recebe_dados; //cria variável para dados recebidos
void setup() {
pinMode(10, OUTPUT); //Define pinos 10 a 13 como saída para os motores
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(8, OUTPUT); //Buzina como saída
pinMode(7, OUTPUT); //Farol como saída
digitalWrite(7, LOW); //Desliga Farol
digitalWrite(8, LOW); //Desliga Buzina
Serial.begin(9600); //Inicializa a porta Serial do Arduino em 9600bps
}
void loop() {
if(Serial.available()){ //Se houver dado disponível na porta serial
recebe_dados=Serial.read(); //Grava o dado na variável recebe_dados
}else{ //senão
//desliga todos os motores
digitalWrite(13, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
}
if(recebe_dados=='F'){ //Se dado recebido é F, comando para Frente
digitalWrite(13, HIGH);
digitalWrite(11, HIGH);
}
if(recebe_dados=='B'){ //Se dado recebido é B, comando para Ré
digitalWrite(12, HIGH);
digitalWrite(10, HIGH);
}
if(recebe_dados=='L'){ //Se dado recebido é L, comando para Esquerda
digitalWrite(13, HIGH);
digitalWrite(10, HIGH);
}
if(recebe_dados=='R'){ //Se dado recebido é R, comando para Direita
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
}
if(recebe_dados=='G'){ //Se dado recebido é G, comando para Curva aberta à Esquerda
digitalWrite(13, HIGH);
}
if(recebe_dados=='I'){ //Se dado recebido é I, comando para Curva aberta à Direita
digitalWrite(11, HIGH);
}
if(recebe_dados=='H'){ //Se dado recebido é H, comando para Curva aberta à Esquerda Ré
digitalWrite(12, HIGH);
}
if(recebe_dados=='J'){ //Se dado recebido é J, comando para Curva aberta à Direita Ré
digitalWrite(10, HIGH);
}
if(recebe_dados=='V'){ //Se dado recebido é V, liga Buzina
digitalWrite(8, HIGH);
}
if(recebe_dados=='v'){ //Se dado recebido é v, desliga Buzina
digitalWrite(8, LOW);
}
if(recebe_dados=='W'){ //Se dado recebido é W, Farol Ligado
digitalWrite(7, HIGH);
}
if(recebe_dados=='w'){ //Se dado recebido é w, Farol Desligado
digitalWrite(7, LOW);
}
delay(50); //Aguarda 50ms para recomeçar o loop
}
A seguir é apresentado o esquema de ligação do arduino ao módulo Bluetooth e à interface de locomoção. É importante salientar que módulo Bluetooth deve ser desconectado do arduino durante a transferência do programa, pois os canais TX e RX do Arduino UNO são os mesmos utilizados na comunicação USB.

Vou realizar melhorias nesse carrinho para permitir evoluções e testes de diferentes sensores e técnicas de controle, como o PID (Proporcional Integral e Derivativo). Algumas melhorias vão ser documentadas como um novo post quando abrangerem um assunto muito específico. As ideias são: