Publicité

Détectez le mouvement, puis effrayez le diable d'un intrus avec une alarme aiguë et des lumières clignotantes. Cela vous semble amusant? Bien sûr que oui. 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 est fait plutôt que d'installer simplement quelque chose que j'ai déjà fait.

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

Tu auras besoin:

  • Un Arduino
  • Capteur ultrason "ping", 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 sert toujours le même travail de base, et ne coûte que 5 $
  • Un buzzer piézo
  • Barrette d'éclairage à LED, avec le même câblage que nous avons utilisé de retour dans ce projet Créez votre propre éclairage ambiant dynamique pour un centre multimédia
    instagram viewer
    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 à construire sur le dernier bloc. Au moment où vous arrivez à la section «Codage du système d'alarme», vous devriez avoir tous les bits et pièces câblés, ressemblant à ceci:

câblage fini

Lumières clignotantes

Utilisez le schéma de câblage de ce projet Créez votre propre éclairage ambiant dynamique pour un centre multimédiaSi 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 pour brancher votre bande LED; ne changez pas les broches, car nous avons besoin d'une sortie PWM. Utilisation ce code pour tester rapidement votre câblage. Si tout se passe bien, vous devriez avoir ceci:

led-rgb-test

Capteur de distance

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

sr04

Pour rendre les choses incroyablement simples, il existe une bibliothèque que nous pouvons utiliser appelée NewPing. Téléchargez et placez dans votre Arduino Bibliothèque dossier et redémarrez l'IDE avant de continuer. Test 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 des 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.

sortie ping

Le code doit être assez simple à comprendre. Il y a quelques déclarations d'épingles pertinentes au début, y compris une distance maximale - cela peut varier selon le capteur exact que vous avez, mais tant que vous êtes en mesure d'obtenir des lectures inférieures à 1 mètre avec précision, vous devriez être bien.

Dans la boucle de cette application de test, nous utilisons le ping () pour envoyer un ping sonar, récupérant une valeur en millisecondes du temps qu'il a fallu pour que la valeur revienne. Pour comprendre cela, nous utilisons les bibliothèques NewPing construites en constante de US_ROUNDTRIP_CM, qui définit le nombre de microsecondes nécessaires pour parcourir un seul centimètre. Il y a également un délai de 50 ms entre les pings pour éviter de surcharger le capteur.

Alarme piézo

Le capteur à cristal piézo est un buzzer simple et bon marché, et nous pouvons utiliser une broche PWM 3 pour créer des tons différents. Connectez un fil à la broche 3, un au rail de mise à la terre - peu importe lequel.

Utilisation ce code tester.

La seule façon de tuer l'alarme plutôt désagréable et forte est de débrancher les prises. Le code est un peu complexe à expliquer, mais il implique l'utilisation d'ondes sinusoïdales pour générer un son distinctif. Ajustez les nombres 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 définitions de broches que nous avons dans les exemples de test jusqu'à présent.

#comprendre  // Sélectionnez les broches compatibles PWM à utiliser. # définir RED_PIN 10. #define GREEN_PIN 11. #define BLUE_PIN 9 #define TRIGGER_PIN 6 // Broche Arduino liée à la broche de déclenchement sur le capteur à ultrasons. #define ECHO_PIN 7 // Broche Arduino liée à la broche d'écho sur le capteur à ultrasons. #define MAX_DISTANCE 100 // Distance maximale pour laquelle nous voulons cingler (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 pour nous donner un peu de temps pour nous éloigner si nécessaire.

void setup () {// set pinModes for RGB strip pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // réinitialise les lumières 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 seule commande. void color (unsigned char red, unsigned char green, unsigned char blue) // la fonction de génération de couleur. {analogWrite (RED_PIN, rouge); analogWrite (BLUE_PIN, bleu); analogWrite (GREEN_PIN, vert); }

Enfin, notre boucle pour l'instant va consister en un simple flash de couleur entre le rouge et le jaune (ou, quoi que vous vouliez que votre alarme soit - il suffit de changer 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.

Maintenant, intégrons le capteur de distance pour déclencher ces lumières uniquement lorsque quelque chose entre, par exemple, 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 votre installer() ajoutez la ligne suivante pour l'instancier:

Sonar NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Configuration NewPing des broches 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.

boolean triggered = false; 

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

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

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

alarme vide () {couleur (255,0,0); // délai rouge (100); couleur (255,255,0); // délai jaune (100); }

Maintenant, créez un nouveau boucle(), une 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 vide () {if (déclenché == vrai) {alarm (); } else {delay (50); // Attendez 50 ms entre les pings (environ 20 pings / sec). 29 ms devrait être le délai le plus court entre les pings. unsigned int uS = sonar.ping (); // Envoyer ping, obtenir le temps de ping en microsecondes (uS). distance int non signée = uS / US_ROUNDTRIP_CM; Serial.println (distance); if (distance <100) {déclenché = vrai; } } }

Permettez-moi d'expliquer brièvement le code:

  • Commencez par vérifier si l'alarme a été déclenchée et, dans l'affirmative, désactivez la fonction d'alarme (il suffit de faire clignoter les lumières pour le moment).
  • S'il n'est pas encore déclenché, obtenez la lecture actuelle du capteur.
  • Si le capteur lit <100 cm, quelque chose a rembourré le faisceau (ajustez cette valeur si elle se déclenche trop tôt pour vous, évidemment).

Essayez-le maintenant, avant d'ajouter le buzzer piézo ennuyeux.

Travail? Génial. Ajoutons maintenant ce buzzer. Ajouter pinMode à la installer() routine.

pinMode (ALARME, SORTIE); 

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

pour (int x = 0; x <180; x ++) {// convertir les degrés en radians puis obtenir la valeur du sin sinVal = (sin (x * (3.1412 / 180))); // génère une fréquence à partir de la valeur de sinus toneVal = 2000+ (int (sinVal * 1000)); ton (ALARME, tonVal); }

Si vous essayez de compiler à ce stade, vous allez rencontrer une erreur - je l'ai laissé délibérément afin que vous puissiez voir certains problèmes courants. Dans ce cas, le NewPing et la bibliothèque de sons standard utilisent les mêmes interruptions - ils sont en conflit fondamentalement, et vous ne pouvez pas faire grand-chose 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 ceci Nouvelle sonnerie dans votre dossier Bibliothèques Arduino. Ajustez le début de votre programme pour inclure ceci:

#comprendre 

Et ajustez la ligne:

 ton (ALARME, tonVal); 

à

 NewTone (ALARM, toneVal); 

au lieu.

C'est ça. Réglez votre alarme dans l'entrée de votre chambre pour le prochain cambrioleur malheureux.

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

Vous rencontrez des problèmes avec le code? Voici le 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 d'image: Alarme incendie via Flickr

James est titulaire d'un BSc en intelligence artificielle et est certifié CompTIA A + et Network +. Il est le développeur principal de MakeUseOf et passe son temps libre à jouer au paintball VR et aux jeux de société. Il construit des PC depuis qu'il est enfant.