Spisu treści:

Użyj 1 wejścia analogowego dla 6 przycisków dla Arduino: 6 kroków
Użyj 1 wejścia analogowego dla 6 przycisków dla Arduino: 6 kroków

Wideo: Użyj 1 wejścia analogowego dla 6 przycisków dla Arduino: 6 kroków

Wideo: Użyj 1 wejścia analogowego dla 6 przycisków dla Arduino: 6 kroków
Wideo: How to use up to 10 push button switch with 1 Arduino input pin ANPB-V1 2024, Listopad
Anonim
Użyj 1 wejścia analogowego dla 6 przycisków dla Arduino
Użyj 1 wejścia analogowego dla 6 przycisków dla Arduino

Często zastanawiałem się, jak mogę uzyskać więcej wejść cyfrowych dla mojego Arduino. Niedawno przyszło mi do głowy, że powinienem móc użyć jednego z wejść analogowych do wprowadzenia wielu wejść cyfrowych. Przeszukałem szybko i odkryłem, gdzie ludzie mogli to zrobić, ale pozwalało to na naciśnięcie tylko jednego przycisku naraz. Chcę mieć możliwość jednoczesnego naciśnięcia dowolnej kombinacji przycisków. Tak więc z pomocą TINKERCAD CIRCUITS postanowiłem, że tak się stanie.

Dlaczego miałbym chcieć jednoczesnego naciśnięcia przycisków? Jak pokazano w projekcie TinkerCad Circuits, można go wykorzystać do wejść przełączników DIP do wyboru różnych trybów w programie.

Układ, który wymyśliłem, wykorzystuje źródło 5V dostępne z Arduino i wykorzystuje 7 rezystorów i 6 przycisków lub przełączników.

Krok 1: Obwód

Obwód
Obwód

Arduino ma wejścia analogowe, które akceptują wejście od 0V do 5V. To wejście ma rozdzielczość 10 bitów, co oznacza, że sygnał jest dzielony na 2^10 segmentów, czyli 1024 zliczeń. Opierając się na tym, najwięcej, co moglibyśmy kiedykolwiek wprowadzić do wejścia analogowego, jednocześnie pozwalając na jednoczesne naciśnięcie, to 10 przycisków na 1 wejście analogowe. Ale to nie jest idealny świat. W przewodnikach występuje opór, szum ze źródeł zewnętrznych i niedoskonała moc. Aby więc zapewnić sobie dużą elastyczność, zaplanowałem zaprojektowanie tego dla 6 przycisków. Po części wpływ na to miał fakt, że TinkerCAD Circuits miał obiekt przełącznika DIP z 6 przełącznikami, co ułatwiłoby testowanie.

Pierwszym krokiem w moim projekcie było upewnienie się, że każdy przycisk, gdy jest wciskany indywidualnie, dostarcza unikalne napięcie. To wykluczyło, że wszystkie rezystory mają tę samą wartość. Następnym krokiem było to, że wartości rezystancji dodane równolegle nie mogły mieć takiej samej rezystancji jak żadna pojedyncza wartość rezystora. Gdy rezystory są połączone równolegle, wynikową rezystancję można obliczyć jako Rx=1/[(1/R1)+(1/R2)]. Czyli jeśli R1=2000 i R2=1000, Rx=667. Spekulowałem, że podwajając rozmiar każdego rezystora, nie widziałbym takiej samej rezystancji dla żadnej z kombinacji.

Tak więc mój układ do tego momentu miał mieć 6 przełączników, każdy z własnym rezystorem. Ale do zakończenia tego obwodu potrzebny jest jeszcze jeden rezystor.

Ostatni rezystor ma 3 cele. Po pierwsze, działa jako rezystor Pull-Down. Bez rezystora, gdy żaden przycisk nie jest wciśnięty, obwód jest niekompletny. Dzięki temu napięcie na wejściu analogowym Arduino może unosić się do dowolnego potencjału napięcia. Rezystor Pull-Down zasadniczo obniża napięcie do 0 V. Drugim celem jest ograniczenie prądu tego obwodu. Prawo Ohma mówi, że V=IR lub Napięcie = Prąd pomnożony przez Opór. Przy danym źródle napięcia większy rezystor oznacza, że prąd byłby mniejszy. Tak więc, jeśli sygnał 5 V został przyłożony do rezystora 500 omów, największy prąd, jaki moglibyśmy zobaczyć, wynosiłby 0,01 A lub 10 mA. Trzecim celem jest dostarczenie napięcia sygnału. Całkowity prąd płynący przez ostatni rezystor wyniósłby: i=5V / Rtotal, gdzie Rtotal = Rlast + {1/[(1/R1)+(1/R2)+(1/R3)+(1/R4)+ (1/R5)+(1/R6)]}. Należy jednak uwzględnić tylko 1/Rx dla każdego rezystora, który ma wciśnięty odpowiadający mu przycisk. Z całkowitego prądu napięcie dostarczane do wejścia analogowego będzie wynosić i*Rlast lub i*500.

Krok 2: Dowód - Excel

Dowód - Excel
Dowód - Excel

Najszybszym i najłatwiejszym sposobem udowodnienia, że uzyskam unikalne rezystancje, a tym samym unikalne napięcia w tym obwodzie, było skorzystanie z możliwości Excela.

Skonfigurowałem wszystkie możliwe kombinacje wejść przełączników i uporządkowałem je sekwencyjnie według wzorów binarnych. Wartość „1” oznacza, że przełącznik jest włączony, puste pole oznacza, że jest wyłączony. W górnej części arkusza kalkulacyjnego umieściłem wartości rezystancji dla każdego przełącznika i dla rezystora pull-down. Następnie obliczyłem równoważną rezystancję dla każdej z kombinacji, z wyjątkiem sytuacji, gdy wszystkie rezystory są wyłączone, ponieważ te rezystory nie będą miały wpływu bez źródła zasilania. Aby moje obliczenia były łatwe, abym mógł kopiować i wklejać do każdej kombinacji, uwzględniłem wszystkie kombinacje w obliczeniach, mnożąc każdą wartość przełącznika (0 lub 1) przez jej odwróconą wartość oporu. W ten sposób wyeliminowano jego opór z obliczeń, jeśli przełącznik był wyłączony. Wynikowe równanie można zobaczyć na obrazie arkusza kalkulacyjnego, ale Req = Rx+1/(Sw1/R1 + Sw2/R2 + Sw3/R3 + Sw4/R4 + Sw5/R5 + Sw6/R6). Używając Itotal = 5V / Req, określamy całkowity prąd płynący przez obwód. Jest to ten sam prąd, który przepływa przez rezystor pull-down i dostarcza nam napięcie do naszego wejścia analogowego. Jest to obliczane jako Vin = Itotal x Rx. Badając zarówno dane Req, jak i dane Vin, widzimy, że rzeczywiście mamy unikalne wartości.

W tym momencie wydaje się, że nasz obwód będzie działał. Teraz, aby dowiedzieć się, jak zaprogramować Arduino.

Krok 3: Programowanie Arduino

Programowanie Arduino
Programowanie Arduino
Programowanie Arduino
Programowanie Arduino
Programowanie Arduino
Programowanie Arduino

Kiedy zacząłem myśleć o tym, jak zaprogramować Arduino, początkowo planowałem ustawić poszczególne zakresy napięć, aby określić, czy przełącznik jest włączony, czy wyłączony. Ale, leżąc pewnej nocy w łóżku, przyszło mi do głowy, że powinienem znaleźć równanie, aby to zrobić. Jak? PRZEWYŻSZAĆ. Excel ma możliwość obliczania równań, aby najlepiej dopasować dane do wykresu. Aby to zrobić, będę potrzebować równania wartości całkowitej przełączników (binarnych) w funkcji napięcia wejściowego odpowiadającego tej wartości. W moim skoroszycie programu Excel umieściłem wartość całkowitą po lewej stronie arkusza kalkulacyjnego. Teraz określę moje równanie.

Oto krótki samouczek dotyczący określania równania linii w programie Excel.

1) Wybierz komórkę, która nie zawiera żadnych danych. Jeśli masz wybraną komórkę, która zawiera dane, program Excel spróbuje odgadnąć, co chcesz trendować. To znacznie utrudnia ustalenie trendu, ponieważ Excel rzadko prognozuje poprawnie.

2) Wybierz zakładkę "Wstaw" i wybierz wykres punktowy.

3) Kliknij prawym przyciskiem myszy w polu wykresu i kliknij „Wybierz dane…”. Pojawi się okno „Wybierz źródło danych”. Wybierz przycisk Dodaj, aby kontynuować wybieranie danych.

4) Nadaj mu nazwę serii (opcjonalnie). Wybierz zakres dla osi X, klikając strzałkę w górę, a następnie wybierając dane napięcia. Wybierz zakres dla osi Y, klikając strzałkę w górę, a następnie wybierając dane całkowite (0-63).

5) Kliknij prawym przyciskiem myszy na punkty danych i wybierz „Dodaj linię trendu…” W oknie „Formatuj linię trendu” wybierz przycisk Wielomian. Patrząc na trend, widzimy, że rząd 2 nie do końca pasuje. Wybrałem Order 3 i uznałem, że jest to znacznie dokładniejsze. Zaznacz pole wyboru „Wyświetl równanie na wykresie”. Ostateczne równanie jest teraz wyświetlane na wykresie.

6) Gotowe.

OK. Powrót do programu Arduino. Teraz, gdy mamy równanie, programowanie Arduino jest łatwe. Liczba całkowita reprezentująca pozycje przełącznika jest obliczana w 1 wierszu kodu. Korzystając z funkcji „bitread” możemy pobrać wartość każdego pojedynczego bitu, a tym samym poznać stan każdego przycisku. (ZOBACZ ZDJĘCIA)

Krok 4: Obwody TinkerCAD

Obwody TinkerCAD
Obwody TinkerCAD

Jeśli nie sprawdziłeś obwodów TinkerCAD, zrób to teraz. CZEKAĆ!!!! Dokończ czytanie mojego Instructable, a następnie sprawdź to. TinkerCAD Circuits sprawia, że testowanie układów Arduino jest bardzo łatwe. Zawiera kilka obiektów elektrycznych i Arduino, umożliwiając nawet zaprogramowanie Arduino do testów.

Aby przetestować mój obwód, ustawiłem 6 przełączników za pomocą zestawu przełączników DIP i przywiązałem je do rezystorów. Aby udowodnić, że wartość napięcia w moim arkuszu kalkulacyjnym Excel była poprawna, wyświetliłem woltomierz na wejściu Arduino. To wszystko działało zgodnie z oczekiwaniami.

Aby udowodnić, że programowanie Arduino zadziałało, wyprowadzam stany przełączników na diody LED, korzystając z wyjść cyfrowych Arduino.

Następnie przełączyłem każdy przełącznik na każdą możliwą kombinację i jestem dumny, że mogę powiedzieć "TO DZIAŁA"!!!

Krok 5: „Tak długo i dziękuję za wszystkie ryby”. (ref.1)

Muszę to jeszcze wypróbować na prawdziwym sprzęcie, ponieważ obecnie podróżuję do pracy. Ale po udowodnieniu tego za pomocą TinkerCAD Circuits wierzę, że to zadziała. Wyzwanie polega na tym, że podane przeze mnie wartości rezystorów nie są standardowymi wartościami dla rezystorów. Aby to obejść, planuję użyć potencjometrów i kombinacji rezystorów, aby uzyskać potrzebne wartości.

Dziękuję za przeczytanie mojej instrukcji. Mam nadzieję, że pomoże ci to w twoich projektach.

Proszę zostawić komentarze, jeśli próbowałeś rozwiązać tę samą przeszkodę i jak ją rozwiązałeś. Chciałbym dowiedzieć się więcej sposobów na to.

Krok 6: Referencje

Nie sądziłeś, że przedstawię cytat bez podania odniesienia do jego źródła, prawda?

nr ref. 1: Adams, Douglas. Tak długo i dziękuję za wszystkie ryby. (Czwarta książka „Trylogii Autostopowicza po Galaktyce”)

Zalecana: