BrincandoComIdeiasThiago Vilella
Published © CC BY

Clap Control for Christmas Tree

Use your Arduino Uno to control your Christmas tree! A little example what you can do with Arduino and some free time.

BeginnerShowcase (no instructions)3 hours1,585
Clap Control for Christmas Tree

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1
sound sensor module
Digital Output
×1
Relay Module (Generic)
×1
Opto-Isolator
Opto-Isolator
×1
Resistor 220 ohm
Resistor 220 ohm
×1
Jumper wires (generic)
Jumper wires (generic)
×1
Christmas Tree
×1
Christmas led strip
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)

Story

Read more

Schematics

Schematics

Code

ArvoreNatal.ino

Arduino
Sketch for Arduino Uno
/*
 *   Q0405
 *   AUTOR:   BrincandoComIdeias
 *   LINK:    https://www.youtube.com/brincandocomideias ; https://cursodearduino.net/
 *   COMPRE:  https://www.arducore.com.br/
 *   SKETCH:  Arvore de Natal com Arduino
 *   DATA:    05/12/2018
*/

#define pinSom 3
#define pinRele 12
#define pinAcop 2

#define tempoEntrePalmas 150 //milisegundos
#define tempoMaximoEntrePalmas 1000 //milisegundos

// DECLARAO DE VARIVEIS
int contaPalmas = 0;
unsigned long tempoEspera = 0;
unsigned long tempoEsperaEntrePalmas = 0;

// DECLARAO DE FUNO
void executarAcao();

void setup() {

  Serial.begin(9600);

  // DEFININDO MODO DOS PINOS
  pinMode(pinSom, INPUT);
  pinMode(pinRele, OUTPUT);
  pinMode(pinAcop, OUTPUT);

  // INICIANDO COM O PINO DO RELE E DO FOTOACOPLADOR DESLIGADOS
  digitalWrite(pinRele, LOW);
  digitalWrite(pinAcop, LOW);

  Serial.println("Setup Concludo");
}

void loop() {
  //VERIFICA O ESTADO DO SENSOR, AO BATER PALMA O SINAL VAI PARA HIGH
  static int sensorSomAnt;
  int sensorSom = digitalRead(pinSom);

  //SE O SENSOR DETECTAR MUDANA DO ESTADO LOW PARA HIGH
  if ((sensorSom == HIGH) && (sensorSomAnt == LOW)) {
    Serial.print("detectou");

    //CALCULA O TEMPO DA ULTIMA MUDANA PARA NAO DETECTAR ECO DA MESMA PALMA
    if ((millis() - tempoEspera) > tempoEntrePalmas) {
      tempoEspera = millis(); // ATUALIZA O TEMPO PARA CONTROLE DE ECO
      tempoEsperaEntrePalmas = millis(); // ATUALIZA O TEMPO PARA CONTROLE DA CONTAGEM
      contaPalmas++;
    }
  }
  sensorSomAnt = sensorSom;

  // CASO EXCEDA O TEMPO DE CONTROLE DA CONTAGEM, EXECUTA A AO E ZERA A CONTAGEM
  if ( (contaPalmas != 0) && ((millis() - tempoEsperaEntrePalmas) > tempoMaximoEntrePalmas) ) {
    executarAcao();
    contaPalmas = 0;
    tempoEsperaEntrePalmas = millis();
  }

}


void executarAcao() {

  switch (contaPalmas) {
    case 2:
      digitalWrite(pinAcop, HIGH);
      delay(200);
      digitalWrite(pinAcop, LOW);
      Serial.println("Duas Palmas, trocando modo do pisca");
      break;
    case 3:
      digitalWrite(pinRele, !digitalRead(pinRele));
      Serial.println("Tres Palmas, trocando estado do rele");
      break;
    default:
      Serial.print("A quantidade de palmas foi de:");
      Serial.println(contaPalmas);
  }
}

Credits

BrincandoComIdeias

BrincandoComIdeias

1 project • 0 followers
Olá eu sou o Flávio Guimarães do canal Brincando com Ideias! Sou especialista em linguagens de programação, Arduino e Robótica! Vem comigo!
Thiago Vilella

Thiago Vilella

1 project • 0 followers
Era para ser engenheiro mecânico, mas o Arduino apareceu!

Comments