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 trakcie pisania będziemy pisać od zera i testować, więc mamy nadzieję, że dowiesz 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 czujnik „ping”, używam HC-SR04 PIR byłby lepszy, ale są one drogie. Czujnik ping można umieścić w ukryciu w drzwiach i nadal wykonywać tę samą podstawową pracę, a to tylko 5 USD
  • Brzęczyk piezoelektryczny
  • Taśma LED, z tym samym okablowaniem, którego użyliśmy z powrotem w tym projekcie Zbuduj własne dynamiczne oświetlenie otoczenia dla centrum multimedialnegoJeś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...
    instagram viewer
    Czytaj więcej
    .

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

gotowe okablowanie

Migające światła

Skorzystaj ze schematu połączeń z tego projektu Zbuduj własne dynamiczne oświetlenie otoczenia dla centrum multimedialnegoJeś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... Czytaj więcej podłączyć pasek LED; nie zmieniaj pinów, ponieważ potrzebujemy wyjścia PWM. Posługiwać się ten kod aby szybko przetestować okablowanie. Jeśli wszystko pójdzie dobrze, powinieneś mieć to:

test led-rgb

Czujnik odległości

W module SR04 znajdziesz 4 piny. VCC i GND przejdź odpowiednio do szyny + 5 V i uziemienia; WYMUSKANY jest 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 na 7.

sr04

Aby wszystko było niewiarygodnie proste, istnieje biblioteka, której możemy użyć, o nazwie NewPing. Pobierz i umieść w swoim Arduino Biblioteka folder i zrestartuj IDE przed kontynuowaniem. Testuj za pomocą ten kod; 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.

ping-output

Kod powinien być zrozumiały. Na początku jest kilka deklaracji odpowiednich pinów, w tym maksymalna odległość - może się to różnić w zależności od dokładny czujnik, który masz, ale tak długo, jak jesteś w stanie dokładnie odczytać mniej 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 tego, ile czasu zajęło zwrócenie 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.

Posługiwać się ten kod testować.

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 do tej pory testowaliśmy w przykładach.

#zawierać  // Wybierz, które piny obsługujące PWM mają zostać użyte. # zdefiniować RED_PIN 10. # zdefiniować ZIELONY_PIN 11. # zdefiniować BLUE_PIN 9 # zdefiniować TRIGGER_PIN 6 // Pin Arduino przywiązany do szpilki spustowej czujnika ultradźwiękowego. # zdefiniować ECHO_PIN 7 // Pin Arduino związany z pinem echa czujnika ultradźwiękowego. # 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 zapisać pojedynczą wartość RGB na światłach.

// funkcja pomocnika umożliwiająca przesłanie koloru jednym poleceniem. void color (unsigned char red, unsigned char green, unsigned char blue) // funkcja generowania kolorów. {analogWrite (RED_PIN, czerwony); analogWrite (BLUE_PIN, niebieski); analogWrite (GREEN_PIN, zielony); }

Na koniec 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 zintegruj czujnik odległości, aby wyzwalał te światła tylko wtedy, gdy coś znajdzie się w powiedzmy 50 cm (tylko mniej niż szerokość ościeżnicy). Zdefiniowaliśmy już odpowiednie szpilki i zaimportowaliśmy bibliotekę, więc przed tobą 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, oczywiście 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). 29 ms powinno być najkrótszym opóźnieniem między pingami. unsigned int uS = sonar.ping (); // Wyślij ping, uzyskaj czas ping w mikrosekundach (uS). unsigned int distance = uS / US_ROUNDTRIP_CM; Serial.println (odległość); if (odległość <100) {wyzwalane = prawda; } } }

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 się nie uruchomił, uzyskaj bieżący odczyt z czujnika.
  • Jeśli czujnik odczytuje <100 cm, coś padło na wiązkę (dostosuj tę wartość, jeśli wyzwala dla ciebie zbyt wcześnie, oczywiście).

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

Pracujący? Wspaniały. 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 ++) {// przelicz stopnie na radiany, a następnie uzyskaj wartość sin sinVal = (sin (x * (3.1412 / 180))); // generuje częstotliwość na podstawie wartości sin ton toneVal = 2000+ (int (sinVal * 1000)); ton (ALARM, toneVal); }

Jeśli spróbujesz skompilować w tym momencie, wystąpi błąd - zostawiłem to celowo, 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 to NewTone do twojego folderu Arduino Libraries. Dostosuj początek programu, aby uwzględnić:

#zawierać 

I dostosuj linię:

 ton (ALARM, toneVal); 

do

 NewTone (ALARM, toneVal); 

zamiast.

Otóż ​​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? Tutaj jest kompletna aplikacja. Jeśli występują przypadkowe błędy, spróbuj je wkleić poniżej, a zobaczę, czy mogę pomóc.

Źródło obrazu: Alarm przeciwpożarowy przez Flickr

James ma licencjat z zakresu sztucznej inteligencji i jest certyfikowany przez CompTIA A + i Network +. Jest głównym programistą MakeUseOf i spędza wolny czas grając w paintball VR i gry planszowe. Buduje komputery od dziecka.