Jak zrobić prosty system alarmowy Arduino

  • Michael Fisher
  • 0
  • 3133
  • 363
Reklama

Wykryj ruch, a następnie przestraszyć intruza za pomocą wysokich dźwięków alarmowych i migających świateł. Czy to brzmi zabawnie? Oczywiście, że tak. Taki jest cel dzisiejszego projektu Arduino, odpowiedni dla początkujących. W miarę pisania będziemy pisać od zera i testować, więc mamy nadzieję, że zorientujesz się, jak to wszystko się robi, zamiast instalować coś, co już stworzyłem.

Oświadczenie: to nie ochroni twojego domu. To moc zrób jednak swojej siostrze paskudny szok, gdy zakradnie się do twojego pokoju.

Będziesz potrzebował:

  • Arduino
  • Ultradźwiękowy “świst” czujnik, używam HC-SR04 A PIR byłby lepszy, ale te są drogie. Czujnik ping można ukryć w drzwiach i nadal wykonywać tę samą podstawową pracę, a kosztuje on tylko 5 USD
  • Brzęczyk piezoelektryczny
  • Taśma LED, z tym samym okablowaniem, z którego korzystaliśmy w tym projekcie Zbuduj własne dynamiczne oświetlenie otoczenia dla centrum medialnego Zbuduj własne dynamiczne oświetlenie otoczenia dla centrum medialnego Jeśli oglądasz dużo filmów na swoim komputerze lub centrum multimedialnym, „ jestem pewien, że stanąłeś przed dylematem dotyczącym oświetlenia; czy całkowicie wyłączasz wszystkie światła? Czy utrzymujesz je w pełnej krasie? Lub… .

Podczas podłączania tego projektu nie usuwaj wszystkiego za każdym razem - po prostu buduj na ostatnim bloku. Zanim dotrzesz na miejsce “Kodowanie systemu alarmowego” sekcji, powinieneś mieć podłączone wszystkie bity i kawałki, wyglądające mniej więcej tak:

Migające światła

Skorzystaj ze schematu okablowania z tego projektu Zbuduj własne dynamiczne oświetlenie otoczenia dla centrum multimedialnego Zbuduj własne dynamiczne oświetlenie otoczenia dla centrum multimedialnego Jeśli oglądasz dużo filmów na swoim komputerze lub centrum multimedialnym, jestem pewien, że spotkałeś się z dylemat oświetleniowy; czy całkowicie wyłączasz wszystkie światła? Czy utrzymujesz je w pełnej krasie? Lub… aby podłączyć pasek LED; nie zmieniaj pinów, ponieważ potrzebujemy wyjścia PWM. Użyj tego kodu, aby szybko przetestować swoje okablowanie. Jeśli wszystko pójdzie dobrze, powinieneś mieć to:

Czujnik odległości

W module SR04 znajdziesz 4 piny. VCC i GND przejdź odpowiednio do szyny + 5 V i uziemienia; WYMUSKANY to pin używany do wysyłania sygnału sonaru, umieść go na pin 6; ECHO służy do odczytania sygnału z powrotem (a zatem do obliczenia odległości) - ustaw to na 7.

Aby wszystko było niewiarygodnie proste, istnieje biblioteka o nazwie NewPing. Pobierz i umieść w swoim Arduino Biblioteka folder i zrestartuj IDE przed kontynuowaniem. Przetestuj za pomocą tego kodu; otwórz monitor szeregowy i upewnij się, że prędkość jest ustawiona na 115200 bodów. Przy odrobinie szczęścia powinieneś zobaczyć niektóre pomiary odległości przesyłane z dość dużą prędkością. Możesz znaleźć wariancję 1 lub 2 centymetry, ale to dobrze. Spróbuj przesunąć rękę przed czujnikiem, przesuwając go w górę i w dół, aby obserwować zmieniające się odczyty.

Kod powinien być zrozumiały. Na początku jest kilka deklaracji odpowiednich pinów, w tym maksymalna odległość - może się różnić w zależności od dokładnego czujnika, ale o ile jesteś w stanie uzyskać dokładny odczyt mniejszy niż 1 metr, powinieneś być w porządku.

W pętli tej aplikacji testowej używamy świst() funkcja, która wysyła sygnał ping sonaru, zwracając wartość w milisekundach czasu, jaki upłynął do zwrócenia wartości. Aby to zrozumieć, używamy wbudowanych bibliotek NewPing US_ROUNDTRIP_CM, który określa, ile mikrosekund potrzeba na przebycie jednego centymetra. Istnieje również 50 ms opóźnienie między pingami, aby uniknąć przeciążenia czujnika.

Alarm piezo

Czujnik kryształu piezo to prosty i tani brzęczyk, a my możemy użyć styku 3 PWM, aby uzyskać różne tony. Podłącz jeden przewód do styku 3, jeden do szyny uziemiającej - nie ma znaczenia, który.

Użyj tego kodu do przetestowania.

Jedynym sposobem na zabicie dość nieznośnego i głośnego alarmu jest wyciągnięcie wtyczek. Kod jest trochę skomplikowany do wyjaśnienia, ale wymaga użycia fal sinusoidalnych do wygenerowania charakterystycznego dźwięku. Dostosuj liczby, aby grać różnymi tonami.

Kodowanie systemu alarmowego

Teraz, gdy mamy już wszystkie elementy tej układanki, połączmy je razem.

Śmiało i zrób nowy szkic o nazwie Alarm. Zacznij od połączenia wszystkich zmiennych i definicji pinów, które mamy w przykładach testowych do tej pory.

#include // Wybierz, które piny obsługujące PWM mają zostać użyte. # zdefiniować RED_PIN 10 # zdefiniować ZIELONY_PIN 11 # zdefiniować NIEBIESKI_PIN 9 # zdefiniować TRIGGER_PIN 6 // Pin Arduino przywiązany do szpilki wyzwalającej na czujniku ultradźwiękowym. # zdefiniować ECHO_PIN 7 // Pin Arduino związany z pinem echa na czujniku ultradźwiękowym. # zdefiniować MAX_DISTANCE 100 // Maksymalna odległość, dla której chcemy pingować (w centymetrach). # zdefiniować ALARM 3 float sinVal; int toneVal; 

Zacznij od napisania podstawowego Ustawiać() funkcja - na razie zajmiemy się tylko światłami. Dodałem 5 sekundowe opóźnienie przed uruchomieniem głównej pętli, aby dać nam trochę czasu na zejście z drogi w razie potrzeby.

void setup () // set pinModes dla paska RGB pinMode (RED_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (GREEN_PIN, OUTPUT); // reset świateł analogWrite (RED_PIN, 0); analogWrite (BLUE_PIN, 0); analogWrite (RED_PIN, 0); opóźnienie (5000); 

Użyjmy funkcji pomocnika, która pozwala nam szybko napisać jedną wartość RGB na światło.

// funkcja pomocnicza umożliwiająca nam wysłanie koloru w jednym poleceniu void color (unsigned char red, unsigned char green, unsigned char blue) // funkcja generująca kolory analogWrite (RED_PIN, czerwony); analogWrite (BLUE_PIN, niebieski); analogWrite (GREEN_PIN, zielony); 

Wreszcie, nasza pętla na razie będzie polegać na prostym kolorowym błysku między czerwonym a żółtym (lub, cokolwiek chcesz, aby był twój alarm - po prostu zmień wartości RGB).

void loop () color (255,0,0); // czerwone opóźnienie (100); kolor (255,255,0); // żółte opóźnienie (100); 

Prześlij i przetestuj, aby upewnić się, że jesteś na dobrej drodze.

Teraz zintegrujmy czujnik odległości, aby wyzwalał te światła tylko wtedy, gdy coś znajdzie się wewnątrz, powiedzmy, 50 cm (tylko mniej niż szerokość ościeżnicy). Zdefiniowaliśmy już odpowiednie szpilki i zaimportowaliśmy bibliotekę, więc przed twoją Ustawiać() funkcja dodaj następujący wiersz, aby go utworzyć:

Sonar NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Nowa konfiguracja pinów i maksymalna odległość. 

Poniżej dodaj zmienną, aby zapisać stan wyzwalanego alarmu lub nie, domyślnie domyślnie false.

boolean wyzwolony = false; 

Dodaj linię do Ustawiać() funkcja, dzięki czemu możemy monitorować dane wyjściowe w trybie szeregowym i debugowania.

Serial.begin (115200); // Otwórz monitor szeregowy przy 115200 bodów, aby zobaczyć wyniki ping. 

Następnie zmień nazwę bieżącej pętli na alarm() - tak się nazywa, jeśli zadziałał alarm.

void alarm () color (255,0,0); // czerwone opóźnienie (100); kolor (255,255,0); // żółte opóźnienie (100); 

Teraz utwórz nowy pętla() funkcja, w której pobieramy nowy ping, odczytujemy wyniki i uruchamiamy alarm, jeśli coś zostanie wykryte w zasięgu miernika.

void loop () if (triggered == true) alarm ();  else delay (50); // Poczekaj 50 ms między pingami (około 20 pingów / s). 29ms powinno być najkrótszym opóźnieniem między pingami. unsigned int uS = sonar.ping (); // Wyślij ping, uzyskaj czas ping w mikrosekundach (USA). unsigned int distance = uS / US_ROUNDTRIP_CM; Serial.println (odległość); if (odległość < 100) triggered = true;    

Pozwól mi krótko wyjaśnić kod:

  • Zacznij od sprawdzenia, czy alarm został uruchomiony, a jeśli tak, uruchom funkcję alarmu (w tej chwili tylko migają światła).
  • Jeśli jeszcze nie został wyzwolony, uzyskaj bieżący odczyt z czujnika.
  • Jeśli czujnik odczytuje <100 cm, something has padded the beam (adjust this value if it's triggering too early for you, obviously).

Wypróbuj teraz, zanim dodamy denerwujący brzęczyk piezoelektryczny.

Pracujący? Świetny. Teraz dodajmy ten brzęczyk z powrotem. Dodaj pinMode do Ustawiać() rutyna.

pinMode (ALARM, WYJŚCIE); 

Następnie dodaj pętlę brzęczyka piezoelektrycznego do funkcji alarm ():

dla (int x = 0; x<180; x++)  // convert degrees to radians then obtain sin value sinVal = (sin(x*(3.1412/180))); // generate a frequency from the sin value toneVal = 2000+(int(sinVal*1000)); tone(ALARM, toneVal);  

Jeśli spróbujesz skompilować w tym momencie, napotkasz błąd - celowo zostawiłem to, abyś mógł zobaczyć niektóre typowe problemy. W tym przypadku zarówno NewPing, jak i standardowa biblioteka tonów używają tych samych przerwań - są one w zasadzie sprzeczne i nie można wiele zrobić, aby to naprawić. o jej.

Bez obaw. Jest to powszechny problem, a ktoś ma już rozwiązanie - pobierz i dodaj ten NewTone do swojego folderu Arduino Libraries. Dostosuj początek programu, aby uwzględnić:

#zawierać  

I dostosuj linię:

 ton (ALARM, toneVal); 

do

 NewTone (ALARM, toneVal); 

zamiast.

to jest to! Ustaw alarm w drzwiach sypialni na następny nieszczęsny niedoszły włamywacz.

Lub głupkowaty pies, który wydawał się całkowicie niezrażony alarmem.

Masz problem z kodem? Oto pełna aplikacja. Jeśli występują przypadkowe błędy, spróbuj je wkleić poniżej, a zobaczę, czy mogę pomóc.

Zdjęcie: Alarm przeciwpożarowy za pośrednictwem Flickr




Jeszcze bez komentarzy