logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Przycisk pojemnościowy dla Arduino

ghost666 15 Wrz 2015 15:20 7167 4
  • Przycisk pojemnościowy dla Arduino
    Przedstawiony poniżej poradnik, pokazuje w jak prosty sposób dodać można do modułu Arduino (lub podobnego, jak np. Raspberry Pi) przycisk pojemnościowy. Tego rodzaju przycisk może być dowolnego kształtu i rozmiaru i zamontowany może być w dowolny sposób na nieprzewodzącym podłożu. Czyni to go idealnym do integracji z rozmaitymi elementami o nietypowych kształtach czy wymiarach, jak na przykład klamka w drzwiach (co pozwoli na detekcję dotknięcia klamki przez człowieka).

    Warto pamiętać, że jeżeli brakuje nam zasobów w Arduino bardzo łatwo można przepisać zaprezentowany program na dowolny mały mikrokontroler - np. 8 pinowego PICa lub AVRa - i korzystać z tego jak z normalnego przycisku z pomocą jednej linii cyfrowej.

    Podstawy działania

    Podstawy pomiaru pojemności z wykorzystaniem Arduino opisane są bardzo dobrze na stronie https://www.arduino.cc/en/Tutorial/CapacitanceMeter, więc nie ma sensu ich tutaj powtarzać. Zasadniczo pomiar ten opiera się o pomiar czasu potrzebnego do naładowania mierzonej pojemności z cyfrowego wyjścia układu. Dwa elementy wpływają na ten czas - rezystor w układzie i badany kondensator. Im większa rezystancja i pojemność, tym dłuższy czas potrzebny jest na naładowanie układu do zadanej wartości.

    W prezentowanym układzie kondensatorem jest osoba dotykająca przycisk. Jeśli macie multimetr z opcją pomiaru pojemności, łatwo jest sprawdzić, że ludzka dłoń ma mierzalną pojemność - wystarczy w gniazdo kondensatora włożyć dwa druciki i złapać je dłońmi. Zmierzona pojemność jest niemała, w przypadku autora około 60 nF.

    Autor uprościł trochę algorytm, z uwagi na to, że nie potrzebny jest dokładny pomiar wartości pojemności użytkownika, a jedynie detekcja różnicy w czasie ładowania pojemności. Pozwoli to na wykrycie, kiedy przycisk został dotknięty. Zamiast wykorzystywać przetwornik analogowo cyfrowy lub precyzyjny pomiar czasu autor mierzy napięcie z pomocą wejścia cyfrowego i zlicza ile razy zdefiniowana w programie pętla zdąży się wykonać.

    Przełącznik

    Przycisk pojemnościowy dla Arduino Przycisk pojemnościowy dla Arduino


    W tym przypadku przełącznikiem jest coś metalowego. Cokolwiek, nawet goły drucik. W opisywanym projekcie autor wykorzystał kawałek metalowej taśmy na plastikowym, dielektrycznym podłożu. Do metalowej taśmy przylutował kabelek, który następnie umieścił w płytce stykowej.

    Można też wykorzystać inne materiały, np. samoprzylepną taśmę aluminiową, jednakże ciężko coś do niej przylutować, co znacznie utrudnia jej podłączenie do układu. Możliwości wykorzystania metalowych przedmiotów są ogromne (w granicach rozsądku), więc w zasadzie wszystko może pełnić rolę przycisku.

    Układ elektroniczny na płytce prototypowej

    Przycisk pojemnościowy dla Arduino Przycisk pojemnościowy dla Arduino Przycisk pojemnościowy dla Arduino


    Do złożenia układu potrzebne są:
    1 rezystor 1 MΩ,
    1 rezystor 220 Ω,
    Tranzystor NPN, np. BC547,
    Płytka stykowa i kilka kabelków,
    Moduł Arduino lub podobny.

    Autor d projektu dodał diodę LED zasilaną przez opornik (220 Ω) w celu wizualizacji działania przełącznika. Dioda podłączona jest do jednego z wyjść cyfrowych Arduino i nie oddziałuje w żaden sposób na układ.

    Kod programu

    Poniżej znajduje się kod programu napisany dla Arduino. Kod został przetestowany z Arduino Uno i działa bardzo dobrze.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Zasadniczo program realizuje kilka prostych kroków:

    Załącz pin ładowania (charge pin) - rozpocznie to ładowanie pojemności.
    Zliczaj ile pustych pętli wykona się do czasu naładowania (input pin przejdzie w stan wysoki).
    Wyłącz pin ładowania.
    Włącz pin rozładowania - rozładuje to pojemność przez opornik 220Ω.
    Wyłącz pin rozładowywania.

    Autor dodał w programie już debouncer przycisku, który pozwala uniknąć fałszywej detekcji naciśnięcia. Działa on bardzo prostu, odczekując po prostu 100 ms aby upewnić się, że przycisk na pewno został wciśnięty.

    Jedyne co trzeba w programie zmienić, to wartość LOOP_LIMIT. Szybszy procesor i wydajniejszy program wymagają wyższej wartości tej stałej. Jej wartość dobrać można eksperymentalnie.

    Żródło: http://www.instructables.com/id/Capacitive-Switch-for-Arduino/?ALLSTEPS

    Fajne? Ranking DIY
    O autorze
    ghost666
    Tłumacz Redaktor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    https://twitter.com/Moonstreet_Labs
    ghost666 napisał 11960 postów o ocenie 10197, pomógł 157 razy. Mieszka w mieście Warszawa. Jest z nami od 2003 roku.
  • #3 14998788
    Urgon
    Poziom 38  
    AVE...

    Również większość nowych PICów realizuje pomiar pojemnościowy sprzętowo. Przy czym ze względu na budowę modułu ADC we wszystkich PICach można zrealizować różnicowy pomiar pojemności czyli CVD. Dokładnie to opisano w nocie AN1478.
  • #4 15000277
    japko1024
    Poziom 18  
    Myślę, że dałoby się to zrobić nawet analogowo. Równocześnie z badanym kondensatorem ładowałby się inny, wzorcowy, zawsze z taką samą prędkością. Zakończenie ładowania kondensatora badanego powodowałoby wykonanie pomiaru napięcia na wzorcowym - jeśli byłoby wyższe od zadanej wartości, na wyjściu układu pojawiałby się sygnał 1, a jeśli nie - 0. Do pomiaru napięcia na obu kondensatorach można zastosować np. komparator lub przerzutnik Schmidta.
    Inny sposób to podłączenie "przycisku" do bazy jakiegoś tranzystora i pomiar przepływającego prądu (po przefiltrowaniu filtrem dolnoprzepustowym). Kiedy do wejścia AUX radia podłączy się kabel z wolną końcówką, słychać buczenie, a po dotknięciu jej jest jeszcze głośniejsze.
  • #5 15000870
    michcior
    Poziom 30  
    @Urgon,
    Racja, im to wyszło przez przypadek, i myślę że większość przetworników ADC można tak wykorzystać.
    Nie mniej, nota Microchipa to tylko zarys, żeby to działało potrzebowałem bardzo rozbudować algorytm o filtracje, histerezy i auto-strojenie (dopasowanie do wielkości sensora) bo układ mierzy zmianę pojemności.

    60nF? Chyba pF, Tu nie chodzi o pojemność kondensatora tylko ładunku. Takie układy działają nawet jak się podskoczy i dotknie będąc w powietrzu. W rozwiązaniu PIC'a mamy dzielnik pojemnościowy, pojemność bramki i wejścia ADC to ok 15pF więc poruszam się w zakresie pF!
REKLAMA