[IDEA] Analogowy multiplekser czujników dotyku dla NXT
Moderatorzy: Mod Team, Mod Team
[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ść.
-
- Posty: 21
- Rejestracja: 2008-06-30, 14:55
- Lokalizacja: Poznań
-
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?
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?
Bloki które zrobiłem nie są zabezpieczone hasłem - mogą służyć jako przykład (na dobry początek).student-85 pisze:Jak trudne jest zrealizowanie własnego bloczka
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
National Instruments udostępnia oba programy na swoich stronach (niestety dopiero po zalogowaniu)student-85 pisze: czy istnieje jakaś darmowa/studencka/trial wersja oprogramowania LabView? Czy można to zrobić jakoś inaczej?
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ść.
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/cgi-bin/gallery.cgi?f=234174
na jednym z obrazków widać w jaki sposób wbudowane są rezystory w czujniki CM
http://www.brickshelf.com/gallery/Philo ... ouch_5.jpg
Bez ryzyka nie ma zabawy :)
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/cgi-bin/gallery.cgi?f=234174
na jednym z obrazków widać w jaki sposób wbudowane są rezystory w czujniki CM
http://www.brickshelf.com/gallery/Philo ... ouch_5.jpg
Bez ryzyka nie ma zabawy :)
Myślenie ma kolosalną przyszłość.
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 2011-05-20, 09:59 przez Coval_pl, łącznie zmieniany 1 raz.
Podpięcie do NXT czy RCX to kwestia jedynie różnych wtyczek.Coval_pl pisze: 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.
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ść.
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 :)staak pisze: 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)........
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 2011-05-23, 10:09 przez Coval_pl, łącznie zmieniany 3 razy.
Jeżeli spojrzysz na wtyczkę "od góry" (przewód do dołu) to zobaczysz 4 piny kontaktowe.Coval_pl pisze:Podłączenie do niej drugiej pod kątem prostym z elektrycznego punktu widzenia powoduje zwarcie.
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ść.
- Darek Mróz
- VIP
- Posty: 213
- Rejestracja: 2004-06-02, 14:12
- Lokalizacja: Rzeszów
- brickshelf: sasik
-
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.staak pisze: 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?
LEg GOdt Darek Mróz
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.student-85 pisze:Minusem jest brak możliwości ciśnięcia więcej niż jednego przycisku na raz (wykrywa i tak naciśnięcie jednego).
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: Zaznacz cały
111
110
101
010
000
100
011
1 - przycisk włączony (=należy uwzględnić opór)
0 - wyłączony
Kod: Zaznacz cały
1/R(zastępczy) = 1/R1 + 1/R2 + 1/R3
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: Zaznacz cały
#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);
}
}
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. :)
- Załączniki
-
- Wykres zależności RAW od oporu.
- raw(r).GIF (19.1 KiB) Przejrzano 9068 razy
Ostatnio zmieniony 2011-07-16, 19:48 przez skorupa, łącznie zmieniany 1 raz.