Мазмуну:

Arduino Doorbell: 4 кадам
Arduino Doorbell: 4 кадам

Video: Arduino Doorbell: 4 кадам

Video: Arduino Doorbell: 4 кадам
Video: Amazing arduino project 2024, Ноябрь
Anonim
Arduino Doorbell
Arduino Doorbell

Бүгүн мен сизге Arduino аркылуу эшиктин коңгуроосун кантип жасоону көрсөтөм. Бул эшик коңгуроосу ырлар китепканасынан туш келди обонду ойнойт. Сиз коңгуроону ыңгайлаштырып, андан да көп ырларды кошо аласыз. Аны уктоочу бөлмөнүн, класстын, офистин, ал тургай алдыңкы эшигиңиздин сыртына орнотуңуз!

Берилиштер:

  • Arduino Uno (башка түрлөрүнүн көбү жасайт)
  • Программалоо үчүн Arduino IDE менен компьютер
  • USB-Aдан USB-B кабелине Arduino программалоо
  • Breadboard
  • 4x секирүүчү зымдар
  • Баскыч же башка которгуч
  • 10 кОм резистор
  • Пассивдүү сигнал (б.а. пьезоэлектрик)
  • Туруктуу орнотуу үчүн:

    • 9V DC Power Supply же 9V батарея Arduino кубаттоо үчүн
    • Эшиктин сыртындагы зымдын баскычы үчүн 2х узун зымдар

1 -кадам: Аппараттык орнотуу

Аппараттык орнотуу
Аппараттык орнотуу
Аппараттык орнотуу
Аппараттык орнотуу
Аппараттык орнотуу
Аппараттык орнотуу

Биринчиден, биз аппараттык орнотобуз. Биз пассивдүү сигналдан баштайбыз (б.а. спикер). Биз пассивдүү сигналдын оң жагын ("+" белгиси менен белгиленет) Arduinoдогу санарип пинге 8 туташтыргыбыз келет. Биз passize ызылчасынын экинчи башын жерге туташтырабыз.

Андан кийин, биз эшиктин коңгуроосун орнотобуз. Биз которуштуруу үчүн 10 kOhm тышкы ачылуучу резисторду колдонобуз, андыктан Arduino кирүүсүндө калкып турган чыңалуу же туруксуз абал жок. Пайда болгон резисторду колдонуу менен, Arduino баскыч басылбаган кезде чыңалууну 0В жана баскыч басылганда 5В деп окуйт. Тартуу же түшүү каршылыгы жөнүндө көбүрөөк маалымат алуу үчүн, бул макаланы окуй аласыз:

Биз баскычтын бир тарабын 5Вга туташтырабыз. Баскычтын экинчи тарабы жерге 10 кОм түшүүчү резистор аркылуу туташат. Эсиңизде болсун: баскычтар ички горизонталдуу туташтырылган. Алар басылганда гана тигинен туташат. Көбүрөөк маалымат бул макалада келтирилген:

2 -кадам: Программаны орнотуу

Бардык код тиркелет. Төмөндө коддун сүрөттөрү менен ар бир функциянын сүрөттөмөсү келтирилген.

жайгашуу:

Setup () функциясында биз баскыч менен динамигибиз үчүн санарип казыктарды конфигурация кылгыбыз келет. Биз 2 -пинди баскычыбыздын кириши катары конфигурациялоону каалайбыз жана 8 -пинди спикерибиздин чыгышы катары конфигурациялоону каалайбыз.

Биз ошондой эле кимдир бирөө биздин коңгурообузду чалганда, обонду туш келди тандоо үчүн кокус сандар генераторун "уруктандыргыбыз" келет. Биздин кокус сандардын генераторун себүү, аны кокусунан киргизүү дегенди билдирет. Биз кокустук сан генераторубузду аналогдук киришке 0 чыңалуусу менен себебиз. Бул кирүүгө эч нерсе туташпагандыктан, бул пинде ар кандай мааниге ээ болгон кокустук сандар генераторун камсыз кылган "кокус", өзгөрмөлүү чыңалуу болот. Бул биздин коңгурообуз үчүн ыр тандоонун башка тартибине ээ болууну камсыз кылат. Arduino random () функциясы жөнүндө көбүрөөк маалымат алуу үчүн бул жерге өтүңүз:

#"кадамдарды.h" кошуу

#include "songs.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8/ * орнотуу функциясы */void setup () {// pinMode (BUTTON_PIN, INPUT) киргизүү/чыгаруу түйрөгүчтөрүн иштетүү; pinMode (SPEAKER_PIN, OUTPUT); // seed random () функциясы, ошондуктан башка заказды алабыз randomSeed (analogRead (0)); }

цикл:

Биздин loop () функциясында, биз баскычтын басылганын текшерип турабыз (санарип пин 2 бийик). Эгерде пин жогору болсо, биз 50 мс күтөбүз жана дагы эле жогору экенине ынануу үчүн кайра текшеребиз. Бул баскычтын басылышын камсыздайт жана ал санарип кирүү пининде жалган позитивди жараткан ызы -чуу эмес.

Кнопка басылганын ырастагандан кийин, биз туш келди сандын генераторун колдонуп, 5 ырдын бирөөсүн которуу операторунун жардамы менен тандап алабыз. Бул ырлардын маалыматтары "songs.h" де сакталат жана "pitch.h" де сакталат. Ырды тандап алгандан кийин, бул маалыматты play_song () функциясына өткөрүп беребиз.

/ * main while while функциясы */

void loop () {// баскычынын басылганын текшериңиз, эгерде (digitalRead (BUTTON_PIN) == HIGH) {// 50 мс кечиктирилсе дагы эле басылганына ынануу үчүн // эч кандай адашып кетүү кечигүүсүнөн сактайт (50); if (digitalRead (BUTTON_PIN) == HIGH) {// туш келди ырды танда int int_choice = random (5); // кайсы ырды ойнотууну тандаңыз (song_choice) {case 0: play_song (haircutLength, haircut, haircutDurations, haircutTempo); тыныгуу; 1 -жагдай: play_song (marioLength, mario, marioDurations, marioTempo); тыныгуу; 2 -жагдай: play_song (miiLength, mii, miiDurations, miiTempo); тыныгуу; 3 -жагдай: play_song (hpLength, hp, hPDurations, hpTempo); тыныгуу; 4 -жагдай: play_song (takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); тыныгуу; демейки: play_song (miiLength, mii, miiDurations, miiTempo); тыныгуу; }}}}

play_song:

play_song () 4 аргументти талап кылат: ырдагы ноталардын бүтүн саны, обондогу үндөрдүн бүтүн саны, узактыгынын бүтүн массиви жана ошол ырдын бүтүн темпи. Сиз ойногусу келген ар бир ыр үчүн булардын ар бирин белгилешиңиз керек. Arduino тон функцияларын кантип колдонуу жөнүндө көбүрөөк маалымат алуу үчүн, бул окуу куралын караңыз: https://www.arduino.cc/en/Tutorial/ToneMelody. Мен бул окуу куралынын үстүнө чекит ноталар үчүн кээ бир функцияларды коштум. Эгерде нотанын узактыгынын массивиндеги терс мааниге ээ болсо, анда бул чекиттүү нотаны билдирет (узундугу 1,5 эсе чоң).

/ * ырды ойнойт */

void play_song (int num_notes, int melody , int noteDurations , int tempo) {// (int i = 0; i 0) {Duration = temp / noteDurations үчүн бардык ноталарды басып өтүңүз. } // эгерде бул терс сан болсо, чекитти билдирет // чекит ноталардын узактыгын эки эсе көбөйтөт, эгерде (noteDurations <0) {Duration = tempo / abs (noteDurations ) * 1.5; } обон (SPEAKER_PIN, обон , узактыгы); // ноталарды айырмалоо үчүн, алардын ортосундагы минималдуу убакытты белгилөө. // нотанын узактыгы + 30% жакшы иштейт окшойт: int pauseBetweenNotes = Duration * 1.30; кечигүү (pauseBetweenNotes); // обон ойнотууну токтотуу: noTone (SPEAKER_PIN); }}

Ырлардын үлгүсү.h:

Төмөндө "songs.h" ырларынын биринин үлгүсү келтирилген. Эскертүүлөр "pitches.h" менен аныкталган макростар. Сандар герцтеги (Hz) ноталардын жыштыгына туура келет. Ноталардын узактыгы төмөнкүчө аныкталат: 1 = бүт нота, 2 = жарым нота, 4 = чейрек нотасы, 8 = сегизинчи нота, -4 = чекит чейрек нотасы ж. Б. Узундугу -ырдагы ноталардын жалпы саны. Темп ырдын ылдамдыгын бөлүүчү болуп саналат (жогорку сан жайыраак темпти билдирет). Сизге жаккан темпти алганга чейин бул номер менен ойноого туура келет.

/ * Гарри Поттер */

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;

3 -кадам: Tweaks

Дагы ырларды кошуңуз! "Songs.h" де көрсөтүлгөн форматты карманыңыз жана жардам үчүн окуу куралын колдонуңуз: https://www.arduino.cc/en/Tutorial/ToneMelody. Сиз кошкон ар бир жаңы ыр үчүн switch билдирүүсүнө жаңы баштык кошууну жана random () функциясы тарабынан түзүлүүчү максималдуу санды көбөйтүүнү унутпаңыз. Бактылуу коддоо!

4 -кадам: Дагы долбоорлор

Башка долбоорлор үчүн, менин баракчаларыма баш багыңыз:

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

Сунушталууда: