Pew pew! Jak zbudować wieżyczkę laserową z Arduino

  • Lesley Fowler
  • 0
  • 3895
  • 1101
Reklama

Jesteś znudzony? Równie dobrze może zbudować wieżę laserową. Wiesz - taki, który idzie pew pew, strzela czerwoną wiązką w wielu różnych kierunkach, a może nawet wrzucić maszynę do dymu? Tak, jeden z nich.

Czego będziesz potrzebować

  • Arduino
  • 2 serwa
  • Moduł laserowy, taki jak jeden z tego zestawu czujników
  • Brzęczyk piezoelektryczny lub inne małe urządzenie wyjściowe
  • Metalowe druty i opaski kablowe do mocowania
  • Długie kable skokowe żeńskie-> męskie plus kable zwykłe

Opcjonalnie potrzebna jest maszyna do dymu - laser ma dość niską moc, więc nie będziesz w stanie zobaczyć wiązki bez dymu nawet w ciemnym pokoju.

Plan kompilacji

Podstawową ideą wieży jest umieszczenie modułu laserowego na jednym serwie, aby zapewnić obrót poziomy; następnie zamontuj ten pakiet na innym serwomechanizmie ustawionym pod kątem 90 stopni, aby zapewnić ruch pionowy. Mamy piezo do zapewnienia pew pew efekty dźwiękowe, a dla pewności wrzucam maszynę do dymu.

Testowanie serwa

W zależności od serwomechanizmu przewody mogą być w różnych kolorach, ale ogólnie:

  • Czerwony to przewód dodatni, a na obu moich serwosilnikach było to centrum trzech - do podłączenia do szyny + 5 V..
  • Brązowy lub czarny to minus, który należy podłączyć do GND na Arduino.
  • Biały lub pomarańczowy to przewód sygnałowy, który należy podłączyć do styku cyfrowego we / wy obsługującego PWM (9 i 10 w pokazie poniżej).

Po podłączeniu dwóch serwomechanizmów prześlij następujący przykładowy kod. Nazwałem jedno serwo “hori” do kontrolowania ruchu poziomego i innych “zielony”. Każdy powinien wykonać pełny zakres zamiatania ruchu (w moim przypadku około 60 stopni).

#include Servo vert, hori; // utwórz obiekt serwo do sterowania serwem // można utworzyć maksymalnie osiem obiektów serwo int pos = 0; // zmienna do przechowywania pozycji serwomechanizmu void setup () hori.attach (9); vert.attach (10); // dołącza serwomechanizm na pinie 9,10 do obiektów serwomechanizmu vert.write (0); hori.write (0);  void loop () for (pos = 0; pos = 1; pos- = 10) // cofa się od 180 stopni do 0 stopni vert.write (pos); // każ serwowi przejść do pozycji w zmiennej 'pos' hori.write (pos); opóźnienie (100); // czeka 100ms, aż serwo osiągnie pozycję 

Wszystko dobrze? W takim razie przejdźmy dalej.

Testowanie lasera i pew pew Dźwięk

Moduł laserowy jest jak dioda LED, ale ma wbudowany rezystor, dzięki czemu możemy podłączyć go bezpośrednio do cyfrowego wejścia / wyjścia - bardzo proste. Jeśli używasz tego samego modułu laserowego co ja, “-” idzie do GND, S. idzie do pinu 12. Zmodyfikuj przykładowy kod powyżej, aby pin 12 był wyjściem:

int laser = 12; pinMode (laser, WYJŚCIE); 

Następnie mrugaj i włączaj i wyłączaj każdą pętlę za pomocą standardowego digitalWrite () metoda.

Po prostu użyjemy PWM do napędzania brzęczyka piezo na komfortowym poziomie dźwięku - możesz eksperymentować z użyciem biblioteki dźwięków, jeśli chcesz, ale wystarczy mi prosty hałas. Podłącz czarny przewód do uziemienia, a czerwony przewód do styku 11. Zdefiniuj swój brzęczyk na odpowiednim pinie, ustaw tryb wyjścia i aktywuj za pomocą analogWrite (brzęczyk, 100) (lub dowolny numer, do 254); i analogWrite (brzęczyk, 0) wyłączyć.

Pełny kod próbki zmodyfikowany w celu zamiatania dwóch serwomechanizmów, aktywacji lasera i odtwarzania irytującego dźwięku można znaleźć tutaj.

Wszystkie komponenty powinny działać - teraz musimy to wszystko połączyć.

Tworzenie wieży

Za pomocą opasek kablowych przymocuj jedno serwo do drugiego; tak naprawdę nie ma znaczenia, po prostu upewnij się, że jeden będzie poruszał się w poziomie, a drugi w pionie. Możesz wyciągnąć łopaty wirnika i ponownie osadzić podczas testowania, jeśli kąt nie jest prawidłowy.

Użyj sztywnego drutu do modelowania, aby przymocować moduł lasera do ostrza drugiego serwomechanizmu:

Na koniec przymocowałem całość do nogi biurka za pomocą jeszcze więcej wiązek kablowych i odrobiny złomu.

Programowanie wieży

Nie wiem o tobie, ale mój pomysł na wieżyczkę laserową pochodzi z niezliczonej liczby filmów science fiction i odcinków gwiezdnych wędrówek. Niezmiennie ktoś minie wieżyczkę i niewiele pew pew strzały nadlatują rozlegle, zawsze milisekundy zbyt wolno, aby nasz bohater nie został trafiony. Właśnie to próbuję powtórzyć, ale możesz dostosować główną rutynę, aby dopasować ją do Twojego pomysłu na to, co powinna zrobić wieża.

Oto pseudo kod, którego użyłem w głównej pętli:

  • Losuj czas między seriami i czas między poszczególnymi strzałami.
  • Losuj pozycję początkową i końcową dla każdego serwa, vert i hori.
  • Losuj liczbę zdjęć do zrobienia.
  • Oblicz liczbę stopni zmiany po każdym strzale jako różnicę między pozycją początkową i końcową podzieloną przez liczbę strzałów.
  • Przenieś serwa na pozycje początkowe i poczekaj chwilę, aż się tam dostaną (100ms)
  • Pętla, aż zostaną wykonane wszystkie strzały, za każdym razem przesuwając serwo trochę zgodnie z wcześniejszymi obliczeniami; ruszaj się i strzelaj, ruszaj się i strzelaj.
  • Powtarzać.

Dodałem także osobny ogień() metoda na trochę lepszą strukturę kodu. Dostosuj zakresy wszystkich losowy() funkcje przyspieszające lub zwalniające każdy parametr; lub zwiększ liczbę zdjęć, aby uzyskać klimat klubu tanecznego. Przewiń w dół, aby zobaczyć wideo z kodem w akcji!

#include Servo vert, hori; // utwórz obiekt serwo, aby kontrolować serwo int pos = 0; // zmienna do przechowywania pozycji serwa int laser = 12; int brzęczyk = 11; void setup () hori.attach (9); vert.attach (10); // dołącza serwomechanizm na pinie 9 do obiektu serwomechanizmu pinMode (laser, WYJŚCIE); pinMode (brzęczyk, WYJŚCIE);  void loop () int timeBetweenBursts = random (200,1000); int timeBetweenShots = losowo (50 200); int vertStart = random (1,180); int vertEnd = random (1,180); int horiStart = losowy (1,180); int horiEnd = random (1,180); int numShots = random (5,20); int vertChange = (vertEnd - vertStart) / numShots; // ile przesunąć osi pionowej o każdy strzał int horiChange = (horiEnd - horiStart) / numShots; vert.write (vertStart); // pozwól mu najpierw zająć pozycję początkową, poczekaj chwilę hori.write (horiStart); opóźnienie (100); for (int shot = 0; shot

W akcji

Nie sądzę, aby ta mała zabawka miała praktyczne zastosowanie, ale jest to świetna zabawa i istnieje wiele zmiennych, które można dostosować, aby uzyskać pożądany efekt. Być może przyda się w domowym filmie LEGO?




Jeszcze bez komentarzy

O nowoczesnej technologii, prostej i niedrogiej.
Twój przewodnik w świecie nowoczesnych technologii. Dowiedz się, jak korzystać z technologii i gadżetów, które nas otaczają każdego dnia i dowiedz się, jak odkrywać ciekawe rzeczy w Internecie.