Foto Pisciotta

PISCIOTTA

Soluções Inteligentes



Projetos


Conheça meus projetos

DIY - Faça você mesmo




Carrinho controlado por Bluetooth


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.

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
B
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