Spisu treści:
- Krok 1: Ale… Jak?
- Krok 2: Nauka wyzwalania aparatu
- Krok 3: Sposoby wyzwalania
- Krok 4: Pisanie kodu wyzwalania
- Krok 5: Interwał klas{};
- Krok 6: Manipulowanie interwałem przez Arduino
- Krok 7: Wyświetlanie interwału
- Krok 8: Składanie wszystkiego razem
- Krok 9: Dodanie jednej ostatniej rzeczy
- Krok 10: Powstrzymywanie bałaganu
- Krok 11: Czujniki
- Krok 12: Poweeeeeer
- Krok 13: Załącznik… Kinda
- Krok 14: Fin
Wideo: Pimp My Cam: 14 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:34
Oto skąd pochodzi ten projekt.
Jakiś czas temu myślałem o kręceniu timelapsów. "Jak?" Zapytałem siebie? Pierwsza odpowiedź brzmiała: „No cóż… po prostu coś sfilmujesz, przyspieszysz i to wszystko”. Ale czy to naprawdę takie proste? Po pierwsze, chcę użyć do tego lustrzanki cyfrowej, a mój Nikon D3100 ma 10-minutowy limit czasu na kręcenie wideo. Po drugie, nawet gdybym miał kamerę bez limitu czasowego na kręcenie wideo, co jeśli chcę zrobić naprawdę długi timelapse, na przykład 12 godzin? Robię 12 godzinny film 1080p. Wątpię, czy bateria wytrzyma tak długo i nie jest to zbyt praktyczne, prawda? OK, przekraczam „pomysł na film”. No to są zdjęcia. Robienie zdjęć w aparacie w określonych odstępach czasu i kończące się setkami zdjęć, które następnie przetwarzam w oprogramowaniu, aby zrobić wideo.. ?
Wydawało się, że to dobry pomysł, więc postanowiłem spróbować. Skończyło się na tym, że chciałem stworzyć urządzenie, do którego mógłbym wprowadzić okres czasu i na podstawie tego okresu stale wyzwalałoby mój aparat. A skoro już przy tym jesteśmy, dlaczego nie dodać innych rzeczy, takich jak wyzwalacz ruchu i tak dalej?
Krok 1: Ale… Jak?
JAK? to nasze następne pytanie, na które brakuje odpowiedzi. Ze względu na taktowanie, wyzwalanie, czujniki itp. nie będzie zaskoczeniem, że jako pierwsze przyszło mi do głowy oczywiście Arduino. W porządku, ale nadal musimy nauczyć się wyzwalać migawkę w naszym aparacie. Hm.. serwo przyklejone na gorąco do korpusu aparatu? Absolutnie nie, chcemy, aby było to ciche i wydajne energetycznie. Energooszczędny - dlaczego? Ponieważ chcę, aby był przenośny i wkładał do niego baterię, nie będę za każdym razem zbliżał się do wtyczki zasilania. Więc jak to wywołać… to właściwie całkiem proste.
Nikon już wiedział, że będziesz chciał pilota i inne akcesoria i powiedzieli „no dobrze, damy im to wszystko, ale zrobimy specjalny port, abyśmy mogli więcej zarobić na tych akcesoriach”, szkoda Nikon. Ten port nazywa się (w moim przypadku) MC-DC2, a najtańszym sposobem na zdobycie go jest kupienie zdalnego spustu migawki na eBayu za 2-3 $ i użycie kabla.
*Niektóre inne aparaty, takie jak Canon, mają proste gniazdo słuchawkowe 3,5 mm przeznaczone do tego samego użytku, dzięki czemu można użyć kabla ze starych głośników/słuchawek.
Krok 2: Nauka wyzwalania aparatu
W każdym razie, oto umowa, port będzie miał 3 połączenia, które będą nas interesować (uziemienie, ostrość i migawka), a ty będziesz miał te na końcu kabla nowo zakupionej zdalnej migawki, którą właśnie zniszczyłeś. Te trzy połączenia są dla nas ważne, ponieważ jeśli skrócimy Ground i Focus, kamera ustawi ostrość tak, jak naciskasz przycisk ostrości, a następnie, gdy to połączenie pozostanie, możesz zewrzeć Ground i Shutter, a kamera zrobi zdjęcie tak, jakbyś nacisnął spust migawki w aparacie.
Możesz to przetestować, dosłownie zwierając przewody pod napięciem na końcu kabla, aby zidentyfikować, który przewód jest który. Gdy to zrobisz, w celu łatwiejszej identyfikacji, pokolorujemy je w następujący sposób:
Ziemia = CZARNY; Ostrość = BIAŁY; Migawka = CZERWONA.
W porządku, teraz musimy nauczyć Arduino, aby robił to za nas.
Krok 3: Sposoby wyzwalania
Najprostszą rzeczą, jaką możemy powiedzieć Arduino, aby wysłała do świata zewnętrznego, jest cyfrowy sygnał wyjściowy. Sygnał ten może być WYSOKI(logiczne '1') lub NISKI(logiczne '0'), stąd nazwa „cyfrowy” lub po przeliczeniu na jego podstawowe znaczenie: 5V dla logicznego WYSOKIego i 0V dla logicznego NISKIEGO.
Co mamy zrobić z tymi sygnałami cyfrowymi? Nie możemy po prostu podłączyć ich do aparatu i oczekiwać, że aparat będzie wiedział, czego chcemy. Jak widzieliśmy, musimy zewrzeć połączenia w kamerze, aby zareagowała, więc musimy użyć cyfrowych sygnałów Arduino do sterowania niektórymi komponentami, które mogą zwierać ich zaciski w zależności od tych sygnałów elektrycznych, które do niej wysyłamy. *Sposób, w jaki to opisałem, możesz pomyśleć „Ach, przekaźniki!” ale nie nie. Przekaźnik załatwiłby sprawę, ale mamy do czynienia z tak małymi prądami, że bez problemu możemy wykorzystać czarną magię półprzewodników.
Pierwszym elementem, który wypróbuję, jest transoptor. Widziałem, jak najczęściej je do tego zaimplementowano i jest to prawdopodobnie najlepsze rozwiązanie. Transoptor to element elektryczny, za pomocą którego sterujesz obwodem wyjściowym, podczas gdy obwód wejściowy jest od niego całkowicie odizolowany. Osiąga się to poprzez przesyłanie informacji za pomocą światła, obwód wejściowy zapala diodę LED, a fototranzystor na wyjściu odpowiednio się przełącza.
Więc użyjemy transoptora w ten sposób: mówimy naszemu Arduino, aby wysłał cyfrowy HIGH na jeden, jeśli jest to cyfrowy pin, ten sygnał jest praktycznie 5V, który będzie napędzał diodę LED wewnątrz transoptora, a fototranzystor w nim będzie "zwarty" jest to zaciski wyjściowe, gdy wykryje to światło i odwrotnie, "odłączy" swoje zaciski, ponieważ dioda LED nie świeci, gdy wysyłamy cyfrowe LOW przez Arduino.
W praktyce oznacza to: jeden z pinów cyfrowych Arduino jest podłączony do pinu ANODY transoptora, GND Arduino jest podłączony do KATODY, GND kamery jest podłączony do EMITERA, a FOCUS (lub SHUTTER) do KOLEKTORA. Zapoznaj się z arkuszem danych transoptora, którego używasz, aby znaleźć te piny na swoim. Używam 4N35, więc możesz ślepo podążać za moim schematem, jeśli naprawdę nie obchodzi cię, co dzieje się wewnątrz transoptora. Nie trzeba dodawać, że będziemy potrzebować dwóch z nich, ponieważ musimy kontrolować zarówno FOCUS, jak i SHUTTER aparatu.
Skoro widzieliśmy, jak to działa, z fototranzystorem na wyjściu, dlaczego nie wypróbować tego wyłącznie z prostym tranzystorem NPN. Tym razem doprowadzimy sygnał cyfrowy bezpośrednio (przez rezystor) do bazy tranzystora i podłączymy GND kamery i Arduino do emitera, a ostrość/migawkę kamery do kolektora tranzystora.
Ponownie, będziemy potrzebować dwóch z nich, ponieważ kontrolujemy dwa sygnały. Używam BC547B i możesz w zasadzie użyć do tego dowolnego NPN, ponieważ prąd, który kontrolujemy, to pojedynczy miliamper.
Oba te elementy sprawdzą się, ale wybór transoptora jest chyba lepszym pomysłem, ponieważ jest bezpieczniejszy. Wybieraj tranzystory tylko wtedy, gdy wiesz, co robisz.
Krok 4: Pisanie kodu wyzwalania
Jak powiedzieliśmy wcześniej, do sygnalizacji użyjemy cyfrowych pinów Arduino. Arduino może ich używać zarówno do odczytywania z niego danych, jak i do zapisywania do niego, więc pierwszą rzeczą, którą musimy zrobić, jest określenie w funkcji setup(), że użyjemy dwóch cyfrowych pinów Arduino do wyjścia w następujący sposób:
pinMode (FOCUS_PIN, WYJŚCIE);
pinMode(SHUTTER_PIN, WYJŚCIE);
gdzie FOCUS_PIN i SHUTTER_PIN mogą być zdefiniowane za pomocą "#define NAME value" lub jako int przed funkcją setup(), ponieważ możesz zmienić pin, aby łatwiej było zmienić wartość tylko w jednym miejscu niż cały kod później.
Następną rzeczą, którą zrobimy, jest napisanie funkcji trigger(), która zrobi to właśnie po uruchomieniu. Dołączę tylko zdjęcie z kodem. Wszystko co musisz wiedziećto toże najpierw przytrzymujemy FOCUS_PIN na HIGH przez pewien czas ponieważ musimy poczekaća aparat ustawi ostrość na obiekcie na który go kierujemy a potem tylko przez chwilę(podczas gdy FOCUS_PIN jest nadal HIGH) ustaw SHUTTER_PIN na HIGH tylko po to, by zrobić zdjęcie.
Dołączyłem również możliwość pominięcia ogniskowania, ponieważ nie będzie to potrzebne, jeśli robimy timelapse czegoś, co nie zmienia swojej odległości od aparatu w czasie.
Krok 5: Interwał klas{};
Teraz, gdy mamy już wyzwolenie aparatu, musimy zmienić to w interwałometr, dodając funkcję manipulowania odstępem czasu między dwoma ujęciami. Abyś mógł zobrazować to, co robimy, oto prymitywny kod, który zademonstruje pożądaną przez nas funkcjonalność:
pusta pętla () {
opóźnienie(przedział); cyngiel(); }
Chcę móc zmienić ten interwał z, powiedzmy, 5 sekund aż do może 20-30 minut. I tu jest problem, jeśli chcę zmienić go z 5s na 16s lub cokolwiek pomiędzy, użyję przyrostu o 1s, gdzie dla każdego mojego żądania zwiększenia interwału, interwał będzie zwiększał się o 1s. Świetnie, ale co jeśli chcę przejść z 5s do 5min? Zajęłoby mi to 295 żądań w przyrostach co 1 s, więc oczywiście muszę zwiększyć wartość przyrostu do czegoś większego i muszę zdefiniować, na której dokładnej wartości interwału (próg) zmienić przyrost. Wdrożyłem to:
5s-60s: przyrost 1s; 60s-300s: przyrost 10s; 300s-3600s: przyrost 60s;
ale napisałem tę klasę, aby była regulowana, dzięki czemu można zdefiniować własne progi i przyrosty (wszystko jest skomentowane w pliku.h, abyś wiedział, gdzie zmienić które wartości).
Podany przeze mnie przykład manipulowania interwałem jest oczywiście wykonywany na komputerze PC, teraz musimy go przenieść na Arduino. Cała ta klasa, Interval, jest umieszczona w jednym pliku nagłówkowym, który służy do przechowywania deklaracji i definicji (niezupełnie, ale w tym przykładzie można to zrobić bez szkody) naszej klasy/funkcji. Aby wprowadzić ten plik nagłówkowy do naszego kodu arduino, używamy " #include "Interval.h" " (pliki muszą znajdować się w tym samym katalogu), co zapewnia, że możemy korzystać z funkcji zdefiniowanych w pliku nagłówkowym w naszym głównym kodzie.
Krok 6: Manipulowanie interwałem przez Arduino
Teraz chcemy mieć możliwość zmiany wartości interwału, zwiększania lub zmniejszania jej. To dwie rzeczy, więc użyjemy dwóch sygnałów cyfrowych, które będą sterowane dwoma przyciskami. Będziemy wielokrotnie odczytywać wartości na pinach cyfrowych, które przypisaliśmy do przycisków i przetwarzać te wartości do funkcji checkButtons(int, int); co spowoduje zwiększenie interwału po naciśnięciu przycisku „w górę” i zmniejszenie interwału po naciśnięciu przycisku „w dół”. Ponadto, jeśli oba przyciski zostaną naciśnięte, zmieni się wartość zmiennej ostrości, która kontroluje, czy podczas wyzwalania ma być ustawiona ostrość.
Część kodu ((millis() - prevBtnPress) >= debounceTime) jest używana do debouncingu. Sposób, w jaki to napisałem, oznacza, że rejestruję pierwsze naciśnięcie przycisku ze zmienną boolean btnPressed i pamiętam, kiedy to się stało. Następnie czekam przez pewien czas (debounceTime) i jeśli przycisk jest nadal wciśnięty, reaguję. Powoduje również „pauzę” między każdym kolejnym naciśnięciem przycisku, aby uniknąć wielokrotnych naciśnięć, gdy ich nie ma.
I wreszcie, z:
if ((millis() - prevTrigger) / 1000 >= interval.getVal()) {
prevTrigger = mili(); cyngiel(); }
najpierw sprawdzamy, czy czas między ostatnim wyzwoleniem (prevTrigger) a bieżącym czasem (millis()) (wszystko jest dzielone przez 1000, ponieważ jest to w milisekundach, a interwał w sekundach) jest równy lub większy niż interwał chcemy, a jeśli tak, pamiętamy aktualny czas jako ostatni raz, kiedy uruchomiliśmy kamerę, a następnie ją uruchomiliśmy.
Po wykonaniu tych czynności w zasadzie stworzyliśmy interwałometr, ale jeszcze daleko nam do końca. Nadal nie widzimy wartości interwałometru. Jest wyświetlany tylko na monitorze szeregowym i nie będziemy zawsze blisko komputera, więc teraz zaimplementujemy coś, co pokaże nam interwał, gdy go zmienimy.
Krok 7: Wyświetlanie interwału
Tutaj przedstawiamy wyświetlacz. Użyłem 4-cyfrowego modułu, który jest sterowany przez TM1637, ponieważ muszę go używać tylko do wyświetlania czasu i nic więcej. Najłatwiejszym sposobem wykorzystania tych modułów stworzonych dla Arduino jest wykorzystanie już przygotowanych dla nich bibliotek. Na stronie Arduino znajduje się strona opisująca układ TM1673 oraz link do sugerowanej biblioteki. Pobrałem tę bibliotekę i są dwa sposoby wprowadzenia tych bibliotek do Arduino IDE:
- z oprogramowania Arduino przejdź do Sketch>Include Library>Dodaj bibliotekę. ZIP i znajdź właśnie pobrany plik.zip
- możesz zrobić to, co Arduino robi ręcznie i po prostu rozpakować bibliotekę w folderze, w którym Arduino przechowuje biblioteki, w systemie Windows: C:\Users\Username\Documents\Arduino\libraries\.
Po dołączeniu biblioteki powinieneś przeczytać plik „Przeczytaj mnie”, w którym znajdziesz podsumowanie działania różnych funkcji. Czasami to nie wystarczy, więc będziesz chciał zajrzeć nieco głębiej i zbadać pliki nagłówkowe, w których możesz zobaczyć, w jaki sposób funkcje są zaimplementowane i jakie są wymagane jako argumenty wejściowe. I oczywiście najlepszym sposobem, aby poczuć, do czego jest zdolna biblioteka, jest zwykle przykład, który można uruchomić z oprogramowania Arduino za pomocą Plik>Przykłady>Nazwa biblioteki>Nazwaprzykładu. Ta biblioteka oferuje jeden przykład, który polecam uruchomić na ekranie, aby sprawdzić, czy ekran działa poprawnie, a następnie zachęcam do dostosowania kodu, który widzisz w przykładzie, i zobaczenia na własne oczy, co robi każda funkcja i jak reaguje wyświetlacz to. Zrobiłem tak i oto, co wymyśliłem:
używa 4 liczb całkowitych bez znaku po 8 bitów na każdą cyfrę (0bB7, B6, B5, B4, B3, B2, B1, B0). I każdy z tych bitów B6-B0 jest używany dla każdego segmentu pewnej cyfry i jeśli bit jest 1, to segment przez niego kontrolowany jest podświetlony. Te liczby całkowite są przechowywane w tablicy o nazwie data. Ustawienie tych bitów na wyświetlaczu jest realizowane przez display.setSegments(data); lub możesz naturalnie uzyskać dostęp do dowolnej cyfry i ustawić ją ręcznie (data[0] = 0b01111001) lub możesz użyć funkcji encodeDigit(int); i przekonwertuj cyfrę, którą wysyłasz, na odpowiednie bity (data[0] = display.encodeDigit(3));. Bit B7 jest używany tylko przez drugą cyfrę lub dane[1] do aktywacji dwukropka.
Ponieważ napisałem funkcje w klasie INTERVAL, dzięki którym mogę uzyskać określone cyfry interwału w postaci M1M0:S1S0, gdzie M oznacza minuty, a S sekundy, to naturalne, że używam funkcji encodeDigitFunction(int); do wyświetlania interwału tak:
displayInterval(){
data[0] = display.encodeDigit(interval.getM1()); dane[1] = 0x80 | display.encodeDigit(interwał.getM0()); dane[2] = display.encodeDigit(interval.getS1()); dane[3] = display.encodeDigit(interval.getS0()); display.setSegments(dane); }
Teraz za każdym razem, gdy potrzebuję wyświetlić Interval na wyświetlaczu, mogę wywołać funkcję displayInterval().
*Zwróć uwagę na „ 0x80 | …” w danych[1]. Służy do zapewnienia, że bit B7 danych[1] ma zawsze wartość 1, więc dwukropek jest podświetlony.
Ostatnia rzecz dotycząca wyświetlacza, zużycie energii. Może nie ma to większego znaczenia, ponieważ nie będziemy go włączać przez długi czas, ale jeśli chcesz, aby był jeszcze bardziej przyjazny dla baterii, rozważ zmniejszenie jasności wyświetlacza, ponieważ pobiera on 3 razy więcej prądu przy maksymalnej jasności niż na najniższym.
Krok 8: Składanie wszystkiego razem
Wiemy, jak uruchomić kamerę, jak manipulować interwałem i jak wyświetlić ten sam interwał na wyświetlaczu. Teraz wystarczy połączyć wszystkie te rzeczy razem. Oczywiście zaczniemy od funkcji loop(). Będziemy stale sprawdzać naciśnięcia przycisków i odpowiednio reagować za pomocą checkButtons(int, int) oraz odpowiednio zmieniać interwał i wyświetlać zmieniony interwał. Również w loop() będziemy stale sprawdzać, czy minęło wystarczająco dużo czasu od ostatniego wyzwolenia lub naciśnięcia przycisku i w razie potrzeby wywołać funkcję trigger(). W trosce o mniejsze zużycie energii po pewnym czasie wyłączymy wyświetlacz.
Dodałem dwukolorową diodę LED (czerwoną i zieloną, wspólną katodę), która zaświeci się na zielono podczas wyzwalania () i zaświeci się na czerwono wraz z wyświetlaczem, jeśli ogniskowanie jest włączone i pozostanie wyłączone, jeśli ogniskowanie jest włączone wyłączony.
Ponadto będziemy migrować do jeszcze mniejszego Arduino, Pro Mini.
Krok 9: Dodanie jednej ostatniej rzeczy
Jak dotąd… stworzyliśmy tylko interwałometr. Przydatne, ale możemy zrobić to lepiej.
Oto, co miałem na myśli: interwałometr domyślnie robi to, Z WYJĄTKIEM, gdy podłączamy jakiś zewnętrzny przełącznik/czujnik, który następnie zatrzymuje interwałometr i reaguje na wejście przełącznika/czujnika. Nazwijmy to czujnikiem, niekoniecznie będzie to czujnik podłączony, ale będę go tak określał.
Po pierwsze, jak rozpoznajemy, że podłączyliśmy czujnik?
Wszystkie czujniki, których użyjemy/wykonamy, będą wymagały trzech przewodów łączących je z arduino (Vcc, GND, Signal). Oznacza to, że możemy użyć gniazda audio 3,5 mm jako gniazda wejściowego czujnika. A jak to rozwiązuje nasz problem? Otóż istnieją typy gniazd 3,5 mm „z przełącznikiem”, które mają szpilki, które są zwierane do pinów złącza, jeśli nie ma w nich męskiego złącza, i rozłączają się, gdy jest obecne złącze. Oznacza to, że mamy informacje na podstawie obecności czujnika. Użyję rezystora pull-down, jak pokazano (cyfrowy pin będzie odczytywał WYSOKI bez czujnika i NISKI z podłączonym czujnikiem) na obrazie lub możesz również podłączyć pin cyfrowy do pinu złącza, które jest normalnie podłączony do ziemi i zdefiniuj ten cyfrowy pin jako INPUT_PULLUP, zadziała w obie strony. Więc teraz musimy poprawić nasz kod, aby robił wszystko, co do tej pory napisaliśmy, tylko wtedy, gdy czujnik nie jest obecny lub gdy cyfrowy pin sprawdzający jest WYSOKI. Ulepszyłem go również tak, aby wyświetlał „SENS” na wyświetlaczu zamiast interwału, który jest bezużyteczny w tym trybie, ale ustawianie ostrości nadal jest dla nas istotne. Zachowamy funkcjonalność naprzemiennego ustawiania ostrości poprzez naciśnięcie obu przycisków i pokazując stan skupienia przez czerwoną diodę LED.
Co właściwie robi czujnik?
Wystarczy wpiąć 5V na pin sygnału, gdy chcemy wyzwolić kamerę. Oznacza to, że będziemy potrzebować kolejnego cyfrowego pinu Arduino sprawdzającego stan tego pinu i gdy zarejestruje HIGH, wystarczy wywołać funkcję trigger() i aparat zrobi zdjęcie. Najprostszym przykładem, którego użyjemy do sprawdzenia, czy to działa, jest prosty przycisk z rezystorem pull-down. Podłącz przycisk między Vcc czujnika a pinem sygnałowym i dodaj rezystor między pinem sygnałowym a GND, w ten sposób pin sygnałowy będzie na GND, gdy przycisk nie zostanie wciśnięty, ponieważ przez rezystor nie płynie prąd i kiedy po naciśnięciu przycisku umieszczamy pin Signal bezpośrednio na HIGH, a Arduino odczytuje to i uruchamia kamerę.
Na tym zakończyliśmy pisanie kodu.
*Chciałbym zwrócić uwagę na pewne problemy, które miałem z używanymi przeze mnie gniazdami audio. Podczas wkładania męskiego gniazda do złącza, GND i jeden z pozostałych dwóch styków czasami zwierały się. Dzieje się to natychmiast i tylko podczas wkładania złącza, ale wciąż jest wystarczająco długo, aby Arduino zarejestrowało zwarcie, aby Arduino po prostu się zrestartowało. Nie zdarza się to często, ale nadal może stanowić zagrożenie i istnieje możliwość zniszczenia Arduino, więc unikaj złącz, których użyłem.
Krok 10: Powstrzymywanie bałaganu
Na zdjęciach widać, że płytka prototypowa robi się bałagan i skończyliśmy, więc musimy przenieść wszystko na płytkę perforowaną/PCB. Zdecydowałem się na PCB, ponieważ myślę, że będę robił ich więcej, aby w ten sposób móc je łatwo odtworzyć.
Użyłem Eagle do zaprojektowania PCB i znalazłem projekty dla wszystkich użytych części. W moim projekcie jest jedna drobna rzecz, której żałuję, że nie zrobiłem, a jest to druciana podkładka dla Vcc wyświetlacza. Widziałem to za późno i nie chciałem zrujnować tego, co wcześniej zaprojektowałem, i poszedłem leniwym sposobem dodawania podkładek drucianych, a później musiałem dodawać przewody do tych połączeń zamiast śladów miedzi, więc pamiętaj, jeśli używasz mojego projektu.
Płytka Arduino i wyświetlacz są połączone z płytką drukowaną za pomocą żeńskich nagłówków pinowych, a nie przylutowane bezpośrednio do płytki drukowanej, z oczywistych powodów. W ten sposób pod wyświetlaczem jest dużo miejsca na inne komponenty dla innych komponentów, takich jak rezystory, tranzystory, a nawet gniazdo audio.
Umieściłem mikroprzyciski, które z założenia powinny być lutowane bezpośrednio, ale można też wykorzystać otwory na żeńskie listwy pinowe i podłączyć przyciski przewodem, jeśli chcesz je zamontować na obudowie, a nie na płytce drukowanej.
Umieścimy również kolejne żeńskie gniazdo audio, aby podłączyć kabel łączący z kamerą. W ten sposób płyta staje się bardziej wszechstronna, ponieważ w ten sposób będziemy mogli łączyć się z innymi kamerami innymi złączami.
Krok 11: Czujniki
Rozważmy sposoby implementacji czujnika.
Tak więc czujnik będzie miał napięcie zasilania 5V i będzie musiał być w stanie zapewnić cyfrowe WYSOKIE na swoim pinie sygnałowym, gdy chcemy wyzwolić kamerę. Pierwsze co przyszło mi do głowy to czujnik ruchu, a konkretnie PIR. Sprzedawane są moduły do Arduino, które mają ten czujnik na sobie i robią dokładnie to, co chcemy. Są zasilane 5 V i mają pin wyjściowy, na który wkładają 5 V, gdy są uruchomione, wystarczy podłączyć jego piny do gniazda audio 3,5 mm i możemy podłączyć bezpośrednio do płytki. Należy jednak zauważyć, że ten czujnik potrzebuje czasu, aby się nagrzać i zacząć działać prawidłowo, więc nie oczekuj, że będzie działał poprawnie, gdy tylko go podłączysz, daj mu trochę czasu, a następnie go ustawi i cokolwiek żywego wejdzie do jego zasięg spowoduje wyzwolenie aparatu.
Ponieważ myślimy w kierunku już wykonanych płytek czujników Arduino, na myśl przychodzi kolejna, dźwięk. Płytki te są zwykle wykonane w taki sposób, że mają jeden pin, który wyprowadza analogową wartość odbieranego dźwięku, a drugi, cyfrowy, który wyprowadza logiczne HIGH, jeśli odbierany dźwięk przekracza pewien poziom. Możemy ustawić ten poziom tak, aby czujnik ignorował nasz głos, ale zarejestrował klaśnięcie. W ten sposób za każdym razem, gdy klaszczesz, uruchamiasz kamerę.
Krok 12: Poweeeeeer
Myślę, że najłatwiej zasilić tę rzecz za pomocą powerbanku, a nie zewnętrznie. Zachowamy funkcjonalność ładowania naszego telefonu lub czegokolwiek i kontrolujemy przepływ prądu do płytki za pomocą przełącznika. Zlokalizujemy piny wyjściowego złącza USB na płytce drukowanej w banku mocy, które są przewodami GND i Vcc(5V) i lutowanymi bezpośrednio na nich, a stamtąd na naszą płytkę.
Krok 13: Załącznik… Kinda
Naprawdę się z tym zmagałem. Kiedy kupiłem pudełko, w którym chciałem umieścić istniejącą płytkę, zdałem sobie sprawę, że nie ma fajnego sposobu na dopasowanie wszystkiego tak, jak chciałem i postanowiłem zaprojektować nową płytkę, tym razem z transoptorami. Chciałem umieścić płytkę bezpośrednio pod tą stroną, na której będę wiercić otwory na pewne elementy, które trzeba zobaczyć/dotknąć. Aby to zadziałało musiałbym przylutować wyświetlacz i Arduino bezpośrednio do płytki, bez gniazd czy nagłówków i tu leży pierwszy problem. To było absolutnie okropne, aby rozwiązywać problemy, ponieważ nie byłem gotowy do lutowania od razu, dopóki nie przetestowałem, że wszystko działa, i nie mogłem naprawdę niczego przetestować, ponieważ nie mogłem tego przylutować i tak dalej. nie rób tego. Problem numero dos, robienie dziur w obudowie. Chyba źle zrobiłem pomiary, bo żaden z otworów w obudowie nie był wyrównany z elementami na płytce i musiałem je powiększyć a przyciski były za wysoko na płytce i zawsze byłyby wciśnięte, gdy wkładałem płytkę na miejsce aaa ponieważ chciałem gniazda audio z boku, musiałem też powiększyć te otwory, aby najpierw dopasować gniazda, a następnie obniżyć płytkę, aby wyświetlacz i przyciski przeszły.. wynik jest okropny.
Trochę uprzyjemniłem okropne dziury, nakładając na górę cienką tekturę, w której wycinałem bardziej sensowne otwory na komponenty i.. nadal jest okropne, ale myślę, że bardziej rzuca się w oczy.
Werdykt, sugeruję, abyś to zrobił kupując komponenty, które montuje się na obudowie, a nie bezpośrednio na płytce drukowanej. W ten sposób masz większą swobodę w rozmieszczaniu komponentów i mniej miejsc, w których można popełniać błędy.
Krok 14: Fin
Skończyłem, ale oto kilka rzeczy, które zrobiłbym inaczej:
Użyj lepszej jakości gniazd audio 3,5 mm. Te, których użyłem, mają tendencję do zwierania zacisków podczas wkładania lub wyciągania gniazda, co powoduje albo zwarcie zasilania, co resetuje Arduino, albo po prostu wytwarza fałszywe wyzwalacze. Powiedziałem to w poprzednim kroku, ale powiem to jeszcze raz. Myślę też, że posiadanie diody sygnalizującej, że coś jest włączone, byłoby przydatne, bo często nie mogę powiedzieć bez wciśnięcia przycisku, ponieważ wyświetlacz się wyłącza. I ostatnia rzecz, funkcja pauzy. Wyobrażam sobie, że jest to przydatne, gdy na przykład podłączasz czujnik PIR, więc ponieważ potrzebuje czasu na rozgrzanie, lub po prostu poruszając nim nie chcesz, aby zadziałał, więc możesz po prostu wszystko wstrzymać, ale możesz też po prostu przekręcić wyłączyć kamerę, więc… nieważne.
Kolejną fajną rzeczą jest zapięcie go na rzep na statywie, ponieważ najprawdopodobniej będzie tam używany.
Nie krępuj się pytać w komentarzach o ten projekt i chciałbym się dowiedzieć, czy go zbudowałeś i jak wyszedł.
Zalecana:
Jak używać pinów GPIO i Avrdude Raspberry Pi do programu Bit-bang-DIMP 2 lub DA PIMP 2: 9 kroków
Jak używać pinów GPIO i Avrdude Raspberry Pi do programu Bit-bang-DIMP 2 lub DA PIMP 2: Są to instrukcje krok po kroku, jak korzystać z Raspberry Pi i darmowego polecenia open-source avrdude do bit-bang -zaprogramuj DIMP 2 lub DA PIMP 2. Zakładam, że znasz swoje Raspberry Pi i wiersz poleceń LINUX. Nie musisz
Interaktywny Minecraft nie wprowadzaj miecza/znaku (ESP32-CAM): 15 kroków (ze zdjęciami)
Interaktywny Minecraft Do Not Enter Sword/Sign (ESP32-CAM): Jest naprawdę kilka powodów, dla których ten projekt powstał:1. Jako autorka wielozadaniowej biblioteki kooperacyjnej TaskScheduler zawsze byłam ciekawa, jak połączyć zalety wielozadaniowości kooperacyjnej z korzyściami wielozadaniowości z wywłaszczeniem
System obudowy ESP32-CAM i kamera drukarki 3D: 10 kroków (ze zdjęciami)
System obudowy ESP32-CAM i kamera drukarki 3D: Szukałem możliwości wymiany aparatu w mojej drukarce 3D na coś małego, prostego i funkcjonalnego… i taniego. Kilka wyszukiwań w Google doprowadziło mnie do modułu ESP32-Cam. Można je znaleźć za mniej niż 10 USD, o wiele mniej i działają naprawdę dobrze
Pierwsze kroki z ESP32 CAM - Przesyłanie strumieniowe wideo za pomocą ESP CAM przez Wifi - Projekt kamery bezpieczeństwa ESP32: 8 kroków
Pierwsze kroki z ESP32 CAM | Przesyłanie strumieniowe wideo za pomocą ESP CAM przez Wifi | Projekt kamery bezpieczeństwa ESP32: Dzisiaj dowiemy się, jak korzystać z tej nowej płyty ESP32 CAM i jak możemy ją zakodować i użyć jako kamery bezpieczeństwa i uzyskać strumieniowe wideo przez Wi-Fi
Pimp Zombie ze świecącymi oczami: 5 kroków (ze zdjęciami)
Pimp Zombie With Glowing Eyes: Dowiedz się, jak dodać diody LED z efektem świecących oczu do istniejącej postaci. W moim przypadku użyłem figurki zombie na Halloween. Jest to całkiem proste i nie wymaga żadnych zaawansowanych umiejętności