Arduino, Internet das Coisas e Computação vestível

Você está em » Home : Projetos diversos

[Voltar]

[Avançar]

3.8. Caixa de música com autômato


Uma caixa de música que aciona um autômato

O circuíto abaixo utiliza Arduino Nano, Resistores, Buzzer ou alto-falante, Transistor NPN 2N2222 (BJT) ou NPN BC548, Chaves Tácteis ou Push Buttons, Led RGB, Motor DC 3-6V com Caixa de Redução, Módulo MP3 Mini DFPlayer e Micro SD.


Quando as chaves tácteis são acionadas, os seguintes eventos ocorrem:

Chave 1

  1. Acionada pela primeira vez: Liga Led Vermelho, executa Música 1 e liga Motor DC com velocidade normal.
  2. Acionada pela segunda vez: Liga Led Azul, executa Música 2 e liga Motor DC com velocidade reduzida.
  3. Acionada pela terceira vez: Liga Led Verde, executa Música 3 e liga Motor DC com velocidade muito reduzida.
  4. Acionada pela quarta: deslida o Led, Música e Motor DC.

Chave 2

  1. Aumenta volume

Chave 3

  1. Diminui Volume

Observação:
  • O motor aciona um autômato que possui um mecanismo do tipo came-seguidor.
  • O autômato pode levantar a cabeça e se movimentar ao giro do eixo do motor.
  • No Micro Sd existem gravados 3 arquivos de música com os nomes: 01.mp3, 02.mp3 e 03.mp3.
  • Existe um resistor de 330 Ohm conectado ao pino RX do DFPlayer para eliminar ruído do alto-falante.
  • A velocidade de rotação do motor (RPM) corresponde ao ritmo da música e é determinada pelo envio de um sinal do Arduino pelo pino A0 (PWM) a base do transistor.

    Pino
    Ciclo de trabalho
    Tensão saída aproximada
    A0
    100% (255)
    5,0 V
    75% (198)
    3,7 V
    50% (100)
    2,5 V

// Projeto: Caixa de música
// Autor: André Luis Silveira
// Data: 05/11/2021 

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

int MUSICA      = 0;
int VOLUME      = 20;

int PINO_VEL       = A0;                                  // Pinos controle velocidade do motor
int PINO_BOTAO1 = 2;                                    // Pino Botão toca musica 
int PINO_BOTAO2 = 3;                                    // Pino Botão aumenta volume 
int PINO_BOTAO3 = 4;                                    // Pino Botão diminui volume 

int LED_RED      = 7;                                      // Pino Led vermelho
int LED_GREEN  = 8;                                      // Pino Led Verde 
int LED_BLUE    = 9;                                       // Pino Led Azul
// ------ Declara objetos para DFPlayerMini SoftwareSerial mySoftwareSerial(10, 11); // Pinos RX, TX de comunicação serial DFRobotDFPlayerMini myDFPlayer;
void setup() { mySoftwareSerial.begin(9600); // Comunicação serial com o modulo DFPlayer Serial.begin(115200); // Inicializa o display serial do IDE Arduino pinMode(PINO_BOTAO1,INPUT_PULLUP); pinMode(PINO_BOTAO2,INPUT_PULLUP);
pinMode(PINO_BOTAO3,INPUT_PULLUP);
pinMode(PINO_VEL,OUTPUT);
pinMode(LED_RED, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
pinMode(LED_GREEN, OUTPUT); // ------ Testa se DFPlayer foi inicializado corretamente Serial.println(F("DFRobot DFPlayer Mini")); if (!myDFPlayer.begin(mySoftwareSerial)) { Serial.println("==>> Nao inicializado!"); while(true){ delay(0); Serial.print("."); } } Serial.println("==>> Inicializado"); myDFPlayer.setTimeOut(500); // Timeout serial 500ms myDFPlayer.volume(VOLUME); // Volume myDFPlayer.EQ(2); // Equalizacao normal } void loop() { if (digitalRead(PINO_BOTAO2) == LOW) { VolumeAumenta(); } else { if (digitalRead(PINO_BOTAO3) == LOW) { VolumeDiminui(); } } // --- Controla botão que aciona música (Apertos) if (digitalRead(PINO_BOTAO1) == LOW) { MUSICA = MUSICA + 1; Serial.print("Musica:"); Serial.println(MUSICA); // ----- Testa sequencia de acionamento do botão (Apertos) // 1 = Musica1, 2 = Musica2, 3 = Musica3 e 4 = Desliga // 1 = Led RED, 2 = LED BLUE, 3 = LED GREEN e 4 = LED APAGADO switch (MUSICA) {
case 1: // Apertou 1 vez
ligaled(255, 0, 0, MUSICA);
analogWrite(PINO_VEL,255); // 100% ciclo de trabalho
break;
case 2: // Apertou 2 vez
ligaled(0, 255, 0, MUSICA);
analogWrite(PINO_VEL,178); // 75% ciclo de trabalho
break;
case 3: // Apertou 3 vez
ligaled(0, 0, 255, MUSICA);
analogWrite(PINO_VEL,140); // 50% ciclo de trabalho
break;
default: // Apertou 4 vez
MUSICA = 0;
ligaled(0, 0, 0, MUSICA);
analogWrite(PINO_VEL,0); // desliga Motor
break;
} } delay(200); } // ------ Rotina controla cores do Led RGB, Velocidade do motor e Música int ligaled(int r, int g, int b, int mus) { analogWrite(LED_RED, r); analogWrite(LED_GREEN, g); analogWrite(LED_BLUE, b); if (mus > 0) { myDFPlayer.play(mus); Serial.println("PLAYER"); } else{ myDFPlayer.stop(); Serial.println("STOP"); } delay(200); } // ------ Rotina aumenta volume void VolumeAumenta() { if (VOLUME < 30) { VOLUME=VOLUME+2; myDFPlayer.volume(VOLUME); delay(200); Serial.println(VOLUME); } } // ------ Rotina diminui volume void VolumeDiminui() { if (VOLUME > 0){ VOLUME=VOLUME-2; myDFPlayer.volume(VOLUME); delay(200); Serial.println(VOLUME); } }

 

[Voltar]

[Avançar]