Con este montaje ya materializado y probado quiero proponer una electrónica valida para diferentes aplicaciones donde queramos que intervenga el controlador de audio MP3 YX5300 y un motor paso a paso tipo Nema 17, alredor de una placa con Esp32 .


Con este montaje, podemos poner en práctica la evolución de nuestros conocimientos con el Esp32.
Con tres potenciometros vamos a poder controlar las rpm de un motor paso a paso, el volumen del “serial mp3 player”, y el control de una de las salidas DAC,. Ademas tenemos dos switches: uno de ellos con pulsaciones cortes pasara de play a pause y con una pulsación larga ira a reproducir el siguiente archivo. El otro switch con pulsaciones cortas cambara el sentido de de giro del motor.
CONTROL MOTOR;
El potenciometro en su recorrido entre 0 y 3v3 va a producir valores digitales de 0 a 4095, dichos valores se traducen en variaciones de frecuencia que se utilizará con la funcion LEDC para cotrolarlas rpm del motor.
DAC CONTROL:
Mapeamos los valores digitales 0-4095 a 0. 255, de forma que la salida analogica varie sus valores entre 0 y 3,2V-Dicha salida se invertira a traves del par darlington BDX53C, y controlara el flujo de corriente de una fuente externa B1 a la carga LOAD
YX5300 CONTROL:
Se utiliza la salida del puerto serie secudario del Esp32 (gpio:16,17), como enlace con el módulo catalex
La función “Player” ademas de controlar los archivos mp3 se utilizará para activar y desactivar un rele externo de proposito general.
const int pin_step = 0;
const int pin_ena = 4;
const int pin_dir = 15;
int dutyCycle = 127;
// setting PWM properties
const int stepChannel = 5;
const int resolution = 8;
#include "SerialMP3Player.h"
#define TX 17
#define RX 16
uint8_t i=0;
bool b;
bool c;
bool d;
bool h;
bool l;
SerialMP3Player mp3(RX,TX);
const uint8_t PIN_PLAYER = 27;
const uint8_t PIN_RELE = 12;
const uint8_t PIN_PLAYER2 = 2;
const uint8_t POT_VOLUME = 34;
const uint8_t POT_RADIALES = 39;
void Motor(){
int freq1;
int freq2;
int freq=analogRead(36);
freq1=map(freq,2200,4095,0,2300);
freq2=map(freq,1800,0,0,2300);
if (freq>2100&&(freq1/53)>1) {
digitalWrite(pin_dir,LOW);
digitalWrite(pin_ena, LOW);
ledcSetup(stepChannel,freq1, resolution);
ledcWrite(stepChannel, dutyCycle);
delay(250);
}
if (freq<1900&&(freq2/53)>1) {
digitalWrite(pin_dir,HIGH);
digitalWrite(pin_ena, LOW);
ledcSetup(stepChannel,freq2, resolution);
ledcWrite(stepChannel, dutyCycle);
delay(250);
}
if (freq>1800&&freq<2200){
d=1;
digitalWrite(pin_ena, HIGH);
}
}
void Player2(){
if (digitalRead(PIN_PLAYER2)==LOW&&b==1){
b=0;
mp3.playF(1);
delay(250);
dacWrite(25,110);
digitalWrite(PIN_RELE,HIGH);
}
if (b==0&&digitalRead(PIN_PLAYER2)==LOW){
d=0;
mp3.playF(2);
dacWrite(25,100);
}
if (d==0&&digitalRead(PIN_PLAYER2)==LOW){
b=1;
d=1;
mp3.pause();// solo funciona con play(),de otra forma hace funcion stop
dacWrite(25,0);
digitalWrite(PIN_RELE,LOW);
}
}
void Player(){
if (digitalRead(PIN_PLAYER)==LOW&&h==1){
digitalWrite(PIN_RELE,HIGH);
delay(1000);
h=0;
}
if (h==0&&digitalRead(PIN_PLAYER)==LOW){
l=0;
mp3.playNext();
}
if (l==0&&digitalRead(PIN_PLAYER)==LOW){
l=1;
h=1;
digitalWrite(PIN_RELE,LOW);
}
}
void luces_rueda(){
int val=analogRead(34); val=map(val,0,4095,50,110);
dacWrite(25,val);
}
void Volume(){
int aud=analogRead(39);
aud=map(aud,0,4095,0,30);
mp3.setVol(aud);
}
void setup(){
pinMode(pin_ena, OUTPUT);
digitalWrite(pin_ena, HIGH);
ledcAttachPin(pin_step, stepChannel);
b=1;
c=1;
d=1;
h=1;
l=1;
pinMode(PIN_PLAYER,INPUT);
pinMode(PIN_RELE,OUTPUT);
pinMode(pin_dir,OUTPUT);
pinMode(PIN_PLAYER2,INPUT_PULLUP);//
mp3.begin(9600); // start mp3-communication
delay(500); // wait for init
mp3.sendCommand(CMD_SEL_DEV, 0, 2); //select sd-card
delay(500); // wait for init
char c; // char from Serial
char cmd=' ';
char cmd1=' ';
analogSetPinAttenuation (34, ADC_11db);
analogSetPinAttenuation (39, ADC_11db);
analogSetPinAttenuation (36, ADC_11db);
}
void loop() {
//luces_rueda();
Volume();
Player();
Motor();
Player2();
}