Como fazer um arduino sistema de alarme simples

Detectar o movimento, em seguida, assustaria de um intruso com uma elevada sons de alarme inclinados e luzes piscando. Será que a diversão som? Claro que faz. Esse é o objetivo do projeto Arduino de hoje, adequado para iniciantes. Nós estaremos escrevendo completamente do zero e testar à medida que avançamos para que você possa esperamos obter uma ideia de como tudo está a ser feito em vez de simplesmente instalar algo que eu já fiz.

Disclaimer: isso não vai realmente proteger sua casa. isto poderia dar a sua irmã um choque desagradável quando ela foge para seu quarto embora.

Você precisará:

  • um Arduino
  • Ultrasonic "ping" sensor, eu estou usando HC-SR04 A PIR seria melhor, mas esses são caros. Um sensor de ping pode ser colocado discretamente em uma porta e ainda servem o mesmo trabalho básico, e é apenas $ 5
  • A campainha piezo
  • Fita LED, com a mesma fiação usamos volta neste projecto.

Como você está conectando-se este projecto, não remover tudo de cada vez - apenas manter edifício no último bloco. No momento em que você começa a "Codificação O sistema de alarme", você deve ter todos os bits e peças com fios para cima, olhando algo como isto:

terminou-fiação

Luzes piscando

Use o esquema de ligações a partir deste projeto para ligar o LED strip não mudam os pinos, como precisamos de saída PWM. Usar este código para testar rapidamente a sua fiação. Se tudo correr bem, você deve ter o seguinte:

levou-rgb-teste

Sensor de Distância

No módulo SR04, você encontrará 4 pinos. VCC e GND ir para + 5V e moído respectivamente- TRIG é o pino usado para enviar um sinal de sonar, colocar isso no pino 6 ECO é usado para ler o sinal de volta (e, portanto, calcular a distância) - colocar isso no dia 7.

SR04

Para tornar as coisas incrivelmente simples, há uma biblioteca podemos usar chamada NewPing. Baixar e colocar em seus Arduino de Biblioteca pasta e reinicie o IDE antes de continuar. teste usando este código- abrir o monitor serial e certifique-se a velocidade está definida para 115200 baud. Com alguma sorte, você deve ver algumas medidas de distância a ser enviar de volta para você em um muito de alta velocidade. Você pode encontrar uma variação de 1 ou 2 centímetros, mas isso é bom. Tente executar a sua mão na frente do sensor, movendo-a para cima e para baixo para observar as leituras em mudança.

ping-output

O código deve ser bastante simples de entender. Há uma declaração de pinos relevantes no início, incluindo uma distância máxima poucos - pode variar de acordo com o sensor exato que você tem, mas contanto que você é capaz de obter a menos de 1 leituras do medidor com precisão, você deve ser fino.

No circuito deste aplicativo de teste, usamos o Ping () função para enviar um ping sonar, recebendo de volta um valor em milissegundos de quanto tempo levou para o valor para retornar. Para dar sentido a isso, usamos as bibliotecas NewPing construído em constante US_ROUNDTRIP_CM, que define quantas microssegundos que leva para ir de um único centímetro. Há também um atraso de 50 ms entre pings para evitar sobrecarregar o sensor.

Alarme piezo

O sensor Piezo cristal é um sinal sonoro simples e barato, e podemos usar um pino PWM 3 para tornar os tons diferentes. Conecte um cabo ao pino 3, um para a terra rail - não importa qual.

Usar este código testar.

A única maneira de matar o alarme em vez antipáticos e barulhento é puxar os plugues. O código é um pouco complexo para explicar, mas envolve o uso de ondas senoidais para gerar um som característico. Ajustar os números para jogar com tons diferentes.

Codificação O sistema de alarme

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

Vá em frente e fazer um novo esboço, chamado Alarme. Comece pela combinação de todas as variáveis ​​e definições dos pinos Nós nos exemplos de teste até agora.

#incluir // Seleccione quais os pinos PWM-capable está a ser utilizado. # Define RED_PIN10 # define GREEN_PIN 11 # define BLUE_PIN 9 # define TRIGGER_PIN 6 // Arduino pin amarrado para acionar o pino sobre o sensor de ultra-som. # Define ECHO_PIN 7 // Arduino pin amarrado ecoar pinos no sensor de ultra-som. # define MAX_DISTANCE 100 // a distância máxima que queremos fazer o ping for (em centímetros). # define ALARME 3float Sinval-int toneVal-

Comece escrevendo um básicos configuração() função - vamos apenas lidar com as luzes para agora. Eu adicionei um atraso de 5 segundos antes do loop principal é iniciado para nos dar algum tempo para sair do caminho, se necessário.

void setup () {// pinModes definidos para RGB strippinMode (RED_PIN, OUTPUT) -pinMode (BLUE_PIN, OUTPUT) -pinMode (GREEN_PIN, OUTPUT) - // redefinir lightsanalogWrite (RED_PIN, 0) -analogWrite (BLUE_PIN, 0) -analogWrite (RED_PIN, 0) -delay (5000) -}

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

// Função auxiliar permitindo-nos para enviar uma cor em uma cor commandvoid (unsigned char vermelho, unsigned char verde, unsigned char azul) // a função geradora de cor {analogWrite (RED_PIN, vermelho) -analogWrite (BLUE_PIN, azul) -analogWrite ( GREEN_PIN, verde) -}

Finalmente, o nosso ciclo por agora vai consistir de um simples piscar de cor entre vermelho e amarelo (ou, o que você quiser que o seu alarme para ser - basta alterar os valores RGB).

vazio loop () {color (255,0,0) - // reddelay (100) -cor (255,255,0) - // yellowdelay (100) -}

Carregar e testar se para garantir que você está no caminho certo.

Agora, vamos integrar o sensor de distância para acionar essas luzes apenas quando algo vem dentro de, digamos, 50 cm (um pouco menos do que a largura de uma moldura da porta). Nós já definiu os pinos da direita e importou a biblioteca, por isso antes de seu configuração() função adicione a seguinte linha para criar uma instância-lo:

NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE) - configuração // NewPing de pinos e uma distância máxima.

Debaixo disso, adicionar uma variável para armazenar o estado do alarme ser acionado ou não, padronizando em falso, é claro.

boolean desencadeada = falso-

Adicionar uma linha ao configuração() função para que possamos monitorar a saída em série e de depuração.

Serial.begin (115200) - // Abrir monitor serial a 115200 baud para ver os resultados de ping.

Em seguida, vamos mudar o nome do loop de corrente para alarme() - Este é o que está será chamado se o alarme foi acionado.

alarme void () {color (255,0,0) - // reddelay (100) -cor (255,255,0) - // yelowdelay (100) -}

Agora crie uma nova loop () função, aquela em que buscar um novo Ping, ler os resultados, e acionar o alarme se algo for detectado dentro do intervalo de metro.

vazio loop () {if (desencadeada == true) {alarme () -} else {atraso (50) - // espera 50ms entre pings (cerca de 20 pings / seg). 29ms deve ser o menor atraso entre pings.unsigned int US = sonar.ping () - // Enviar Ping, obter o tempo de ping em microssegundos (EUA) .unsigned distância int = uS / US_ROUNDTRIP_CM-Serial.println (distância) -se ( distância < 100){triggered = true-}}}

Deixe-me explicar o código brevemente:

  • Comece verificando para ver se o alarme foi acionado e, em caso afirmativo, disparar a função de alarme (apenas piscando as luzes no momento).
  • Se ele não está ainda disparado, começa a leitura atual do sensor.
  • Se o sensor de leitura está <100 cm, something has padded the beam (adjust this value if it’s triggering too early for you, obviously).

Dê-lhe um ensaio agora, antes de adicionar o buzzer piezo irritante.

Trabalhando? Ótimo. Agora vamos acrescentar que buzzer volta. Adicionar pinMode ao configuração() rotina.

pinMode (ALARME, OUTPUT) -

Em seguida, adicione o loop piezo buzzer para a função de alarme ():

for (int x = 0- x<180- x++) {// convert degrees to radians then obtain sin valuesinVal = (sin(x*(3.1412/180)))-// generate a frequency from the sin valuetoneVal = 2000+(int(sinVal*1000))-tone(ALARM, toneVal)-}

Se você tentar compilar neste momento, você vai se deparar com um erro - Deixei isso em deliberadamente assim você pode ver alguns problemas comuns. Neste caso, tanto o NewPing e biblioteca tom padrão usam as mesmas interrupções - eles estão em conflito, basicamente, e não há muita coisa que você pode fazer para corrigi-lo. Oh céus.

Sem preocupações embora. É um problema comum, e alguém tem uma solução já - download e adicione Newtone para a pasta Arduino Bibliotecas. Ajuste o início de seu programa para incluir o seguinte:

#incluir 

E ajustar a linha:

tom (ALARME, toneVal) -

para

Newtone (ALARME, toneVal) -

ao invés.

É isso aí. Definir o alarme até à porta do seu quarto para a próxima infeliz would-be assaltante.

Ou, um cão Dunga, que parecia completamente imperturbável pelo alarme.

Tendo problemas com o código? Aqui está o app completa. Se você estiver recebendo erros aleatórios, tente colá-los abaixo e eu vou ver se posso ajudar.

» » Como fazer um arduino sistema de alarme simples