Escolar Documentos
Profissional Documentos
Cultura Documentos
Objetivo
Desenvolver um carrinho de controle remoto, controlado por celular via bluetooth,
utilizando o microcontrolador ESP32 para controle, um Chassi Arduíno 2WD para estrutura
do carro e um módulo Driver Ponte H para facilitar a manipulação dos motores.
Microprocessador ESP32
ESP32 é uma série de chips microcontroladores de desenvolvimento IoT, de baixo
custo, desenvolvido pela ESPRESSIF, lançada em 2016, como uma substituta da ESP8266.
Com uma frequência de 160MHz e um processador dual-core, essa série apresenta uma
grande evolução em relação ao seu antecessor (Blog da Curto, 2018).
Com um baixo custo energético, a ESP32 consegue oferecer em um único chip
conexão do tipo WiFi e Bluetooth (Clássico e Low Energy), sendo útil para diferentes
aplicações (ESPRESSIF, 2019). Nesse projeto trabalharemos especificamente com a
ESP-WROOM-32 (ou ESP32-DevKit), uma placa que, além do chip, inclui circuitos integrados
e impressos que facilitam o uso do chip para desenvolvimento.
No total, a ESP-WROOM-32 possui 34 portas configuráveis entre entrada e saída
(GPIO), dessa forma, é possível a conexão de vários dispositivos ao mesmo tempo ao chip.
A Figura 1 a seguir mostra a distribuição dos pinos deste modelo específico.
2
Quando configurados como saída, cada pino pode assumir valores de VCC (3.3V) ou
GND, possibilitando o controle de outros dispositivos a partir dessas saídas. Além disso,
percebe-se que além de entrada e saída, é possível configurar cada pino para outras
funções, como sensibilidade ao toque, gerador de clock ou conversor Digital-Analógico ou
Analógico-Digital.
A principal diferença entre a série ESP32 e sua antecessora ESP8266 se deve a
inclusão do Bluetooth, que será base para o projeto descrito nesse tutorial e, portanto,
será explicado melhor na seção seguinte.
Bluetooth
A tecnologia de comunicação Bluetooth surgiu em 1998, a partir de uma parceria
entre grandes empresas, buscando estabelecer conexão entre dispositivos, de forma
rápida e barata, sem a utilização de cabos (LOPES e OLIVEIRA, 2013). Nessa época, crescia o
uso e a produção de aparelhos de comunicação sem fio, como os telefones móveis, que
desde 1992 vinham evoluindo, ganhando diferentes funções além das tradicionais ligações
telefônicas. Assim, a possibilidade de se conectar diferentes dispositivos próximos de
forma rápida sem a utilização de fio despertou interesse de empresas como Ericsson,
3
Montagem
3. Para fixar a roda de giro livre, devemos utilizar 4 dos menores parafusos e
rosqueá-los aos espaçadores, a Figura 6 mostra essa montagem. Após isso, basta
utilizar mais 4 parafusos pequenos para fixar a roda aos espaçadores. A roda fixada
é apresentada na Figura 7.
5. As rodas devem ser encaixadas nas laterais dos motores, seguindo a Figura 9.
7. Instalaremos agora o segundo suporte para pilhas, este não é incluso no kit
Chassi Arduíno 2WD, pois o kit inclui apenas um. Este item será necessário para
alimentar separadamente a ESP32 dos dois motores. O suporte será instalado ao
lado da Ponte H (Figura 11).
Interligando os componentes
Todas as ligações serão feitas agora. O primeiro passo é integrar os motores à
Ponte H.
1. Conecte a bateria da parte inferior do carrinho à Ponte, para isso, o fio vermelho
deve ser ligado ao V
CC e o fio preto ao GND.
● GPIO13 - IN1
● GPIO27 - IN2
● GPIO25 - IN3
● GPIO26 - IN4
12
Programação
Uma boa e importante prática tanto para programação, quanto para projetos em
geral, é traçar uma rota sobre o que será feito e definir quais medidas serão tomadas para
chegar ao objetivo desejado, antes mesmo de iniciá-lo. No presente momento, o objetivo é
descobrir uma forma de controlar a placa pelo celular. Assim, já sabemos que a
comunicação será feita via bluetooth, mas, como de fato faremos essa conexão acontecer?
Existem várias maneiras de enviar dados do celular para o microcontrolador, uma
delas é desenvolver uma aplicação, utilizando, por exemplo, o Blynk, um aplicativo que
facilita a criação de novas aplicações para controle de hardware. Uma segunda opção seria
utilizar um software gratuito que já está consolidado. Neste caso, optaremos pela segunda
e utilizaremos o Bluetooth RC Car.
Bluetooth RC Car
O Bluetooth RC Car é uma aplicação muito útil e de fácil utilização que possui uma
interface pronta (Figura 15) com todos controles do carro, principalmente controle de
direção, porém, também fornece suporte ao controle de faróis, buzina e até de velocidade.
Neste projeto, utilizaremos apenas os direcionais.
13
Código
Sabendo como enviar os comandos, precisamos definir como os receber e,
principalmente, qual será o tratamento adequado para cada um deles. Realizaremos uma
comunicação bluetooth serial, portanto, deve-se incluir a biblioteca correspondente e
instanciar um objeto do tipo bluetooth serial. Além disso, criaremos 4 constantes, as
quais cada uma corresponderá à uma saída. A variável "comando" do tipo caractere é
necessária para armazenar os valores dos comandos recebidos.
#include "BluetoothSerial.h"
#define pin1 13
#define pin2 27
14
#define pin3 26
#define pin4 25
BluetoothSerial SerialBT;
char comando;
void setup() {
Serial.begin(9600);
SerialBT.begin("Carrinho");
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
Serial.println("Fim Setup");
delay(2000);
}
A ideia dentro da função loop() é identificar a ocorrência de uma ação, para isso,
sempre que o dispositivo estiver disponível, iremos armazenar os dados enviados por ele
na variável comando, para na sequência decidir quais tratamentos deverão ser
realizados.
void loop() {
if (SerialBT.available()) {
comando = SerialBT.read();
}
[...]
}
15
A combinação dos estados dos pinos ditará a movimentação do carro. Assim, para
cada estado do carrinho teremos uma combinação:
Por fim, basta associar cada movimento ao seu caractere e sua combinação
lógica. Utilizando a estrutura switch/case, faremos a correspondência entre cada
caractere recebido e a sua respectiva sequência de comandos.
void loop() {
[...]
switch (comando) {
case 'F': { //move frente
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
break;
}
case 'I': {//frente direita
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
case 'G': {//frente esquerda
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
17
digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
break;
}
case 'R': {//direita
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
}
case 'L': {//esquerda
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
break;
}
case 'B': {// ré
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
case 'H': {// ré esquerda
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
case 'J': {//ré direita
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
18
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
}
default: {
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
}
}
}
Assim, a aparência final do projeto pode variar de acordo com a disposição dos
componentes na placa. Neste caso, o projeto ficou conforme Figura 16.
#include "BluetoothSerial.h"
#define pin1 13
#define pin2 27
#define pin3 26
#define pin4 25
BluetoothSerial SerialBT;
char comando;
void setup() {
Serial.begin(9600);
//btSerial.begin(9600);
SerialBT.begin("Carrinho");
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
Serial.println("Fim Setup");
delay(2000);
}
void loop() {
if (SerialBT.available()) {
comando = SerialBT.read();
}
switch (comando) {
case 'F': { //move frente
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
break;
}
case 'I': {//frente direita
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
20
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
case 'G': {//frente esquerda
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
break;
}
case 'R': {//direita
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
}
case 'L': {//esquerda
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
break;
}
case 'B': {// ré
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
case 'H': {// ré esquerda
digitalWrite(pin1, LOW);
21
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
break;
}
case 'J': {//ré direita
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
}
default: {
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
break;
}
}
}
Referências
● Gustavo Teixeira. "PROGRAMAR ESP32 COM A IDE ARDUINO – TUTORIAL
COMPLETO". https://www.usinainfo.com.br. Disponível em:
https://www.usinainfo.com.br/blog/programar-esp32-com-a-ide-arduino-tutorial-co
mpleto/ . Acesso em: 07 de Dezembro de 2020.
07 de Dezembro de 2020.
● Blynk Inc. "Developers: Everything you need to build an amazing IoT project".
https://blynk.io, 2020. Disponível em: https://blynk.io/en/developers . Acesso em: 07
de Dezembro de 2020.