Propaganda

Detecte movimento e assuste um intruso com um som de alarme agudo e luzes piscando. Isso parece divertido? Claro que sim. Esse é o objetivo do projeto Arduino de hoje, adequado para iniciantes. Escreveremos completamente do zero e testamos à medida que avançamos, para que você possa ter uma idéia de como tudo está sendo feito, em vez de simplesmente instalar algo que eu já fiz.

Isenção de responsabilidade: isso não vai realmente proteger sua casa. isto poderia dê à sua irmã um choque desagradável quando ela entrar furtivamente no seu quarto.

Você precisará:

  • Um Arduino
  • Sensor "ping" ultra-sônico, estou usando HC-SR04 Um PIR seria melhor, mas esses são caros. Um sensor de ping pode ser colocado sub-repticiamente em uma porta e ainda servir o mesmo trabalho básico, e custa apenas US $ 5
  • Uma campainha piezo
  • Fita LED, com a mesma fiação que usamos de volta neste projeto Crie sua própria iluminação ambiente dinâmica para um Media CenterSe você assiste a muitos filmes no seu PC ou centro de mídia, tenho certeza de que enfrentou o dilema da iluminação; você apaga completamente todas as luzes? Você os mantém a todo vapor? Ou...
    instagram viewer
    consulte Mais informação
    .

À medida que você estiver conectando este projeto, não remova tudo a cada vez - continue construindo o último bloco. Quando você chegar à seção "Codificação do sistema de alarme", você deverá ter todos os bits e partes, parecidos com o seguinte:

fiação acabada

Luzes piscando

Use o diagrama de fiação deste projeto Crie sua própria iluminação ambiente dinâmica para um Media CenterSe você assiste a muitos filmes no seu PC ou centro de mídia, tenho certeza de que enfrentou o dilema da iluminação; você apaga completamente todas as luzes? Você os mantém a todo vapor? Ou... consulte Mais informação conectar sua faixa de LED; não altere os pinos, pois precisamos da saída PWM. Usar esse código para testar rapidamente sua fiação. Se tudo correr bem, você deve ter o seguinte:

led-rgb-test

Sensor de distância

No módulo SR04, você encontrará 4 pinos. VCC e GND vá para + 5V ferroviário e terrestre, respectivamente; TRIG é o pino usado para enviar um sinal de sonar, coloque-o no pino 6; ECO é usado para ler o sinal de volta (e, portanto, calcular a distância) - coloque-o em 7.

sr04

Para tornar as coisas incrivelmente simples, há uma biblioteca que podemos usar chamada NewPing. Faça o download e coloque no seu Arduino Biblioteca pasta e reinicie o IDE antes de continuar. Teste usando esse código; abra o monitor serial e verifique se a velocidade está definida para 115200 baud. Com alguma sorte, você verá algumas medições de distância sendo enviadas de volta a você em uma velocidade bastante alta. Você pode encontrar uma variação de 1 ou 2 centímetros, mas isso é bom. Tente colocar a mão na frente do sensor, movendo-o para cima e para baixo para observar as alterações nas leituras.

saída de ping

O código deve ser bastante simples de entender. Há algumas declarações de pinos relevantes no início, incluindo uma distância máxima - isso pode variar de acordo com o sensor exato que você possui, mas contanto que consiga obter leituras inferiores a 1 metro com precisão, você deve bem.

No loop deste aplicativo de teste, usamos o ping () para enviar um ping do sonar, recuperando um valor em milissegundos de quanto tempo levou para o valor retornar. Para entender isso, usamos as bibliotecas NewPing construídas em constante de US_ROUNDTRIP_CM, que define quantos microssegundos são necessários para percorrer um único centímetro. Há também um atraso de 50 ms entre os pings para evitar sobrecarregar o sensor.

Alarme piezo

O sensor de cristal piezo é uma campainha simples e barata, e podemos usar um pino PWM 3 para criar tons diferentes. Conecte um fio ao pino 3, um ao trilho de aterramento - não importa qual.

Usar esse código testar.

A única maneira de matar o alarme bastante desagradável e alto é puxar os plugues. O código é um pouco complexo para explicar, mas envolve o uso de ondas senoidais para gerar um som distinto. Ajuste os números para tocar com tons diferentes.

Codificação do sistema de alarme

Agora que temos todas as peças deste quebra-cabeça, vamos combiná-las.

Vá em frente e faça um novo esboço, chamado Alarme. Comece combinando todas as variáveis ​​e definições de pinos que temos nos exemplos de teste até agora.

#incluir  // Selecione quais pinos compatíveis com PWM devem ser usados. #define RED_PIN 10. #definir GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Pino do Arduino amarrado para acionar o pino no sensor ultrassônico. #define ECHO_PIN 7 // Pino do Arduino amarrado ao pino de eco no sensor ultrassônico. #define MAX_DISTANCE 100 // Distância máxima pela qual queremos fazer ping (em centímetros). #define ALARM 3 float sinVal; int toneVal; 

Comece escrevendo um artigo básico configuração() função - só vamos lidar com as luzes por enquanto. Adicionei um atraso de 5 segundos antes do início do loop principal para nos dar algum tempo para sair do caminho, se necessário.

void setup () {// configura pinModes para a faixa RGB pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // redefine as luzes analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); atraso (5000); }

Vamos usar uma função auxiliar que nos permite escrever rapidamente um único valor RGB nas luzes.

// função auxiliar que nos permite enviar uma cor em um comando. cor nula (vermelho não assinado, verde não assinado, azul não assinado) // a função de geração de cores. {analogWrite (RED_PIN, vermelho); analogWrite (BLUE_PIN, azul); analogWrite (GREEN_PIN, verde); }

Por fim, nosso loop por enquanto consistirá em um simples flash colorido entre vermelho e amarelo (ou, o que você quiser que o seu alarme seja - basta alterar os valores RGB).

loop vazio () {color (255,0,0); // atraso vermelho (100); cor (255.255,0); // atraso amarelo (100); }

Faça o upload e teste para garantir que você esteja no caminho certo.

Agora, vamos integrar o sensor de distância para acionar essas luzes somente quando algo estiver dentro, digamos, de 50 cm (pouco menos do que a largura da moldura da porta). Já definimos os pinos certos e importamos a biblioteca. Portanto, antes da sua configuração(), adicione a seguinte linha para instanciar:

Sonar NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Configuração nova dos pinos e distância máxima. 

Abaixo disso, adicione uma variável para armazenar o estado do alarme que está sendo disparado ou não, o padrão é falso, é claro.

booleano acionado = false; 

Adicione uma linha ao configuração() para que possamos monitorar a saída em serial e depurar.

Serial.begin (115200); // Abra o monitor serial em 115200 baud para ver os resultados do ping. 

Em seguida, vamos renomear o loop atual para alarme() - é assim que será chamado se o alarme disparar.

alarme nulo () {color (255,0,0); // atraso vermelho (100); cor (255.255,0); // atraso amarelo (100); }

Agora crie um novo ciclo(), na qual buscamos um novo ping, lemos os resultados e acionamos o alarme se algo for detectado dentro da faixa do medidor.

loop vazio () {if (acionado == true) {alarm (); } else {delay (50); // Aguarde 50 ms entre pings (cerca de 20 pings / s). 29ms deve ser o menor atraso entre os pings. não assinado int uS = sonar.ping (); // Envie ping, obtenha tempo de ping em microssegundos (uS). distância int não assinada = uS / US_ROUNDTRIP_CM; Serial.println (distância); se (distância <100) {acionada = verdadeira; } } }

Deixe-me explicar brevemente o código:

  • Comece verificando se o alarme foi acionado e, em caso afirmativo, ative a função de alarme (apenas piscando as luzes no momento).
  • Se ainda não foi acionado, obtenha a leitura atual do sensor.
  • Se o sensor estiver lendo <100 cm, algo acolchoou o feixe (ajuste esse valor se estiver disparando muito cedo para você, obviamente).

Faça uma avaliação agora, antes de adicionar a campainha piezo irritante.

Trabalhando? Ótimo. Agora vamos adicionar a campainha de volta. Adicionar pinMode ao configuração() rotina.

pinMode (ALARM, OUTPUT); 

Em seguida, adicione o loop da campainha piezo à função alarm ():

para (int x = 0; x <180; x ++) {// converte graus em radianos e obtém o valor do pecado sinVal = (sin (x * (3.1412 / 180))); // gera uma frequência a partir do valor do pecado toneVal = 2000+ (int (sinVal * 1000)); tom (ALARME, tomVal); }

Se você tentar compilar nesse momento, ocorrerá um erro. Deixei isso deliberadamente para que você possa ver alguns problemas comuns. Nesse caso, o NewPing e a biblioteca de tons padrão usam as mesmas interrupções - elas estão em conflito basicamente e não há muito o que fazer para corrigi-lo. Oh céus.

Não se preocupe. É um problema comum, e alguém já tem uma solução - faça o download e adicione este NewTone para a pasta Bibliotecas do Arduino. Ajuste o início do seu programa para incluir isso:

#incluir 

E ajuste a linha:

 tom (ALARME, tomVal); 

para

 NewTone (ALARM, toneVal); 

em vez de.

É isso aí. Defina seu alarme na porta do seu quarto para o próximo infeliz aspirante a ladrão.

Ou um cachorro bobo, que parecia completamente imperturbável pelo alarme.

Está tendo problemas com o código? Aqui está o aplicativo completo. Se você estiver recebendo erros aleatórios, tente colá-los abaixo e verei se posso ajudar.

Crédito da imagem: Alarme de incêndio via Flickr

James é bacharel em Inteligência Artificial e possui certificação CompTIA A + e Network +. Ele é o principal desenvolvedor do MakeUseOf e passa seu tempo livre jogando paintball e jogos de tabuleiro em VR. Ele está construindo PCs desde que era criança.