Montaje Practico de control manual electrónico con Esp32.

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();
  
 
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Translate »