Skocz do zawartości

Kurs Arduino II - #3 - syrena alarmowa, MOSFET w praktyce


Pomocna odpowiedź

Dioda miałaby trochę sensu gdybyś podłączał buzzer indukcyjny, przypominający konstrukcją typowy głośnik dynamiczny. Ponieważ jednak a) w kursie masz buzzer piezo oraz b) nawet buzzer "głośniczkowy" nie jest groźny dla stosunkowo mocnych pinów mikrokontrolera, to diodkę można odpuścić. To już bardziej właśnie dławik szeregowy dałby znaczną poprawę (mocy i jakości) dźwięku, ale niestety tylko dla wąskiego zakresu częstotliwości wokół rezonansu tak powstałego obwodu LC.  A tranzystor? Ma największy sens w przypadku buzzerów tzw. aktywnych, zasilanych prądem stałym i zawierających w środku generator. W przypadku bipczaków pasywnych pojedynczy tranzystor sprawdzi się raczej słabo. Nawet biorąc pod uwagę "ratunkowe" rozwiązanie z kursu, z opornikiem równoległym. Oba rodzaje sygnalizatorów akustycznych wymagają do dobrego działania sterowania "dwukierunkowego", więc dwa tranzystory to minimum a w praktyce rozwiązań jest kilka.

Link to post
Share on other sites

Napisałem program, który powinien grać melodie z mojej ulubionej animacji -  "The grand day out" z & Grommit. Niby wszystko spisane z nut jak trzeba ale coś nie do końca brzmi jak powinno 😞. Czas na budowę pianina 😉

#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_G5  784
#define NOTE_C6  1047
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_FS6 1480
#define NOTE_G6  1568

#define NOTE_WHOLE 3200
#define NOTE_HALF (NOTE_WHOLE / 2)
#define NOTE_QUATER (NOTE_HALF / 2)
#define NOTE_EIGHTH (NOTE_QUATER /2)
#define NOTE_SIXTEENTH (NOTE_EIGHTH /2)

void setup() {
  pinMode(A5, OUTPUT);

  /////////////////////////// 1
  note(NOTE_D6, NOTE_EIGHTH);
  note(NOTE_C6, NOTE_SIXTEENTH);
  note(NOTE_G5, NOTE_EIGHTH); //BASS LINE
  note(NOTE_D6, NOTE_EIGHTH);
  note(NOTE_C6, NOTE_SIXTEENTH);
  note(NOTE_G5, NOTE_EIGHTH); //BASS LINE
  ////////////////////////////// 2
  note(NOTE_D6, NOTE_EIGHTH);
  note(NOTE_F5, NOTE_EIGHTH); //BASS LINE
  note(NOTE_F5, NOTE_HALF * 3 / 2); //BASS LINE
  ////////////////////////////// 3
  note(NOTE_E6, NOTE_EIGHTH);
  note(NOTE_D6, NOTE_EIGHTH);
  note(NOTE_E6, NOTE_EIGHTH);
  note(NOTE_FS6, NOTE_QUATER);
  note(NOTE_E6, NOTE_EIGHTH);
  note(NOTE_D6, NOTE_EIGHTH);
  note(NOTE_C6, NOTE_EIGHTH);
  ///////////////////////////// 4
  note(NOTE_G5, NOTE_WHOLE); //BASS LINE
  ////////////////////////////////////// 5
  note(NOTE_D6, NOTE_QUATER);
  note(NOTE_C6, NOTE_EIGHTH);
  note(NOTE_G5, NOTE_EIGHTH); //BASS LINE
  note(NOTE_D6, NOTE_QUATER);
  note(NOTE_C6, NOTE_EIGHTH);
  note(NOTE_G5, NOTE_EIGHTH); //BASS LINE
  //////////////////////////////6
  note(NOTE_D6, NOTE_EIGHTH);
  note(NOTE_F5, NOTE_EIGHTH); //BASS LINE
  note(NOTE_F5, NOTE_HALF * 3 / 2); //BASS LINE
  /////////////////////////////////// 7
  note(NOTE_E6, NOTE_EIGHTH);
  note(NOTE_D6, NOTE_EIGHTH);
  note(NOTE_E6, NOTE_EIGHTH);
  note(NOTE_FS6, NOTE_EIGHTH);
  note(NOTE_FS6, NOTE_QUATER);
  note(NOTE_E6, NOTE_EIGHTH);
  note(NOTE_FS6, NOTE_EIGHTH);
  ////////////////////////////// 8
  note(NOTE_G6, NOTE_QUATER);
  note(NOTE_D6, NOTE_QUATER);
  note(NOTE_G6, NOTE_EIGHTH);
  note(NOTE_G6, NOTE_EIGHTH);
  note(NOTE_FS6, NOTE_EIGHTH);
  note(NOTE_E6, NOTE_EIGHTH);
  ////////////////////////////////////// 9
  note(NOTE_G6, NOTE_QUATER);
  note(NOTE_FS6, NOTE_EIGHTH);
  note(NOTE_E6, NOTE_EIGHTH);
  note(NOTE_E6, NOTE_EIGHTH);
  note(NOTE_G6, NOTE_EIGHTH);
  note(NOTE_FS6, NOTE_EIGHTH);
  note(NOTE_E6, NOTE_EIGHTH);
  //////////////////////////// 10
  note(NOTE_G6, NOTE_QUATER);
  note(NOTE_E6, NOTE_EIGHTH);
  note(NOTE_D6, NOTE_EIGHTH);
  note(NOTE_D6, NOTE_EIGHTH);
  note(NOTE_D6, NOTE_EIGHTH);
  note(NOTE_E6, NOTE_EIGHTH);
  note(NOTE_D6, NOTE_EIGHTH);
  /////////////////////////////// 11
  note(NOTE_E6, NOTE_EIGHTH);
  note(NOTE_D6, NOTE_EIGHTH);
  note(NOTE_E6, NOTE_EIGHTH);
  note(NOTE_G5, NOTE_EIGHTH); //BASS LINE
  note(NOTE_F5, NOTE_EIGHTH); //BASS LINE
  note(NOTE_G5, NOTE_EIGHTH); //BASS LINE
  note(NOTE_F5, NOTE_EIGHTH); //BASS LINE
  /////////////////////
  note(NOTE_G5, NOTE_HALF); //BASS LINE
  pause(NOTE_EIGHTH);
  note(NOTE_G5, NOTE_EIGHTH); //BASS LINE
  note(NOTE_F5, NOTE_EIGHTH); //BASS LINE
  note(NOTE_G5, NOTE_EIGHTH); //BASS LINE
}

void loop() {

}

void note(int frequency, int duration) {
  tone(A5, frequency);
  delay(duration);
  noTone(A5);
}

void pause(int duration) {
  delay(duration);
}

 

 

 

 

Edytowano przez Raccoon
Link to post
Share on other sites

Zgodnie z obietnicą jest pianino 😄

Niestety z powodu małej płytki stykowej nie udało mi się w sensowny sposób umieścić półtonów - więc jest tylko podstawowa skala C-dur.

pianino.thumb.jpg.088d0918de299f01ba082a84c36506c7.jpg

Da się na tym zagrać np. "Wlazł kotek na płotek".

Co do programu - tak jak zalecają w przykładach do funkcji tone() definicje częstotliwości dźwięków są w pliku pitches.h - dzięki temu można ich używać w wielu szkicach bez kopiowania.

#include "pitches.h"

#define BUTTON_C6 2
#define BUTTON_D6 3
#define BUTTON_E6 4
#define BUTTON_F6 5
#define BUTTON_G6 6
#define BUTTON_A6 7
#define BUTTON_B6 8
#define BUTTON_C7 9

#define BUZZER A5

const int BUTTONS[] = {
  BUTTON_C6,
  BUTTON_D6,
  BUTTON_E6,
  BUTTON_F6,
  BUTTON_G6,
  BUTTON_A6,
  BUTTON_B6,
  BUTTON_C7
};

const int PITCHES[] = {
  NOTE_C6,
  NOTE_D6,
  NOTE_E6,
  NOTE_F6,
  NOTE_G6,
  NOTE_A6,
  NOTE_B6,
  NOTE_C7
};

void setup() {
  pinMode(BUZZER, OUTPUT);
  for (int i = 0; i < 8; i++) {
    pinMode(BUTTONS[i], INPUT_PULLUP);
  }
}

void loop() {
  for (int i = 0; i < 8; i++) {
    if (digitalRead(BUTTONS[i]) == LOW) {
      handleButtonClick(i);
    }
  }
  delay(100);
}

void handleButtonClick(int index) {
  while (digitalRead(BUTTONS[index]) == LOW) {
    tone(BUZZER, PITCHES[index]);
    delay(100);
  }
  noTone(BUZZER);  
}

 

 

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.