INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(
Witam was wszystkich gorąco. Jest to mój pierwszy wpis więc się przedstawie. Jestem Jan Rzepiszczak. Koledzy wołają na mnie Jajko więc stąd moja ksywka. Dzisiaj mam wam do przedstawienia projekt, który powstał przypadkiem, a mianowicie VU-meter. Powstał on gdy bawiłem się w DJ-a na szkolnej dyskotece. Nie przedłużając zaczynajmy.
ZBYT MOCNE NAPIĘCIE NA KABLU Z GŁOŚNIKÓW MOŻE USZKODZIĆ ARDUINO.
PAMIĘTAJ KAŻDY BŁĄD MOŻE SPOWODOWAĆ USZKODZENIE WZMACNIACZA, ARDUINO, LUB KOMPUTERA.
LISTA ZAKUPÓW:
1X Arduino (oczywiście można później przenieść na np. AtMege 8)
2x Expander PCF8547
4X Dioda zielona
4X Dioda żółta
4X Dioda czerwona
12X Rezystory 220 R
1X Potencjometr 10kR
ZACZYNAMY!!!
PRZY PODŁĄCZANIU KABLI OD GŁOŚNIKÓW WYŁĄCZ ARDUINO OD PRĄDU, A PRZY PODŁĄCZONYCH GŁOŚNIKACH NIE UŻYWAJ KABLA USB!
Na początek może pokaże schemat podłączenia diod (Przepraszam, że nie czytelny) . Jest to schemat dla jednego zestawu diod. Drugi podłączamy identycznie z tym, że nóżki A2 A1 A0 podłączamy na stan wysoki(patrz niżej).
EXPANDER
Układ opiera się na dwóch układach PCF8574.Wiem, że mogłem podłączyć Arduino wprost do diod, ale planuję zbudować coś w stylu inteligentnego pokoju, a to będzie jeden z modułów. Może powiem wam co nieco o PCF8574. Jest to expander, który pozwala zwiększyć ilość pinów w Arduino, komunikujący się przez linie I2C. Jest również jego inna wersja. Nie różni się ona niczym oprócz nazwy (Na końcu jest “A”) oraz adresu. No właśnie co to są adresy? Pewnie niektórzy z was się spytali co to właściwie jest adres. Już odpowiadam. Adres jest to ciąg liczb 1 i 0 (jeżeli chodzi o adres binarny). W podstawowej wersji jest to 0100 i później stan pinu A2, A1, i A0. W wersji z końcówką A jest to 0111 i stan pinu A2, A1, A0. Zamieszczę jeszcze schemat wyprowadzeń expandera.Gdyby ktoś chciał poczytać więcej o PCF8574 to zapraszam tu.
źródło : http://starter-kit.nettigo.pl/2011/11/pcf8574-czyli-jak-latwo-zwiekszyc-liczbe-pinow-w-arduino/
TEST
Przetestujmy to :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <PCF8574.h> #include <Wire.h> PCF8574 e1; PCF8574 e2; int pinCount = 6; int p = 100; void setup() { e1.begin(32); e2.begin(39); for (int thisPin = 0; thisPin < pinCount; thisPin++) { e1.pinMode(thisPin, OUTPUT); e2.pinMode(thisPin, OUTPUT); } } void loop(void) { for (int thisPin = 0; thisPin < pinCount; thisPin++) { e1.digitalWrite(thisPin, HIGH); delay(p); e1.digitalWrite(thisPin, LOW); } for (int thisPin = 0; thisPin < pinCount; thisPin++) { e2.digitalWrite(thisPin, HIGH); delay(p); e2.digitalWrite(thisPin, LOW); } } |
Program powinien zapalić wszystkie diody i potem je wyłączać i włączać po kolei.
Objaśnię teraz trochę kodu :
Linijka 4 i 5 nazywają ekspandery od diod górnych i dolnych.
Zmienna “pinCount” określa ilość diod.
Zmienna “p” określa czas zgaszenia diody.
11 i 12 linia określa adres expanderów.
Linijki 13-16 definiują piny expanderów.
W głównej pętli pierwsza pętla (wiem troszkę głupio napisane :/ ) wyłącza i włącza po kolei diody podłączone pod 1 expander. Druga robi to samo tyle, że z drugim expanderem. I to tyle : ).
PODŁĄCZENIE GŁOŚNIKÓW
Teraz podłączmy sobie głośniczki i jakiś regulator czułości. Jako regulator użyłem potencjometru podłączając jego prawą nóżkę do wejścia A2 w arduino. Głośniki lewy i prawy podłączyłem do pinów A0 i A1. Drugie kabelki od głośników poprowadziłem do masy.
Schemat (ze względu na czytelność niema diod).
ZBYT MOCNY WZMACNIACZ AUDIO MOŻE USZKODZIĆ ARDUINO!!! PAMIĘTAJ O SPRAWDZENIU CZY NA KABLU NIEMA WIĘCEJ JAK 4,5 V
Tu mamy kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
#include <PCF8574.h> #include <Wire.h> PCF8574 e1; PCF8574 e2; int pinCount = 6; int senL; int senP; int wzmocnienie; int sensorPinL = A0; int sensorPinP = A1; int potenPin = A2; int wzmoc = 300; int p = 100; int zmienna; int wynik; void setup() { e1.begin(32); e2.begin(39); for (int thisPin = 0; thisPin < pinCount; thisPin++) { e2.pinMode(thisPin, OUTPUT); e1.pinMode(thisPin, OUTPUT); } pinMode(sensorPinL, INPUT); pinMode(sensorPinP, INPUT); pinMode(potenPin, INPUT); } void loop(void) { wzmocnienie = analogRead(potenPin) / 30; senL = analogRead(sensorPinL) * wzmocnienie; senP = analogRead(sensorPinP) * wzmocnienie; for (int thisPin = 0; thisPin < pinCount; thisPin++) { e1.digitalWrite(thisPin, HIGH); e2.digitalWrite(thisPin, HIGH); } zmienna = p - wzmoc; for (int thisPin = 0; thisPin < pinCount; thisPin++) { zmienna = zmienna + wzmoc; if(senP > zmienna) { e1.digitalWrite(thisPin, LOW); } } zmienna = p - wzmoc; for (int thisPin = 0; thisPin < pinCount; thisPin++) { zmienna = zmienna + wzmoc; if(senP > zmienna) { e2.digitalWrite(thisPin, LOW); } } } |
Znów objaśniam kod którego nie było:
Linijki 8-10 to zmienne które posłużą nam do zapisywania wyników po przeliczeniach.
Linie 11-13 to definicje pinów do których mamy podłączone głośniki oraz potencjometr do regulowania czułości.
Linijka 14 to ilość wartości o jakie głos musi być mocniejszy aby zaświeciła się kolejna dioda.
Linia 15 to wartość po której przekroczeniu zapali się pierwsza dioda.
Linijki 16 i 17 to znowu zmienne do zapisywania danych po przeliczeniach.
Linia 33 służy do obliczania wzmocnienia. Po zmianie liczby 30 zwiększamy lub zmniejszamy czułość potencjometru.
Linijki 34-35 obliczają wartości głośników po wzmocnieniu.
Pętla w liniach 37-40 wyłącza diody na obu expanderach.
Linia 42 i 53 oblicza wartość, do której, po dodaniu wzmocnienia otrzymamy wartość początkową.
Pętla w liniach 44-50 zapala diody pierwszego expandera.
Pętla w liniach 55-62 Robi to samo tylko z diodami drugiego expandera.
POKAZ
U mnie działa wyśmienicie tyle ,że gdzieś zawieruszyłem mój 2 ekspander.
https://www.youtube.com/watch?v=QYHDZGrjU2g
Na zakończenie powiem (a raczej napiszę), że gdybym popełnił jakiś błąd, to wskazanie mi go w komentarzu będzie mile widziane.
INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(