Sensor dotykowy na AVR, udało się bez Qtouch library

IMAG0328W końcu udało mi się zmusić AVR’ki do odczytu dotykowych przycisków. Biblioteka Atmel Qtouch kusiła, ale za nic nie byłem wstanie jej rozgryźć, a o rozmiarze nie wspomnę. Poczytałem trochę teorii, znalazłem jakieś przykłady i udało się. Pierwszym efektem jest ten moduł. Jak działa w praktyce:

Jak działa w teorii:
Płytki czujników dotyku działają jak kondensatory, ładowane przez rezystor. Mikroprocesor ładuje ten układ RC, mierząc czas. Ponieważ R jest stałe, czas ładowania jest zależny od pojemności. Pojemność zmienia się gdy przykładamy palec – staje się on dielektrykiem. Aby układ działał, należy zadbać o kilka elementów:
-Pojemność takiego “kondensatora” jest bardzo mała. Aby wydłużyć czas ładowania, stosuje się rezystory o dużej wartości (ja użyłem z braku innych 10M, lepsze byłyby około 2-5M om).
-Jeden sensor wymaga jednego pinu do odczytu, i jednego do ładowania, z tym że ten drugi może obsługiwać jednocześnie wiele czujników.
-Czasy są tu bardzo niewielkie; nie ma po co używać funkcji opóźniających; sam obrót pętli pomiarowej jest wystarczająco długi.
-Zmiany pojemności są także niewielkie, dlatego ważne jest aby ta zmiana po przyłożeniu palca była możliwie duża. Dlatego płytki mają powierzchnię w postaci siatki, aby zmniejszyć ich własną pojemność. Wbrew intuicji, im większe pola sensorów, tym niekoniecznie lepiej.
-W takich układach bardzo ważne jest zastosowanie jak najkrótszych ścieżek, aby zmniejszyć szkodliwe pojemności.
-Ważne jest też wylanie dookoła masy, która będzie ekranować zakłócenia i stanowić drugą elektrodę kondensatora.
-Jak wynika z powyższego opisu, pomiar nie polega na wykryciu pojemności ludzkiego ciała względem ziemi, ani niczego takiego. Palec człowieka jest dielektrykiem w polu elektrycznym kondensatora utworzonego z pola czujnika i pobliskiego pola masy.

Download:

Tiny13_2x_touch_sources_firmware

tiny13_2x_touch

4 komentarze do “Sensor dotykowy na AVR, udało się bez Qtouch library”

    1. Powyższą płytkę narysowałem w programie Corel importując mozaikę ścieżek Eagle zapisaną jako PDF. Natomiast kwadratowe pola można uzyskać w samym Eagle. Narysuj kształt używając narzędzia Polygon. Za pomocą narzędzia Name “podłącz” go do odpowiedniego sygnału. Kliknij prawym na polygonie, wybierz “Properties” i z listy “Polygon Pour” wybierz “hatch”. Wygeneruj pola za pomocą Tools -> Ratsnest.

  1. Witam!

    Próbowałeś może wyzwolić ten układ poprzez podawanie na czujniki wodę? Chodzi mi o to, że znalazłem w internecie projekt czujnika deszczu do samochodu na bazie zmiany pojemności. Wymagany do działania jest układ AD7745, szukam tańszego rozwiązania. Projekt, który znalazłem bazuje na płytce, umieszczonej pod szybą (wewnątrz samochodu) a krople padające z zewnątrz na szybę zmieniają pojemność (link do opisu:http://www.egr.msu.edu/classes/ece480/capstone/spring10/group06/Documents/ECE480_Design_Team6_Final_Report.pdf) Być może taki prosty układ by się sprawdził?

    Pozdrawiam

    1. Bardzo dziękuję za inspirujący komentarz. Właśnie sprawdziłem działanie układu w reakcji z wodą. Układ reaguje na pojawienie się dużej kropli wody (ok. 100mm3). Krople umieszczałem po stronie laminatu bez miedzi, tuż nad polami sensorów. Woda demineralizowana. Wyjście było w stanie aktywnym nawet po usunięciu znacznej objętości wody i utrzymywało układ na granicy przełączania także gdy laminat pokrył się lekkim filmem wodnym (drobne kropelki <0.1mm każda; typowy film się nie tworzył ze względu na kiepską zwilżalność laminatu). Także wyciągając wnioski wydaje mi się, iż można taki czujnik użyć do detekcji wody. Reakcja na wykrycie wody jest natychmiastowa, natomiast do dezaktywacji woda powinna całkowicie odparować. Przy odpowiednim dostosowaniu programu myślę że można z powodzeniem to zastosować.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.