ESP32

Motor de passo com ESP32, EasyDriver e PCF8674

Atualmente tenho focado meus esforços em DIY porque já escrevi um bocado além de 500 artigos e acredito que tenha informação mais que o suficiente para você fazer praticamente qualquer controle que desejar. Mas, tem coisas que saem do padrão. É o caso desse projeto do cuco, que estou fazendo a programação inicial pra por o relógio pra funcionar. Vou explicando no decorrer do artigo.

Motor de passo com ESP32

Escolhi o ESP32 para o relógio Cuco porque ele deverá ser finalizado com as seguintes características:

  • Conectar à Internet para pegar horário e se ajustar
  • Fazer uma iluminação correspondente à variação da luz do dia
  • Tocar o som de cuco em horas inteiras
  • Mover o cuco para fora da casinha

Não vou entrar em todos os detalhes do Cuco, mas o projeto vai bem. Só que já estou fazendo um outro relógio cuja eletrônica será bem mais viável, inclusive para projetos escolares.

Bem, com esse tanto de recursos, a primeira coisa óbvia é que faltaria pinos se fosse fazer apenas com o ESP32. Uma segunda opção poderia ser um Arduino Mega e um ESP-01 para buscar a hora e entregar via serial, mas preferi fazer diretamente com o ESP32 porque é mais legal de programar.

Motor de passo Nema17 com EasyDriver

E eu gosto bastante do EasyDriver para controlar motores de passo. Precisaria ser um Nema 17? – Respondo que não, mas ele tem uma precisão de passo muito boa; 200 passos em full-step, podendo ir até 1/8 de passo com o EasyDriver. Isso ajuda bastante porque fica fácil ajustar a posição das engrenagens do relógio (o motor controlará apenas 1 das engrenagens, a do segundos). Mas ainda assim são necessários 6 pinos para controlar o driver. Considerando que preciso de pinos para fazer o PWM dos LEDs RGB e ainda controlar um DFPlayer para tocar o cuco, e ainda controlar um SG90 para movimentar o pássaro, não tive outra opção que não usar um expansor de IO. Não um shift register, mas um driver I2C, que é o PCF9574. Caso o que você esteja procurando não seja exatamente o material desse artigo, talvez lhe interesse um desses outros artigos:

Controlar motor de passo com EasyDriver

Controlar motor de passo com o driver A4988

Uma impressora matricial que fiz

CNC com driver de DVD

Buffer não inversor CD4050

Dominando PCF8574

Utilizando PCF8574 para expandir IO

E eu preferi utilizar o PCF8574 justamente por utilizar apenas 2 pinos, já que ele é I2C. O único inconveniente é que sem escrever um código para o controle, não fica muito intuitivo sua utilização com motor de passo. Daí, como estou fazendo essa parte justamente agora, resolvi já compartilhar essa informação nesse artigo porque quando eu publicar o do cuco, vou depender muito da sua paciência com leitura e se eu deixar tudo para discorrer no artigo do Cuco, a leitura ficará insuportável.

Nos links supracitados você encontra uma referência sobre o PCF8574, caso não saiba como utilizá-lo ainda e deseja dominar bitwise. Basicamente o que faço é aplicar uma máscara e ativar ou desativar um determinado bit, sem alterar os demais. O interessante (e novo) desse artigo que você está lendo agora é que estou utilizando-o com o ESP32 e para controlar um motor de passo com dicas importantes que citei em um desses artigos cujo links deixei mais acima; o mais importante deles é o controle ideal para que não haja aquecimento da controladora nem do motor.

Utilizando I2C com ESP32

Para utilizar o barramento I2C, utilizei os pinos GPIO 4 e 0, sendo o 0 SDA e 4 SCL. No módulo PCF8574 SDA vai conectado ao SDA e SCL conectado ao SCL, simples e direto. O módulo PCF8574 é endereçável, meu módulo está no endereço 0x24. Você poderá descobrir o endereço do seu (caso não saiba) utilizando um scanner de barramento, como o desse sketch:

Basta subir o sketch abrir o terminal serial (na velocidade escolhida) e utilizar o comando s para fazer um single scan. Depois, basta ver o endereço na relação que aparecerá.

Conectar o PCF8574 ao EasyDriver

O wiring do EasyDriver está detalhado nesse artigo. Nele, descrevo detalhes importantes da utilização do EasyDriver. Um dos cuidados mais importantes é a forma de utilizá-lo economizando energia e reduzindo em até 100% o aquecimento. No caso do relógio, o motor nunca aquecerá.
Para conectá-lo, fiz o seguinte enumerador no código:

Os pinos do módulo PCF8574 vão de 0 à 7, sendo 8 pinos de IO e um de interrupção (que não será utilizado nesse projeto). Para organizá-los no código, criei esse enumerador. Um enumerador é semelhante a uma struct. Uma das diferenças é, como você pode notar, a ausência da declaração de tipos e valores. Montando-o dessa maneira, seus valores são atribuidos automaticamente a partir de 0. Logo, no pino 5 do PCF8574 já sei que tenho o controle do micro-step da segunda bobina do motor, apenas olhando para o código. Para utilizá-lo, apenas referencie seu nome, como se fosse um define.

Nessa pequena porção de código estou ajustando a velocidade do passo para full-step. Criei o buffer stat do tipo unsigned char para guardar os 8 bits. A operação que está utilizando pipe se chama bitwise e você vê em detalhes como manipular bits usando máscara no artigo Dominando PCF8574

Por enquanto estou em pleno desenvolvimento do código, mas já dá pra provar o conceito com esse código, assim você já pode tirar sua dúvida ou matar a curiosidade sobre o funcionamento do motor de passo por I2C:

Onde comprar

Vou recomendar mais parceiros. Nesse artigo, recomendo a MASUGUX para a compra do ESP32, o módulo DFPlayer que será utilizado para reprodução de som no Cuco, O servo motor SG90 para o acionamento do passarinho, jumpers para fazer o wiring e mais uma lista enorme de componentes para projetos de eletrônica digital, recomendo!

Bem, por enquanto é isso, em breve publico o projeto do Cuco funcionando!

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR

https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR

https://www.facebook.com/groups/raspberrybr/
Orange Pi BR

https://www.facebook.com/groups/OrangePiBR/
Odroid BR

https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR

https://www.facebook.com/groups/SistemasEmbarcadosBR/

Sistemas Eletrônicos

https://www.facebook.com/groups/544679592355388/

Projetos Arduino | Eletrônica

https://www.facebook.com/groups/projetosarduinoeletronica/

ESP8266 e ESP32

https://www.facebook.com/groups/ESP8266BR/

ARM Brasil

https://www.facebook.com/groups/508153815944410/

MIPS BR

https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte

https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!