Logo Pisciotta

PISCIOTTA

Soluções Inteligentes

PROJETOS

Listar
Alguns dos projetos que eu desenvolvi e prototipei.

Aproveite, aprenda, relembre, curta, divulgue.

Carrinho controlado por Bluetooth


Construa voc?? mesmo um carrinho que pode ser controlado por celular atrav??s de conex??o bluetooth

2526 Views - 66 Curtidas - Dificuldade

postado 19 de Julho de 2016 - atualizado 9 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.

Plataforma Mec??nica

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.

Circuito Dupla Ponte H

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.

Funcionamento

Na 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.


Lista de materiais
  • 01 placa de fenolite face simples 5cm x 5cm
  • 04 transistores 2N2222
  • 04 transistores TIP31
  • 04 transistores TIP32
  • 08 diodos 1N4007
  • 04 resistores 1k
  • 04 resistores de 33ohms
  • 03 conectores 2 vias para os motores e a alimenta????o da placa
  • 01 conector 4 vias para os comandos

?? 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:

  • Pino 13 - Motor Direita para frente
  • Pino 12 - Motor Direita para tr??s
  • Pino 11 - Motor Esquerda para frente
  • Pino 10 - Motor Esquerda para tr??s

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.

O controle remoto

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:


ComandoDescri????o
FFrente
BR??
RDireita
LEsquerda
GEsquerda para frente
IDireita para frente
HEsquerda r??
JDireita r??
SParado
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
1Velocidade 10
2Velocidade 20
3Velocidade 30
4Velocidade 40
5Velocidade 50
6Velocidade 60
7Velocidade 70
8Velocidade 80
9Velocidade 90
qVelocidade 100
DParar 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.

Circuito completo carrinho.
E assim o carrinho fica funcional!!!

Pr??ximos Passos

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:

  • Confeccionar uma placa para alimenta????o e controle, substituindo o Arduino original
  • Fazer meu pr??prio aplicativo Android para o controle remoto
  • Controlar o carrinho utilizando o controle do Nintendo Wii
  • Colocar uma c??mera
  • Utilizar sensores ultrass??nicos para impedir colis??es
  • Utilizar sensor magnet??metro e aceler??metro para percorrer rota pr??-determinada