INHOUDSOPGAWE:

Arduino deurklokkie: 4 stappe
Arduino deurklokkie: 4 stappe

Video: Arduino deurklokkie: 4 stappe

Video: Arduino deurklokkie: 4 stappe
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, November
Anonim
Arduino deurklokkie
Arduino deurklokkie

Vandag sal ek jou wys hoe om 'n deurklokkie met 'n Arduino te maak. Hierdie deurklokkie speel 'n ewekansige deuntjie uit 'n biblioteek met liedjies. U kan u deurklokkie aanpas en nog meer liedjies byvoeg. Installeer dit buite u slaapkamer, klaskamer, kantoor of selfs u voordeur!

Benodighede:

  • Arduino Uno (die meeste ander soorte sal dit doen)
  • Rekenaar met Arduino IDE vir programmering
  • USB-A na USB-B-kabel vir die programmering van Arduino
  • Broodbord
  • 4x springdrade
  • Drukknop of ander skakelaar
  • Weerstand van 10 kOhm
  • Passiewe zoemer (dws piëzo -elektriese luidspreker)
  • Vir permanente installasie:

    • 9V DC kragbron of 9V battery om Arduino van krag te voorsien
    • 2x lang drade vir bedradingsknoppie buitedeur

Stap 1: hardeware -opstelling

Hardeware -opstelling
Hardeware -opstelling
Hardeware -opstelling
Hardeware -opstelling
Hardeware -opstelling
Hardeware -opstelling

Eerstens stel ons die hardeware op. Ons begin met die passiewe zoemer (dws luidspreker). Ons wil die positiewe kant van die passiewe zoemer (aangedui met '+') aan die digitale pen 8 op die Arduino koppel. Ons verbind die ander kant van die passiese zoemer met die grond.

Vervolgens installeer ons die drukknop vir die deurklokkie. Ons sal 'n 10 kOhm eksterne weerstand vir die skakelaar gebruik, sodat daar geen dryfspanning of onstabiele toestand op die ingang van die Arduino is nie. Deur die afrolweerstand te gebruik, lees die Arduino die spanning as 0V as die knoppie nie ingedruk word nie en 5V wanneer die knoppie ingedruk word. Vir meer inligting oor pullup- of pull-down-weerstande, kan u hierdie artikel lees:

Ons verbind die een kant van die drukknop met 5V. Die ander kant van die drukknop word met 'n 10 kOhm -weerstand teen die grond verbind. Onthou: drukknoppies word intern horisontaal verbind. Hulle word slegs vertikaal verbind as hulle ingedruk word. Meer inligting word in hierdie artikel verskaf:

Stap 2: sagteware -opstelling

Al die kode is aangeheg. Hieronder is die beskrywings van elk van die funksies met kiekies van die kode.

stel op:

In die setup () -funksie wil ons die digitale penne vir ons knoppie en ons luidspreker instel. Ons wil pen 2 as 'n invoer vir ons knoppie opstel, en ons wil pen 8 as 'n uitset vir ons luidspreker opstel.

Ons wil ook ons ewekansige getalgenerator "saad" om lukraak 'n deuntjie te kies wanneer iemand ons deurklokkie lui. Deur ons ewekansige getalgenerator te saai, beteken dit dat hy 'n ewekansige invoer gee. Ons sal ons ewekansige getalgenerator met die spanningswaarde op analoog ingang 0 saai. Aangesien niks aan hierdie inset gekoppel is nie, sal daar 'n 'ewekansige', wisselende spanning op hierdie pen wees, wat ons ewekansige getalgenerator baie verskillende waardes bied. Dit verseker dat ons 'n ander volgorde van liedjieskeuses vir ons deurklokkie sal hê. Vir meer inligting oor die Arduino random () -funksie, gaan hier:

#sluit "pitches.h" in

#include "songss.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8/ * set up function */void setup () {// enable input/output pins pinMode (BUTTON_PIN, INPUT); pinMode (SPEAKER_PIN, OUTPUT); // saad random () funksie sodat ons 'n ander volgorde randomSeed (analogRead (0)) kry; }

lus:

In ons lus () -funksie sal ons voortdurend kyk of die knoppie ingedruk word (digitale pen 2 is hoog). As die pen hoog is, wag ons 50 ms en kyk weer of dit nog hoog is. Dit verseker dat die knoppie ingedruk word en dat dit nie 'n verdwaalde geraas op die digitale invoerpen was nie, wat 'n vals positief veroorsaak het.

Sodra ons bevestig het dat die knoppie ingedruk is, gebruik ons ons ewekansige getalgenerator om een van die 5 liedjies te kies met behulp van 'n skakelaarverklaring. Die data vir hierdie liedjies word in "songs.h" gestoor en die toonhoogte -inligting word in "pitches.h" gestoor. Sodra ons 'n liedjie gekies het, gee ons hierdie inligting deur na die funksie play_song ().

/ * hoof terwyl lus funksie */

leemte -lus () {// kyk of die knoppie ingedruk word as (digitalRead (BUTTON_PIN) == HOOG) {// vertraag 50 ms om seker te maak dat dit nog steeds ingedruk is // vermy vertraagde verkeerde leesinhoud (50); as (digitalRead (BUTTON_PIN) == HOOG) {// willekeurig 'n lied int song_choice = random (5) kies; // kies watter liedjie om te skakel (song_choice) {case 0: play_song (haircutLength, haircut, haircutDurations, haircutTempo); breek; geval 1: play_song (marioLength, mario, marioDurations, marioTempo); breek; geval 2: play_song (miiLength, mii, miiDurations, miiTempo); breek; geval 3: play_song (hpLength, hp, hpDurations, hpTempo); breek; geval 4: play_song (takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); breek; standaard: play_song (miiLength, mii, miiDurations, miiTempo); breek; }}}}

speellied:

play_song () neem 4 argumente: 'n heelgetal note in die liedjie, 'n heelgetalreeks van die toonhoogtes in die melodie, 'n heelgetalreeks van die duur en 'n heelgetal -tempo vir die spesifieke liedjie. U moet elkeen hiervan spesifiseer vir elke liedjie wat u wil speel. Vir meer inligting oor die gebruik van die Arduino -toonfunksies, kan u na hierdie handleiding kyk: https://www.arduino.cc/en/Tutorial/ToneMelody. Ek het 'n paar funksies bygevoeg bo -op hierdie handleiding vir stippelnotas. As 'n waarde in die nootduurreeks negatief is, beteken dit dat dit 'n stippelnoot is (die lengte is 1,5 keer groter).

/ * speel die liedjie */

void play_song (int num_notes, int melody , int noteDurations , int tempo) {// stap deur en speel al die note vir (int i = 0; i 0) {duur = tempo / nootDurasies ; } // as dit 'n negatiewe getal is, beteken gestippelde noot // verhoog die tydsduur met die helfte vir stippelnotas anders as (noteDurations <0) {duration = tempo / abs (noteDurations ) * 1.5; } toon (SPEAKER_PIN, melodie , duur); // om die notas te onderskei, stel 'n minimum tyd tussen hulle in. // die duur van die noot + 30% blyk goed te werk: int pauseBetweenNotes = duur * 1,30; vertraging (pauseBetweenNotes); // stop die toon: noTone (SPEAKER_PIN); }}

Voorbeeld van liedjies.h:

Hieronder is 'n voorbeeld van een van die liedjies in "songs.h". Die notas is makro's gedefinieer in "pitches.h". Die getalle stem ooreen met die frekwensies van die note in hertz (Hz). Die tydsduur van die note word gedefinieer as: 1 = heel noot, 2 = halwe noot, 4 = kwartnoot, 8 = agtste noot, -4 = stippel kwartnoot, ens. Die lengte is die totale aantal note in die liedjie. Die tempo is 'n verdeler vir die spoed van die liedjie ('n hoër getal beteken 'n stadiger tempo). U sal met hierdie nommer moet speel totdat u 'n pas kry wat u wil.

/ * Harry Potter */

int hp = {NOTE_D4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_G4, NOTE_D5, NOTE_C5, NOTE_A4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_F4, NOTE_GS4, NOTE_D4}; int hpDurations = {4, -4, 8, 4, 2, 4, -2, -2, -4, 8, 4, 2, 4, 1}; int hpLength = 14; int hpTempo = 1050;

Stap 3: Tweaks

Voeg meer liedjies by! Volg die formaat in "songs.h" en gebruik die tutoriaal vir hulp: https://www.arduino.cc/en/Tutorial/ToneMelody. Onthou om vir elke nuwe liedjie wat u byvoeg, 'n nuwe geval by die skakelaarverklaring te voeg en die maksimum aantal wat deur u ewekansige () funksie gegenereer kan word, te verhoog. Gelukkige kodering!

Stap 4: Meer projekte

Besoek my bladsye vir meer projekte:

  • https://dargen.io/
  • https://github.com/mjdargen
  • https://www.instructables.com/member/mjdargen/

Aanbeveel: