Despertador Inteligente Ativado por Movimento: Acorde de Vez
Componentes e Materiais
| Arduino Nano Every | ×1 |
| Módulo Relógio DS3231 | ×1 |
| Sensor de Movimento PIR HC-SR501 | ×1 |
| Buzzer (piezo 5V) | ×1 |
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Levantar da cama pode ser um verdadeiro desafio. Este despertador ativado por movimento garante que você permaneça acordado detectando movimento após você apertar "soneca". Se você voltar para a cama, o alarme reinicia, forçando-o a permanecer acordado por um período definido antes que o alarme pare.
Montagem
Reúna os seguintes componentes:
- Módulo relógio em tempo real DS3231
- Sensor de movimento PIR HC-SR501
- Buzzer (qualquer piezo 5V)
- Botão momentâneo
- Arduino Nano Every (ou qualquer placa compatível)
Faça a fiação conforme abaixo:
- Buzzer pino negativo → GND
- Buzzer pino positivo → D11
- Botão pino terra → GND
- Botão pino sinal → D9
- HC-SR501 VCC → 5V
- HC-SR501 saída → D7
- HC-SR501 GND → GND
- DS3231 GND → GND
- DS3231 VCC → 5V
- DS3231 SDA → SDA (pino A4 no Nano)
- DS3231 SCL → SCL (pino A5 no Nano)
Código
Baixe a biblioteca DS3231 ZIP na seção Código e adicione à Arduino IDE via Sketch > Include Library > Add .ZIP Library.
Carregue o sketch abaixo. Após o primeiro upload, comente a linha que define data e hora para que o RTC mantenha o tempo correto em resets.
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
int button = 9;
int pirPin = 7; // Entrada para HC-SR501
int pirValue;
//--------------------------------------
int set_hour = 7;
int set_minute = 0;
//--------------------------------------
void setup() {
clock.begin();
pinMode(button, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
//clock.setDateTime(__DATE__, __TIME__); // comente após primeiro upload
pinMode(pirPin, INPUT);
}
void alarm(int minute){
bool button_pressed = false;
bool awake = false;
bool movement = false;
while(!button_pressed){
for(int i = 0; i < 4; i++){
tone(11, 523, 100);
delay(100);
tone(11, 784, 50);
for(int i = 0; i < 20; i++){
if(digitalRead(button) == LOW){
button_pressed = true;
awake = true;
dt = clock.getDateTime();
minute = dt.minute;
}
delay(65);
}
}
}
dt = clock.getDateTime();
minute = dt.minute;
while(awake){
movement = false;
dt = clock.getDateTime();
for(int i = 0; i < 30; i++){
if(digitalRead(pirPin)){movement = true;}
}
digitalWrite(LED_BUILTIN, movement);
if(!pirValue){
delay(5000);
for(int i = 0; i < 40; i++){
if(digitalRead(pirPin)){movement = true;}
}
if(!movement){ alarm(minute); }
}
if(abs(dt.minute - minute) >= 1){
tone(11, 698, 50);
delay(100);
tone(11, 698, 50);
digitalWrite(LED_BUILTIN, 0);
awake = false;
}
delay(100);
}
}
void loop() {
dt = clock.getDateTime();
if(set_minute == dt.minute && set_hour == dt.hour){
alarm(set_minute);
}
delay(10000);
}
Ajuste do Sensor
Configure o HC-SR501 para modo de gatilho repetível posicionando o jumper de seleção de gatilho adequadamente.
Ajuste fino do delay e sensibilidade. Sensibilidade máxima com delay mínimo funciona melhor: garante que o sensor permaneça ativo tempo suficiente para detectá-lo, mas não tanto que ignore um retorno à cama.
Construção Compacta
Após testar o protótipo em protoboard, solde os componentes diretamente no Arduino Nano Every para criar um alarme de tamanho de bolso.
Construa um gabinete leve em madeira balsa de 3 mm (dimensões 55 mm × 35 mm × 40 mm). O gabinete inclui uma grande abertura para o sensor PIR, um slot para o cabo micro-USB e uma abertura para o buzzer.
Produto final:
Código
- Código do Despertador Arduino
- Biblioteca do Relógio (DS3231)
Código do Despertador Arduino
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
int button = 9;
int pirPin = 7; // Entrada para HC-SR501
int pirValue; // Armazena valor lido do PIR
//--------------------------------------
int set_hour = 7;
int set_minute = 0;
//--------------------------------------
void setup() {
clock.begin();
pinMode(button, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
//clock.setDateTime(__DATE__, __TIME__); // !!APÓS O PRIMEIRO UPLOAD VOCÊ DEVE COMENTAR ESTA LINHA. CASO CONTRÁRIO, VOCÊ TERÁ UM HORÁRIO ERRADO!!
pinMode(pirPin, INPUT);
}
void alarm(int minute){
bool button_pressed = false;
bool awake = false;
bool movement = false;
while(!button_pressed){
// o alarme toca enquanto o botão não for pressionado
for(int i = 0; i < 4; i++){
tone(11, 523, 100);
delay(100);
tone(11, 784, 50);
for(int i = 0; i < 20; i++){
if(digitalRead(button) == LOW){
button_pressed = true;
awake = true;
dt = clock.getDateTime();
minute = dt.minute;
}
delay(65);
}
}
}
dt = clock.getDateTime();
minute = dt.minute;
while(awake){
movement = false;
dt = clock.getDateTime();
for(int i = 0; i < 30; i++){
if(digitalRead(pirPin)){movement = true;}
}
digitalWrite(LED_BUILTIN, movement);
if(!pirValue){
delay(5000);
for(int i = 0; i < 40; i++){
if(digitalRead(pirPin)){movement = true;}
}
if(!movement){ alarm(minute); // se nenhum movimento detectado por muito tempo, o alarme reinicia }
}
if(abs(dt.minute - minute) >= 1){
// define o período em que você deve ficar na frente do sensor
tone(11, 698, 50);
delay(100);
tone(11, 698, 50);
digitalWrite(LED_BUILTIN, 0);
awake = false;
}
delay(100);
}
}
void loop() {
dt = clock.getDateTime();
if(set_minute == dt.minute && set_hour == dt.hour){
alarm(set_minute);
}
delay(10000);
}
Biblioteca do Relógio
Arquivo ZIP da biblioteca DS3231. Baixe e adicione às suas bibliotecas via Arduino → Sketch → Include Library → Add .ZIP Library.
Sem preview (apenas download).
Esquemáticos
Conecte 5V no Arduino ao rail positivo e GND ao rail negativo na protoboard.
Processo de manufatura
- Iniciativa Revolucionária de Car Sharing da NEVS em Trollhättan: Nova Era da Mobilidade
- Construa um Relógio Despertador Confiável com RTC DS1302 e Arduino UNO
- Inicie sua Jornada Indústria 4.0: Domine IO-Link em CLPs com Treinamento SICK
- Fatores Essenciais para Operações de Perfuração Bem-Sucedidas e Seguras
- Fatores Críticos que Influenciam o Desempenho da Retificação Superficial
- Máquinas de Torno CNC: Sua Ferramenta de Precisão Tudo-em-Um
- Centros de Usinagem Horizontal Essenciais para Manufatura de Alta Precisão
- Escolhendo o Alimentador de Barras Curtas Ideal para Seu Torno
- Principais Benefícios das Máquinas de Mandrilar (Boring) para Usinagem de Precisão
- Impacto das Bombas de Água Diretas em Sistemas de Circulação