Forum LUGPol Strona Główna Forum LUGPol
www.lugpol.pl

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  AlbumAlbum  IRC

Poprzedni temat «» Następny temat
[IDEA] Analogowy multiplekser czujników dotyku dla NXT
Autor Wiadomość
staak 

Wiek: 41
Dołączył: 07 Paź 2008
Wpisy: 53
Skąd: Warszawa
  Wysłany: 2011-01-03, 22:07   [IDEA] Analogowy multiplekser czujników dotyku dla NXT



Multiplekser umożliwia podłączenie do jednego portu wejściowego NXT (lub przy odpowiedniej przejściówce do RCX) czterech czujników dotyku.
Wewnętrzna budowa multipleksera...



... i podłączenie do NXT .



W przypadku obu mux'ów zastosowałem rezystory o wartościach 10k 32k 68k i 150k. Czujniki dotyku nowego typu (NXT) mają wbudowany dodatkowy rezystor 2,2k.
Z założenia oba multipleksery (starego typu do RCX i nowy do NXT) miały współpracować z NXT za pośrednictwem jednego bloku programowego NXT-G, w którym odpowiednie progi ustawione byłyby na sztywno bez możliwości zmian (tak jak u konkurencji... :) ). Rezystory wewnętrzne (a także dokładności samych rezystorów) wymusiły jednak konieczność stworzenia bloku dla NXT-G z progami ustawianymi przez użytkownika.

Standardowo po wstawieniu bloku do projektu widoczna jest tyko lewa strona ustawień.
Zaznaczenie checkboxa powoduje ukazanie się okna umożliwiającego ręczne ustawienie odpowiednich progów.
Parametry bloku:
Port: 1 do 4
Port do którego podłączony jest mux
Limit: 1 do 6
Dla progu TH1000 = 520 limit 5 oznacza iż próg ten wykrywany jest w przedziale 515<TH1000<525
Threshold:0 do 1023
Rozwijane pole w lewym oknie służy jedynie do podglądu wartości danego progu.
Wartość progu to nic innego jak wartość Raw Value dla odpowiedniej konfiguracji stanów czujników
TH1011 należy czytać jako TH Czujnik1=1 Czujnik2=0 Czujnik3=1 Czujnik 4=1 gdzie
Czujnik1 - linia z rezystorem 10k
Czujnik2 - linia 32k
Czujnik3 - linia 68k
Czujnik4 - linia 150k

Sygnał wyjściowy z bloku stanowią cztery wyjścia (T1-T4) typu True/False
Stan True na wyjściu oznacza, że dany czujnik jest wciśnięty

Po ustawieniu i sprawdzeniu progów blok należy zapisać w projekcie.
Opcja Copy/Paste pozwala na wstawienie bloku do nowego projektu wraz z ustawionymi wcześniej progami.

Blok można pobrać z ...


PS
Koszt elementów multipleksera wyniósł około 5 zł.
Blok został napisany w LabView z nakładką LabVIEW Toolkit for LEGO MINDSTORMS NXT dostępnych na stronach National Instruments.
_________________
Myślenie ma kolosalną przyszłość.
 
 
 
student-85 

Wiek: 28
Dołączył: 30 Cze 2008
Wpisy: 16
Skąd: Poznań - Ostrów Wlkp.
Wysłany: 2011-02-18, 21:55   

Sam zabrałem się jakiś czas temu za podłączenie większej ilości przycisków pod jeden port NXT. Skończyło się na 6 przyciskach zamontowanych na płytce drukowanej i drabince diod 0,7V. Dawało to dość stabilne wyniki dla każdego z przycisków. Minusem jest brak możliwości ciśnięcia więcej niż jednego przycisku na raz (wykrywa i tak naciśnięcie jednego).

Kolejną wadą, a raczej niedociągnięciem było używanie do odczytu wartości bloczka czujnika światła lub dźwięku i w sumie chciałbym to dorobić. Jak trudne jest zrealizowanie własnego bloczka, czy istnieje jakaś darmowa/studencka/trial wersja oprogramowania LabView? Czy można to zrobić jakoś inaczej?
 
 
 
staak 

Wiek: 41
Dołączył: 07 Paź 2008
Wpisy: 53
Skąd: Warszawa
Wysłany: 2011-02-21, 20:00   

student-85 napisał/a:
Jak trudne jest zrealizowanie własnego bloczka


Bloki które zrobiłem nie są zabezpieczone hasłem - mogą służyć jako przykład (na dobry początek).
Tu znajdziesz bardziej skomplikowane bloki (również nie są zablokowane hasłem)
W gruncie rzeczy merytorycznej obróbce podlegają dwa pliki: config (odpowiada za interfejs pomiędzy użytkownikiem a blokiem) i sub (który zawiera stronę logiczną działania bloku). Pozostałe bloki to "kosmetyka"
Przed tym jak napisałem te kilka bloków nie miałem żadnego kontaktu z LabView...
Blok logiki zajął mi parę minut, blok interfejsu....pobliski sklep mięsny miałby pełen asortyment przez cały czas pisania bloków.
To co działało w LVabView bez żadnych problemów ... w środowisku LEGO MINDSTORMS NXT 2.0 (już jako gotowy blok) nie wykazywało chęci do współpracy (gubienie ustawień, brak list wyboru itd itp)
Ale metodą prób i błędów udało mi się stworzyć (i nauczyć się jak to się robi) w pełni funkcjonalne bloki.
Kwestia wytrwałości
student-85 napisał/a:
czy istnieje jakaś darmowa/studencka/trial wersja oprogramowania LabView? Czy można to zrobić jakoś inaczej?

National Instruments udostępnia oba programy na swoich stronach (niestety dopiero po zalogowaniu)
LabView (baza) jest/był dostępny w wersji trial 30 dni natomiast Toolkit for LEGO MINDSTORMS NXT (nakładka) jest free.
Inaczej chyba się nie da bo stuktura bloku (struktura plików w bloku) jest określona a dodatkowo pliki *.vi nie są zapisywane w postaci tekstowej (tylko jakaś forma kompilacji danych)
_________________
Myślenie ma kolosalną przyszłość.
 
 
 
Coval_pl
[Usunięty]

Wysłany: 2011-05-19, 14:11   

A czy ktokolwiek próbował wstawiać te rezystory do samych czujników? Może byłoby to prostsze rozwiązanie gdyby było na nie miejsce, zwłaszcza przy podłączaniu, bo wystarczyłyby same kable spiąć jeden na drugim.
 
 
 
staak 

Wiek: 41
Dołączył: 07 Paź 2008
Wpisy: 53
Skąd: Warszawa
Wysłany: 2011-05-19, 22:39   

W przypadku czujników RCX możesz zrobić to tak:
Tyle, że w tym przykładzie użyte zostały czujniki z zestawu CyberMaster 8482-1.
Czujniki dotyku z tego zestawu (jasno niebieska przezroczysta obudowa +czerwony, żółty, lub biały "zderzak") mają fabrycznie wbudowane wewnętrznie rezystory o różnych wartościach. Standardowy (szara obudowa) czujnik RCX nie ma wbudowanego rezystora.

Więcej znajdziesz tu:
http://www.brickshelf.com...ry.cgi?f=234174
na jednym z obrazków widać w jaki sposób wbudowane są rezystory w czujniki CM
http://www.brickshelf.com...nxt_touch_5.jpg

Bez ryzyka nie ma zabawy :)
_________________
Myślenie ma kolosalną przyszłość.
 
 
 
Coval_pl
[Usunięty]

Wysłany: 2011-05-20, 10:58   

Jeli chodzi o wnetrze, to dokładnie o to mi chodziło. Zobacze czy te szare da się bezpiecznie rozebrać. Jeśli nie to ztobie taki pasywny multiplekser. Mam natomiast pytanie o to załączone zdjęcie. Czym jest podyktowany sposób połączenia? CZy tym, że jest to podpięte do NXT? sądziełem, że wystarczy spiąć te czujniki równolegle, klocek na klocku.
Ostatnio zmieniony przez Coval_pl 2011-05-20, 10:59, w całości zmieniany 1 raz  
 
 
 
staak 

Wiek: 41
Dołączył: 07 Paź 2008
Wpisy: 53
Skąd: Warszawa
Wysłany: 2011-05-23, 10:49   

Coval_pl napisał/a:
Czym jest podyktowany sposób połączenia? CZy tym, że jest to podpięte do NXT? sądziełem, że wystarczy spiąć te czujniki równolegle, klocek na klocku.


Podpięcie do NXT czy RCX to kwestia jedynie różnych wtyczek.
W "standardowym" multiplekserze rezystory lutowane są SZEREGOWO do styku czujnika.
Więc czujniki można łączyć równolegle (2 obrazek w pierwszym poście)
Rezystor w czujnikach dotyku CyberMaster wlutowany jest RÓWNOLEGLE do styku.
Jeżeli podłączysz czujniki CM (albo bez rezystorów) równolegle to wciśnięcie któregokolwiek z czujników spowoduje zwarcie jego styku i ustawienie sygnału wysokiego (1023 w raw) na wyjściu. Stan dwóch pozostałych czujników będzie elektrycznie nieistotny (a co się z tym wiąże nie będziesz w stanie sprawdzić ich stanu).

PRAWDOPODOBNIE taki układ dla czujników CM jak na obrazku zapewnia możliwość sprawdzania jednocześnie stanu wszystkich 3 czujników (na podstawie różnych wartości raw).

Może któryś z kolegów dysponuje takimi czujnikami CM i będzie miał ochotę sprawdzić (i podzielić się wrażeniami) to rozwiązanie z obrazka?
_________________
Myślenie ma kolosalną przyszłość.
 
 
 
Coval_pl
[Usunięty]

Wysłany: 2011-05-23, 11:06   

staak napisał/a:

Podpięcie do NXT czy RCX to kwestia jedynie różnych wtyczek.
W "standardowym" multiplekserze rezystory lutowane są SZEREGOWO do styku czujnika.
Więc czujniki można łączyć równolegle (2 obrazek w pierwszym poście)........


Przejrzałem zdjęcia tych przezroczystych czujników i widziałem ten rezystor. Chodzi mi o sam rysunek połączenia z posta wyżej. Próbowałem przeanalizować schemat elektryczny tego połączenia i nie rozumiem jak to ma działać. Ta kwadratowa łączówka ma 2 pary styków. Podłączenie do niej drugiej pod kątem prostym z elektrycznego punktu widzenia powoduje zwarcie. Chyba że ja czegoś nie wiem :)
Na chwilę obecną mam 2 zwykłe szare czujniki i jeszcze 2 do mnie idą. Jak mi się uda wlutować tam te rezystory to sprawdzę czy takie połączenie ma sens, ale na razie go nie widzę.
Ostatnio zmieniony przez Coval_pl 2011-05-23, 11:09, w całości zmieniany 3 razy  
 
 
 
staak 

Wiek: 41
Dołączył: 07 Paź 2008
Wpisy: 53
Skąd: Warszawa
Wysłany: 2011-05-23, 13:01   

Coval_pl napisał/a:
Podłączenie do niej drugiej pod kątem prostym z elektrycznego punktu widzenia powoduje zwarcie.


Jeżeli spojrzysz na wtyczkę "od góry" (przewód do dołu) to zobaczysz 4 piny kontaktowe.
Dwa lewe piny (pierwsza para połączona razem) metalową część kontaktu mają wyprowadzoną w kierunku lewa góra, dwa prawe piny( druga para połączona razem)- kontakty idą w prawy dół.
W przypadku połączenia wtyczek równolegle (kabelki w tej samej osi) przewodzenie odbywa się po 2 pinach (tej samej pary) dla każdego biegunu zasilania
Jeżeli dopniesz wtyczki prostopadle przewodzenie dla każdego z biegunów odbywa się na jednym pinie (lewy górny i prawy dolny).
Drugi pin (z każdej pary) wisi "w powietrzu".
Takie wykonanie wtyczki zapobiega zwarciom przy prostopadłych połączeniach wtyczek.
_________________
Myślenie ma kolosalną przyszłość.
 
 
 
Coval_pl
[Usunięty]

Wysłany: 2011-05-23, 13:08   

Tak jak przypuszczałem "czegoś nie wiedziałem" lub po prostu nie przyjrzałem się wystarczająco dokładnie. Czyli wracając do rysunku, czujniki tutaj połączone są szeregowo? Nie mam kabli w rękach więc próbuję to sobie tylko wyobrazić :)
 
 
 
staak 

Wiek: 41
Dołączył: 07 Paź 2008
Wpisy: 53
Skąd: Warszawa
Wysłany: 2011-05-23, 14:01   

Coval_pl napisał/a:
czujniki tutaj połączone są szeregowo?

Tak.
_________________
Myślenie ma kolosalną przyszłość.
 
 
 
Darek Mróz 
VIP


Wiek: 45
Dołączył: 02 Cze 2004
Wpisy: 183
Skąd: Rzeszów
Wysłany: 2011-05-24, 17:09   

staak napisał/a:

Może któryś z kolegów dysponuje takimi czujnikami CM i będzie miał ochotę sprawdzić (i podzielić się wrażeniami) to rozwiązanie z obrazka?


Mam takie czujniki i rzeczywiście działa to tak, jak opisałeś. Wartości rezystorów zależne są koloru przycisku, niestety szczegóły podam Wam jak wrócę z urlopu na początku czerwca.
_________________
LEg GOdt Darek Mróz
...???...
 
 
 
skorupa 

Wiek: 20
Dołączył: 03 Gru 2009
Wpisy: 13
Skąd: Andrychów
Wysłany: 2011-07-15, 22:25   

student-85 napisał/a:
Minusem jest brak możliwości ciśnięcia więcej niż jednego przycisku na raz (wykrywa i tak naciśnięcie jednego).

Na początek zrobiłem analogowy multiplekser 3 czujników dotyku, z tym, że NXT identyfikuje czujniki poprawnie nawet jeśli zostały wciśnięte dwa przyciski.
Idea jest taka, aby dobrać takie wartości oporników R1, R2, R3, aby opór zastępczy przy połączeniu równoległym w każdej możliwej kombinacji był inny.
Ponieważ dla trzech czujników mamy 8 możliwych kombinacji (2^3 = 8):
Kod:

111
110
101
010
000
100
011

1 - przycisk włączony (=należy uwzględnić opór)
0 - wyłączony

Teraz musimy obliczyć jakie opory mogą mieć oporniki, aby w każdej możliwej kombinacji opór zastępczy liczony ze wzoru:

Kod:
1/R(zastępczy) = 1/R1 + 1/R2 + 1/R3

Ważne jest to, aby opory się różniły od siebie o przynajmniej 100Ohm. Chodzi o to, aby mieć kilku punktowy zapas po przeliczeniu oporu na wartość RAW. W celu oszacowania oporników można wykorzystać wykres który umieszczam w załączniku.
Jeśli już dobierzemy oporniki (ja wybrałem takie które miałem pod ręką: 2k, 10k, 1k8), musimy tylko odczytać wartość RAW dla każdej kombinacji (z tabelki powyżej).
Po zanotowaniu tych wartości piszemy przykładowy program (tutaj kod w NXC), który będzie powodował załączanie silników/świateł i wyświetlenie na wyświetlaczu, które czujniki są wciśnięte. Pamiętajmy, że jeżeli wartość odczytu RAW = 100, to lepiej ustawić, żeby robot reagował od 90 do 110.

Kod:

#include "NXCDefs.h"
task main()
{
SetSensorType(IN_1, SENSOR_TYPE_TOUCH);
SetSensorMode(IN_1, SENSOR_MODE_RAW);
while(true) {
ResetScreen();
if ((SENSOR_1 > 60) && (SENSOR_1 < 83)) {
TextOut(0, LCD_LINE4, "111");
OnFwd(OUT_ABC, 100);
}
if ((SENSOR_1 > 84) && (SENSOR_1 < 99)) {
TextOut(0, LCD_LINE4, "011");
OnFwd(OUT_BC, 100);
}
if ((SENSOR_1 > 110) && (SENSOR_1 < 138)) {
TextOut(0, LCD_LINE4, "101");
OnFwd(OUT_AC, 100);
}
if ((SENSOR_1 > 139) && (SENSOR_1 < 148)) {
TextOut(0, LCD_LINE4, "110");
OnFwd(OUT_AB, 100);
}
if ((SENSOR_1 > 149) && (SENSOR_1 < 159)) {
TextOut(0, LCD_LINE4, "001");
OnFwd(OUT_C, 100);
}
if ((SENSOR_1 > 160) && (SENSOR_1 < 190)) {
TextOut(0, LCD_LINE4, "010");
OnFwd(OUT_B, 100);
}
if ((SENSOR_1 > 490) && (SENSOR_1 < 530)) {
TextOut(0, LCD_LINE4, "100");
OnFwd(OUT_A, 100);
}
if ((SENSOR_1 > 1000) && (SENSOR_1 < 1023)) {
TextOut(0, LCD_LINE4, "000");
}
Wait(100);
Off(OUT_ABC);
}
}



Pozostaje tylko jedno pytanie: czy warto się bawić w analogowe multipleksery? Moim zdaniem nie. Dlaczego?
1. Masa kodu który musi przetwarzać nasz robot.
2. Dużo roboty z ustalaniem wartości rezystorów itd.
3. Trzy czujniki - ok, mamy tylko 8 kombinacji. A jeśli będę chciał np. 8 czujników to wtedy... 2^8 = 256 kombinacji. Zupełnie odpada.

Czy jest lepsza metoda?
Oczywiście. NXT daje nam interfejs cyfrowy I2C. Wykonanie multipleksera 8 czujników dotyku sprowadza się do jednego układu scalonego za 4,5zł. Do tego nie trzeba ŻADNEJ znajomości elektroniki :) W wolnej chwili wrzucę na forum opis mojego multipleksera czujników dotyku, czujników analogowych i silników. :)

raw(r).GIF
Wykres zależności RAW od oporu.
Plik ściągnięto 185 raz(y) 19,1 KB

raw(r).GIF
Wykres zależności RAW od oporu.
Plik ściągnięto 185 raz(y) 19,1 KB

Ostatnio zmieniony przez skorupa 2011-07-16, 20:48, w całości zmieniany 1 raz  
 
 
 
 
Wyświetl wpisy z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich wpisów
Nie możesz usuwać swoich wpisów
Nie możesz głosować w ankietach
Możesz załączać pliki na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0,15 sekundy. Zapytań do SQL: 14