Skocz do zawartości

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


Komentator

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 do komentarza
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 do komentarza
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);  
}

 

 

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Cześć

Mam problem dotyczący przykładu, w którym w pętli for generujemy różne częstotliwości dźwięku. Wszystko jest podłączone zgodnie ze schematem a po kilku nieudanych próbach kod przekopiowałam prosto ze strony (inne programy/przykłady działają poprawnie). I cały czas to samo - słychać tylko jeden obieg pętli (tzn. nie słychać po pewnym czasie kolejnego charakterystycznego świstu jak w nagraniu na stronie). Gdzie może tkwić błąd?

Pozdrawiam

Link do komentarza
Share on other sites

@Gieneq Zrobiłam tak i słychać bez problemu. Wstawiam kod jakby miało to coś pomóc.

void setup() {
  pinMode(A5, OUTPUT); //Konfiguracja A5 jako wyjście
}
 
void loop() {
  int czestotliwosc = 0,ile=0;
  
 /* for (czestotliwosc = 31; czestotliwosc < 65535; czestotliwosc++) { 
   tone(A5, czestotliwosc); 
  }  */

  for(ile=1;ile>0;ile++)
  {
    tone(A5,1500);
    delay(300);
    tone(A5,10000);
    delay(300);
  }
  
}

 

  • Lubię! 1
Link do komentarza
Share on other sites

Warto zaznaczyć (głównie dla początkujących, którzy nie mają jeszcze w zwyczaju zaglądać do dokumentacji), że wcale nie musimy pisać np.:

tone(A5,1500);
delay(300);

 

Można to zapisać również po prostu jako:

//tone(pin, czestotliwosc, czasTrwania)
tone(A5,1500,300);

 

Link do komentarza
Share on other sites

Witam wszystkich, gdy podłączam zasilacz z zestawu do arduino, to nic się nie dzieje i nie jest to problem z mikrokontrolerem, ponieważ podłączony przez usb działa bez zarzutu. Czy może mi ktoś doradzić co zrobić?

Edytowano przez Mongooose
Link do komentarza
Share on other sites

@Mongooose a sprawdzałeś napięcie na wyjściu zasilacza?

Jeżeli zasilacz jest ok to pewnie coś z regulatorem, komparatorem, albo mosfetem. Jak zawsze w takich sytuacjach odwołują do schematu, a w tym przypadku sprawdź napięcia na tym układzie:

image.thumb.png.2b8892bc8eea904b601f508b9b284e12.png

a w dalszej kolejności te miejsca:

image.thumb.png.18a82e6c65988f22e2c82c39f85fa9b9.png

Edytowano przez Gieneq
Link do komentarza
Share on other sites

Mam problem z tą pętlą for, która ma sprawdzać głośność przy wszystkich możliwych częstotliwościach. Program nie wraca po kilku sekundach na początek pętll, tak jak było napisane w kursie, tylko buzzer cały czas wydaje coraz cichsze dźwięki.

Link do komentarza
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.