Comment faire un système d'alarme Arduino simple

Comment faire un système d'alarme Arduino simple / DIY

Détectez les mouvements, puis effrayez un intrus avec une alarme aiguë et des lumières clignotantes. Cela semble-t-il amusant? Bien sûr que si. C'est l'objectif du projet Arduino d'aujourd'hui, adapté aux débutants. Nous allons écrire complètement à partir de zéro et tester au fur et à mesure afin que vous puissiez, espérons-le, avoir une idée de la façon dont tout cela se fait plutôt que d'installer simplement quelque chose que j'ai déjà fait..

Avertissement: cela ne va pas réellement protéger votre maison. Il pourrait donne à ta sœur un choc désagréable quand elle se faufile dans ta chambre.

Tu auras besoin:

  • Un Arduino
  • Ultrasonique “ping” capteur, j'utilise HC-SR04 Un PIR serait mieux, mais ceux-ci sont chers. Un capteur de ping peut être placé subrepticement dans une porte et servir toujours le même travail de base, et est seulement 5 $
  • Un buzzer piézo
  • Lumière de bande à LED, avec le même câblage que nous avons utilisé dans ce projet Construisez votre propre éclairage ambiant dynamique pour un centre multimédia Créez votre propre éclairage ambiant dynamique pour un centre multimédia Si vous regardez beaucoup de films sur votre PC ou votre centre multimédia, Je suis sûr que vous avez fait face au dilemme de l'éclairage. éteignez-vous complètement toutes les lumières? Les gardez-vous à fond? Ou… Lire la suite .

Pendant que vous connectez ce projet, ne supprimez pas tout à chaque fois, continuez simplement sur le dernier bloc. Au moment où vous arrivez à “Codage du système d'alarme” section, vous devriez avoir tous les morceaux câblés, ressemblant à ceci:

Lumières clignotantes

Utilisez le schéma de câblage de ce projet Créez votre propre éclairage ambiant dynamique pour un centre multimédia Créez votre propre éclairage ambiant dynamique pour un centre multimédia Si vous regardez beaucoup de films sur votre PC ou dans votre centre multimédia, je suis sûr que vous avez dilemme de l'éclairage; éteignez-vous complètement toutes les lumières? Les gardez-vous à fond? Ou… Lire la suite pour raccorder votre bande de LED; ne changez pas les broches, car nous avons besoin d’une sortie PWM. Utilisez ce code pour tester rapidement votre câblage. Si tout se passe bien, vous devriez avoir ceci:

Capteur de distance

Sur le module SR04, vous trouverez 4 broches. VCC et GND aller à + 5V rail et sol respectivement; TRIGONOMÉTRIE est la broche utilisée pour envoyer un signal sonar, mettez ceci sur la broche 6; ÉCHO est utilisé pour lire le signal (et donc calculer la distance) - mettez ceci sur 7.

Pour rendre les choses incroyablement simples, il existe une bibliothèque que nous pouvons utiliser appelée NewPing. Téléchargez et placez dans vos Arduino Bibliothèque dossier et redémarrez l'IDE avant de continuer. Testez en utilisant ce code; Ouvrez le moniteur série et assurez-vous que la vitesse est réglée sur 115200 bauds. Avec un peu de chance, vous devriez voir certaines mesures de distance vous être renvoyées à une vitesse assez élevée. Vous pouvez trouver un écart de 1 ou 2 centimètres, mais c'est très bien. Essayez de passer votre main devant le capteur, en le déplaçant de haut en bas pour observer les lectures changeantes..

Le code devrait être assez simple à comprendre. Il y a quelques déclarations de broches pertinentes au début, y compris une distance maximale - cela peut varier en fonction du capteur exact que vous avez, mais tant que vous pouvez obtenir des lectures inférieures à 1 mètre avec précision, tout devrait bien se passer.

Dans la boucle de cette application de test, nous utilisons le ping () fonction pour envoyer un ping sonar, en récupérant une valeur en millisecondes du temps nécessaire au retour de la valeur. Pour donner un sens à cela, nous utilisons les bibliothèques NewPing construites en constante de US_ROUNDTRIP_CM, qui définit combien de microsecondes il faut pour aller d'un centimètre. Il y a aussi un délai de 50 ms entre les pings pour éviter de surcharger le capteur.

Alarme piézo

Le capteur à cristaux piézoélectriques est un avertisseur sonore simple et économique. Nous pouvons utiliser une broche PWM 3 pour créer différentes tonalités. Connectez un fil à la broche 3, un au rail de terre - peu importe lequel.

Utilisez ce code pour tester.

Le seul moyen de supprimer l’alarme plutôt odieuse et forte est de débrancher les fiches. Le code est un peu complexe à expliquer, mais il implique l’utilisation d’ondes sinusoïdales pour générer un son distinctif. Tweak les chiffres pour jouer avec des tons différents.

Codage du système d'alarme

Maintenant que nous avons toutes les pièces de ce puzzle, combinons-les ensemble.

Allez-y et faites un nouveau croquis, appelé Alarme. Commencez par combiner toutes les variables et les définitions de broches utilisées jusqu'à présent dans les exemples de test..

#comprendre  // Sélectionnez les broches compatibles PWM à utiliser. #define RED_PIN 10 #define GREEN_PIN 11 #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Broche Arduino attachée à une broche de déclenchement sur le capteur à ultrasons. #define ECHO_PIN 7 // Broche Arduino liée à la broche d'écho du capteur à ultrasons. #define MAX_DISTANCE 100 // Distance maximale pour laquelle nous voulons faire un ping (en centimètres). #define ALARM 3 float sinVal; int toneVal; 

Commencez par écrire une base installer() fonction - nous ne traiterons que des lumières pour l'instant. J'ai ajouté un délai de 5 secondes avant le début de la boucle principale afin de nous laisser le temps de nous écarter du chemin si nécessaire..

void setup () // définit les pinModes pour le pinMode de bande RVB (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // reset lights analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); retard (5000); 

Utilisons une fonction d'assistance qui nous permet d'écrire rapidement une seule valeur RVB sur les lumières.

// fonction d'assistance nous permettant d'envoyer une couleur en une commande void color (unsigned char red, green non-signé, green, unsigned-char-blue) // la fonction génératrice de couleur analogWrite (RED_PIN, rouge); analogWrite (BLUE_PIN, blue); analogWrite (GREEN_PIN, vert); 

Enfin, notre boucle pour le moment va consister en un simple clignotement de couleur entre le rouge et le jaune (ou quoi que vous vouliez comme alarme: changez simplement les valeurs RVB).

boucle vide () couleur (255,0,0); // délai rouge (100); couleur (255,255,0); // délai jaune (100); 

Téléchargez et testez cela pour vous assurer que vous êtes sur la bonne voie.

Intégrons maintenant le capteur de distance pour déclencher ces lumières uniquement lorsque quelque chose se trouve à l'intérieur, disons 50 cm (un peu moins que la largeur d'un cadre de porte). Nous avons déjà défini les bonnes épingles et importé la bibliothèque, donc avant que votre installer() function ajoute la ligne suivante pour l'instancier:

Sonar NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Configuration NewPing des pins et distance maximale. 

En-dessous, ajoutez une variable pour stocker l'état de l'alarme déclenchée ou non, par défaut à false, bien sûr..

booléen déclenché = faux; 

Ajouter une ligne au installer() fonction afin que nous puissions surveiller la sortie en série et déboguer.

Serial.begin (115200); // Ouvrez le moniteur en série à 115 200 bauds pour voir les résultats du ping. 

Ensuite, renommons la boucle en cours en alarme() - c'est ce qui sera appelé si l'alarme a été déclenchée.

alarme d'annulation () couleur (255,0,0); // délai rouge (100); couleur (255,255,0); // délai jaune (100); 

Maintenant, créez un nouveau boucle() fonction, dans laquelle nous récupérons un nouveau ping, lisons les résultats et déclenchons l'alarme si quelque chose est détecté dans la plage du compteur.

boucle void () if (triggered == true) alarm ();  else delay (50); // Attendez 50 ms entre les pings (environ 20 pings / s). 29 ms devrait être le délai le plus court entre les pings. unsigned int uS = sonar.ping (); // Envoyer un ping, obtenir l'heure du ping en microsecondes (US). unsigned int distance = US / US_ROUNDTRIP_CM; Serial.println (distance); si (distance < 100) triggered = true;    

Laissez-moi expliquer le code brièvement:

  • Commencez par vérifier si l'alarme s'est déclenchée et, le cas échéant, désactivez la fonction d'alarme (il suffit de faire clignoter les lumières pour le moment).
  • Si ce n'est pas encore déclenché, obtenez la lecture actuelle du capteur.
  • Si le capteur lit <100 cm, something has padded the beam (adjust this value if it's triggering too early for you, obviously).

Faites un essai maintenant, avant d'ajouter le son piezo buzzer.

Travail? Génial. Ajoutons maintenant cette sonnerie. Ajouter pinMode au installer() routine.

pinMode (ALARM, OUTPUT); 

Ajoutez ensuite la boucle de sonnerie piézo à la fonction alarm ():

pour (int x = 0; x<180; x++)  // convert degrees to radians then obtain sin value sinVal = (sin(x*(3.1412/180))); // generate a frequency from the sin value toneVal = 2000+(int(sinVal*1000)); tone(ALARM, toneVal);  

Si vous essayez de compiler à ce stade, vous rencontrerez une erreur - je l'ai laissée délibérément pour vous permettre de voir certains problèmes courants. Dans ce cas, NewPing et la bibliothèque de sons standard utilisent les mêmes interruptions - elles sont fondamentalement en conflit et vous ne pouvez rien faire pour y remédier. Oh cher.

Pas de soucis cependant. C'est un problème courant, et quelqu'un a déjà une solution: téléchargez et ajoutez cette NewTone à votre dossier Bibliothèques Arduino. Ajustez le début de votre programme pour inclure ceci:

#comprendre  

Et ajustez la ligne:

 ton (ALARM, toneVal); 

à

 NewTone (ALARM, toneVal); 

au lieu.

C'est tout. Installez votre réveil à la porte de votre chambre pour le prochain malheureux cambrioleur.

Ou, un chien dopey, qui semblait complètement insensible à l'alarme.

Des problèmes avec le code? Voici l'application complète. Si vous obtenez des erreurs aléatoires, essayez de les coller ci-dessous et je verrai si je peux vous aider.

Crédit image: Alarme incendie via Flickr

En savoir plus sur: Arduino.