Projekt rękawicy
Transkrypt
Projekt rękawicy
5/7 Projekt rękawicy – urządzenia przenośnego do sterowania ruchem robota TWIN-CATT Artykuł opisuje sposób realizacji projektu rękawicy sterującej ruchem robota z wykorzystaniem akcelerometru. Rękawica stanowi nietypowe urządzenie sterujące ruchem robota mobilnego, ukazując jak wyobraźnia może pomagad w projektowaniu urządzeo mechatronicznych. Łukasz Przystalski www.przystalski.pl [email protected] [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT Spis treści 1. Wstęp - rozwiązanie problemu sterowania urządzeniami przenośnymi ........................................ 3 2. Koncepcja sterowania rękawicą ...................................................................................................... 4 3. Projekt oraz realizacja płytki elektronicznej rękawicy..................................................................... 4 4. Oprogramowania układu ATmega32 .............................................................................................. 9 5. Podsumowanie .............................................................................................................................. 17 Łukasz Przystalski www.przystalski.pl [email protected] Strona 2 [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT 1. Wstęp - rozwiązanie problemu sterowania urządzeniami przenośnymi Robot mobilny TWIN-CATT, to z założenia robot do celów inspekcyjnych. Człowiek dokonujący inspekcji posiada obraz z obu kamer zamontowanych na robocie i sam widząc to co się dzieje wokół, podejmuje decyzje o kolejnym ruchu robota. Z wielu możliwości urządzeo sterujących wybrano urządzenia przenośne takie jak: telefon, laptop, lecz także nietypowe urządzenie jakim jest bezprzewodowa rękawica z akcelerometrem. Zastosowanie telefonów daje szerokie grono potencjalnych odbiorców. Spośród wielu producentów oprogramowania dla telefonów wybrano system operacyjny firmy Google o nazwie Android. Jest to nowe i cieszące się coraz większym uznaniem oprogramowanie, dające wiele możliwości programistycznych dla zwykłych użytkowników. Opis implementacji oprogramowania zawarto w artykule 4. Niemożliwością jest realizacja zagadnienia sterowania bez realizacji komunikacji. W przypadku robota TWIN-CATT zdecydowano się na łatwą w implementacji komunikację bezprzewodową przy pomocy technologii Bluetooth. Bluetooth to darmowy standard połączeo między urządzeniami elektronicznymi krótkiego zasięgu, opisany w specyfikacji IEEE 802.15.1. Rozróżnia się 3 klasy technologii Bluetooth, które determinują zasięg pracy: klasa 1 (100mW) ma największy zasięg do 100m, klasa 2 (2,5mW) jest najpowszechniejsza w użyciu zasięg do 10m, klasa 3 (1mW) rzadko używana, z zasięgiem do 1m. Łukasz Przystalski www.przystalski.pl [email protected] Strona 3 [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT 2. Koncepcja sterowania rękawicą Poniżej na rysunku 1 przedstawiono pomysł sterowania rękawicą w zależności od wykonanego ruchu. Ogólnie pozycja rękawicy jest statyczna, ale w przypadku wykorzystania akcelerometru należy zrozumied, że również ruch zostaje zinterpretowany jako sygnał sterujący. Rys.1 Sposób rzeczywistej realizacji ruchu robota względem gestów wykonywanych przez użytkownika W zależności od sposobu ułożenia dłoni (akcelerometru) robot wykonuje ruch, z prędkością tym większą, im większy jest kąt wychylenia. Układ pomiarowy jest bardzo szybki i cechuje go duża czułośd. Już delikatne wahania powodują wahania prędkości jazdy. Dane z rozkazami wysyłane są od razu po zakooczenie obsługi przetwornika analogowo-cyfrowego układu ATmega32. Lekkie kołysanie rękawicą w lewo i prawo powodują delikatne ruchu robota w tych kierunkach. Tak jak zakładano, maksymalny kąt związany z największa zadaną prędkością nie powoduje uczucia dyskomfortu dla użytkownika. 3. Projekt oraz realizacja płytki elektronicznej rękawicy Schemat elektryczny płytki przedstawiono na rysunku 2. Łukasz Przystalski www.przystalski.pl [email protected] Strona 4 www.przystalski.pl D C B A INT1 INT0 JP5 5 4 3 2 1 BTM-222 JP2 2 1 VCC 1 GND PRZYCISK2 PRZYCISK1 VCC RX TX GND Zasilanie GND CS1 300nF IN OUT GND U2 7833 47uF CS2 3.3V VCC D41k 1K D4 GND 9 7 5 3 1 GND 10k Res3 1K VCC KANDA 10 8 6 4 2 SPI CX2 CX1 D21k 1K D2 2 Łukasz Przystalski 1 1 RX TX D11k 1K D1 2 16MHz CFPX-93 GND 6 18 39 7 8 RESET 4 9 10 11 12 13 14 15 16 40 41 42 43 44 1 2 3 D31k Res3 1K D3 GND INT0 INT1 PD4 PD5 2 ATmega32-16AI GND GND GND XTAL2 XTAL1 RESET PD0 (RXD) PD1 (TXD) PD2 (INT0) PD3 (INT1) PD4 (OC1B) PD5 (OC1A) PD6 (ICP) PD7 (OC2) PB0 (XCK/T0) PB1 (T1) PB2 (AIN0/INT2) PB3 (AIN1/OC0) PB4 (SS) PB5 (MOSI) PB6 (MISO) PB7 (SCK) U1 GND VCC VCC VCC AVCC AREF PC0 (SCL) PC1 (SDA) PC2 (TCK) PC3 (TMS) PC4 (TDO) PC5 (TDI) PC6 (TOSC1) PC7 (TOSC2) PA0 (ADC0) PA1 (ADC1) PA2 (ADC2) PA3 (ADC3) PA4 (ADC4) PA5 (ADC5) PA6 (ADC6) PA7 (ADC7) GND 28 37 36 35 34 33 32 31 30 SCL 19 SDA 20 21 22 23 24 25 26 VCC 5 17 38 27 29 3.3V L1 3 TCK TMS TDO TDI TOSC1 TOSC2 GND 100nF [email protected] Date: File: A4 Size Title SCL SDA R_SDA Res3 1K VCC 2011-10-05 F:\Elektronika\..\schemat.SchDoc Number Rękawica JP6 1 2 3 4 5 6 Akcelerometr C_Z_line 3.3V GND C_ADC 10mH A_data B_data C_data D_data X-LINE Y-LINE Z-LINE SLEEP C_Y_line GND C_X_line 3 GND R_SCL Res3 1K 1 2 3 4 Revision 4 Sheet of Drawn By: Przystalski JP4 I2C 4 D C B A [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT Rys.2 Schemat elektryczny rękawicy sterującej robotem Strona 5 [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT Elementem głównym płyty rękawicy jest układ ATmega32, 8 bitowy mikrokontroler posiadający 32 kilobajtów pamięci programowalnej flash. Jego wielką zaletą jest zainstalowany 8-bitowy, szybki moduł przetwornika A/C, który był decydujący w doborze układu pod wymogi projektowe. Dodatkowym atutem jest wbudowany, sprzętowy układ odpowiadający za komunikację USART, a także I2C. Układ zasilany jest z koszyka składającego się z czterech akumulatorków niklowo-metalowowodorkowych o rozmiarze AAA. Każde z nich posiada pojemnośd 1000mAh. Są one powszechnie używane w urządzeniach przenośnych, takich jak aparaty cyfrowe czy odtwarzacze MP3. Jeden akumulatorek wytwarza napięcie 1,2V, co łącznie daje 4,8V na wyjściu z koszyka. Napięcie to jest dodatkowo stabilizowane przez układ LM1117T-3.3, na wyjściu którego otrzymano napięcie o wartości 3.3V. Służy ono do zasilania akcelerometru MMA7361L. Mikrokontroler ATmega32 stanowi główny układ logiczny, odpowiadający za odczytywanie stopnia odchylenia rękawicy, sygnalizację łączności oraz komunikację bezprzewodową. Do wyjśd układu podłączone są dodatkowe trzy diody informacyjne oraz dwa przyciski. Do wejścia PA0, PA1 i PA2 podłączone są wyjścia analogowe osi X, Y, Z akcelerometru MMA7361L. Sposób podłączenia oraz elementy dodatkowe akcelerometru zostały zaczerpnięte z noty katalogowej producenta. Schemat podłączenia układu MMA7361L przedstawiono na rysunku 3, który znaleziono w nocie katalogowej. Rys.3 Sposób podłączenia akcelerometru do mikrokontrolera Łukasz Przystalski www.przystalski.pl [email protected] Strona 6 [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT Akcelerometr stanowi urządzenie pomiarowe rękawicy. Mikrokontroler odczytuje w sposób pośredni odchylenie rękawicy. Oznaczenie osi przedstawiono na rysunku 4. Rysunek jest modyfikacją oryginału, znalezionego w nocie katalogowej. Rys.4 Akcelerometr wraz z opisem osi pomiarowych Ważnymi elementami, decydującymi o dokładnym działaniu akcelerometru i prawidłowych odczytach przez mikrokontroler są kondensatory ceramiczne o pojemności 3.3nF. Ich obecnośd powoduje minimalizację szumów. Zgodnie z zaleceniami producenta, zostały umieszczone jak najbliżej wejśd analogowo-cyfrowych mikrokontrolera. W projekcie płytki wykorzystano także informacje zamieszczone w nocie katalogowej układu ATmega32, dotyczące technik unikania problemów z szumem pomiarowym. Schemat pokazuje sposób połączeo elementów elektronicznych na płytce PCB. Po prawidłowym zaprojektowaniu schematu, należy utworzyd nową płytkę drukowaną oraz nanieśd na nią elementy. Zadecydowano się na wykorzystanie elementów w technologii SMD w celu minimalizacji wymiarów płytki. Wszystkie elementy zostały wyeksportowane do projektu płytki PCB i odpowiednio uszeregowane. Wynik ustawienia elementów na płytce drukowanej widoczny jest na rysunku 5. Łukasz Przystalski www.przystalski.pl [email protected] Strona 7 [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT Rys.5 Wygląd obu warstw płytki drukowanej Podstawową jednostką projektowania płytek elektronicznych jest mils. Wartośd 40mils opowiada długości 1mm. Płytka ma wymiary 44 x 44mm. Najwyższym punktem jest moduł BTM-222. Na powierzchni miedzi, pod modułem Bluetooth, położono powierzchnię zwaną „POLYGON” w celu uniknięcia powstawania zakłóceo w obwodach cyfrowych układu. Widoczna na rysunku 5 płytka posiada rozmiar pozwalający na łatwy montaż na ręku. Jest lekka i nie wystaje poza szerokośd nadgarstka. Na rysunku 6 pokazano wygląd całego układu rękawicy. Rys.6 Widok elektroniki składającej się na układ rękawicy Łukasz Przystalski www.przystalski.pl [email protected] Strona 8 [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT Rękawica składa się dodatkowo z płytki z przylutowanym akcelerometrem oraz z koszyka baterii. Wszystkie elementy dobrano w sposób ułatwiający wszycie elementów w rękawice skórzaną. Wygląd rękawicy z zamocowaną elektroniką sterującą przedstawiono na rysunku 7. Rys.7 Wygląd rzeczywistej rękawicy skórzanej z połączoną elektroniką znajdującą się wewnątrz Płytkę z akcelerometrem oraz płytkę sterującą wraz z modułem Bluetooth zamocowano po zewnętrznej stronie dłoni. Koszyk do baterii został wyposażony w dłuższy przewód, pozwalający na wygodne zakładanie rękawicy, a następnie dokonanie czynności ukrycia koszyka po wewnętrznej części dłoni. 4. Oprogramowania układu ATmega32 Do wykonanie oprogramowanie rękawicy wykorzystano pakiet programów WinAVR, w którego skład wchodzi darmowy kompilator języka C (AVG GCC) wraz z kompletem narzędzi do tworzenia programów dla 8-bitowych mikrokontrolerów AVR Atmel. W skład pakietu wchodzi prosty program o nazwie Programmers Notepad, który pozwala na utworzenie, edycję i kompilację kodu źródłowego. Głównym problemem sterowania przy pomocy pomiarów pochodzących z akcelerometru jest odpowiednia akwizycja danych. Wybrany akcelerometr MMA7361L, firmy Freescale posiada napięciowe wyjścia analogowe. Zapisany program, działający na mikrokontrolerze ATmega32, operuje bezpośrednio na wartościach cyfrowych. Układem zmieniającym sygnał analogowy na odpowiadający mu sygnał cyfrowy jest przetwornik analogowo-cyfrowy zwany dalej przetwornikiem A/C. W większośd mikrokontrolerów grupy ATmega wbudowany jest 10-bitowy przetwornik A/C Łukasz Przystalski www.przystalski.pl [email protected] Strona 9 [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT sukcesywnej aproksymacji i wielowejściowy multiplekser analogowy. Dopuszczalny błąd wynosi ±2 jednostki kwantyzacji. Modułowi przyporządkowane są następujące wyprowadzenia: wejście napięcia zasilającego, wejście napięcia odniesienia oraz wejścia sygnałów analogowych (współdzielone z liniami portów wejścia-wyjścia). Do pracy modułu A/C niezbędne jest napięcie odniesienia. Wykorzystad można wbudowane źródło (o wartości 2,56V), napięcie zasilające lub zewnętrzne źródło napięcia odniesienia podłączone pod wyprowadzenie AREF. Pierwszy tryb działania rękawicy jest identyczny jak w przypadku telefonu z wykorzystaniem akcelerometru. Ten tryb uruchamiany jest poprzez naciśnięcie przycisku szarego, znajdującego się na płytce. Pierwszym badanym elementem działania układu przetwornika A/C było zarejestrowanie szumu pomiarowego. Wyniki pomiarów przedstawiono na rysunku 8. Szum pomiarowy Napięcie na osi Y [V] 1,84 1,83 1,82 1,81 1,8 1,79 1,78 1,77 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 Numer próbki [n] Rys.8 Zarejestrowany szum pomiarowy Wyjście analogowe osi y akcelerometru połączone jest z wejściem przetwornika A/C. Osie akcelerometru opisano w rozdziale 3.8. Przetwornik zamienia wartośd sygnału na wartośd cyfrową. Następnie już wartośd liczbową uśrednia po 10 pomiarach. Uśredniona wartośd zostaje wysłana przez port szeregowy (RS-232). Wyniki przedstawiono na wykresach. Nawet jeśli rękawica jest poziomo wysyłana wartośd waha się pomiędzy 1,79V a 1,83V. Następnie zbadano wyniki otrzymane podczas przechylania rękawicy. Wartośd napięcia w zależności od wychylenia akcelerometru przedstawiono na rysunku 9 i 10. Łukasz Przystalski www.przystalski.pl [email protected] Strona 10 ROBOT TWIN-CATT [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] Wartość napięcia na osi Y podczas ruchu rękawicy do przodu 3 Napięcie [V] 2,5 2 1,5 1 0,5 0 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 Numer próbki [n] Rys.9 Wykres przedstawiający zmianę napięcia na osi Y podczas ruchu rękawicy do przodu Podczas zwiększania kąta przechyłu zauważono zwiększanie się napięcia do wartości 2,6V. Podczas projektowania oprogramowania rękawicy, wykorzystano zakres pomiarowy do wartości 2,22V. Jest to spowodowane nienaturalnym i bolesnym ugięciem dłoni, co negatywnie wpływa na komfort użytkowania rękawicy. Podczas wykonywania ruchu do tyłu, napięcie maleje do wartości 0,97V. Wartość napięcia na osi Y podczas ruchu rękawicy do tyłu 2 Napięcie [V] 1,8 1,6 1,4 1,2 1 0,8 0,6 0,4 0,2 0 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 Numer próbki [n] Rys.10 Wykres przedstawiający zmianę napięcia na osi Y podczas ruchu rękawicy do tyłu Oprogramowanie rękawicy po skompilowaniu zajmuje 2788 bajtów, co stanowi 8.5% całej pamięci mikrokontrolera. Poniżej przedstawiono fragmentarycznie program wraz z komentarzami. W celu prawidłowej komunikacji z robotem, rękawica musi automatycznie łączyd się z modułem Bluetooth robota. Pierwszą sprawą jest prawidłowa implementacja komunikacji szeregowej. Poniższy kod przedstawia funkcję, odpowiedzialną za inicjację układu USART. Łukasz Przystalski www.przystalski.pl [email protected] Strona 11 [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT void USART_Init( unsigned int baud ) { /* Ustawienie baud rate */ UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud; /* Pozwolenie na odbieranie oraz nadawanie */ UCSRB = (1<<RXEN)|(1<<TXEN); /* Ustawienie polaczenia: 8 bit data, 1stop bit */ UCSRC = (1<<URSEL)|(3<<UCSZ0); } Funkcja ta przyjmuje wartośd całkowitą prędkości połączenia (baud rate – liczba b/s). Jednak nie wolno podad bezpośredniej wartości, a jedynie jej odpowiednik. Spowodowane jest to wpisaniem wartości zmiennej „baud” do rejestru UBRR. Rejestr ten jest 16 bitowy, dlatego podzielono go na dwie 8 bitowe części: UBRRH oraz UBRRL. Na tablicy 1 przedstawiono tablice 71 z strony 168 noty katalogowej Atmel ATmega32, przedstawiająca zależności wpisanych wartości do rejestru UBRR od prędkości transmisji dla danej częstotliwości oscylatora taktującego. Tablica 1 W projekcie płytki rękawicy wykorzystano oscylator kwarcowy o częstotliwości 16MHz. Wpisując do rejestru wartośd 51, otrzymano prędkośd transmisji 19.200 b/s. Błąd związany z przesyłem informacji jest na poziomie 0.2%. Wartośd bitu U2X decyduje o podwojonej prędkości transmisji. W przypadku tego oprogramowania ustawiono go na stan niski (0). Kolejnym krokiem jest pozwolenie na odbieranie i wysyłanie danych przez układ USART mikrokontrolera. W przypadku nadchodzącej transmisji zostaje zainicjowana obsługa przerwania, czyli sygnału, który powoduje zmianę przebiegu programu i jego natychmiastową obsługę przez podprogram, niezależnie od realizowanej czynności. Łukasz Przystalski www.przystalski.pl [email protected] Strona 12 [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT Następnie po zakooczeniu obsługi, układ wraca do poprzednio wykonywanego kroku. Przykład obsługi jednego z przerwania wykorzystywanego w programie rękawicy przedstawiono poniżej. ISR(INT0_vect) // Przerwanie przycisk brązowy { USART_Init(51); tryb=1; } W chwili gdy przycisk typu „micro-switch” zostanie wciśnięty, wejście INT0 zostanie zwarte do masy. Spowoduje to uruchomienie obsługi przerwania od wejścia INT0. Wejście to związane jest, zgodnie ze schematem, z przyciskiem koloru szarego. Wykonany zostaje podprogram inicjujący moduł USART oraz do zmiennej globalnej „tryb” zostaje przypisana wartośd 1. Gdy moduł asynchronicznej komunikacji szeregowej został już prawidłowo uruchomiony, należy połączyd się przy pomocy modułu Bluetooth BTM-222 z modułem robota. W tym celu zaczerpnięto informacje z noty katalogowej modułu BTM-222 [9]. Do konfiguracji modułu producent zalecił użycie komend AT. Jest to zestaw komend, które rozumie każdy modem i które po raz pierwszy zastosowała w swoich produktach firma Hayes. Nazwa komendy AT wzięła się stąd, że każda komenda wysyłana do modemu zaczyna się od liter AT. Zastosowano zgodnie z specyfikacją techniczną układu następujące komendy konfiguracyjne: - ATD=00:12:6F:09:98:28 - ustawienie domyślnego adresu MAC urządzenia, z którym należy ustalid połączenie; domyślnie podano adres modułu robota; działa nawet gdy urządzenie jest w trybie niewykrywalnym, - ATE0 - ustawienie braku echa komunikacyjnego; zwiększa prędkośd transmisji, zmniejsza opóźnienia, - ATK0 - przyporządkowanie jednego bitu stopu dla transmisji szeregowej, - ATL2 - ustawienie prędkości transmisji szeregowej na 19.200 bitów na sekundę, - ATN=REKAWICA - przyporządkowanie modułowy nazwy REKAWICA, - ATP0 - wyłączenie obsługi kodu PIN w celu autoryzacji połączenia, - ATR0 - ustawienie modułu w tryb „master”; pozwala na wyszukiwanie innych urządzeo Bluetooth i nawiązywanie połączenia. Po zapisaniu konfiguracji i ponownym uruchomieniu, moduł rękawicy automatycznie szuka modułu robota, automatycznie nawiązuje połączenie. Następnym elementem koniecznym do prawidłowego działania rękawicy, jako elementu sterującego pracą robota, jest odczyt danych pomiarowych z akcelerometru. Poniżej przedstawiono funkcję odpowiedzialną za inicjację modułu przetwornika analogowo-cyfrowego. Łukasz Przystalski www.przystalski.pl [email protected] Strona 13 [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT void vADCInit(void) { ADCSRA= _BV(ADEN)| _BV(ADIE)|_BV(ADATE)| _BV(ADSC)|_BV(ADPS0)|_BV(ADPS1)|_BV(ADPS2); } Głównym rejestrem odpowiedzialnym za działanie układu jest rejestr ADCSRA, oznaczający ADC Control Status Register A. Oznaczenie _BV przywołuje funkcję ustawiający dany bit w stan wysoki. Bit ADEN powoduje uruchomienie układu A/C. ADIE powoduje zezwolenie obsługi przerwania od zakooczenia przetwarzania wyniku przez przetwornik. Bit ADATE uruchamia procedurę automatycznego przetwarzania wyniku na wejście multipleksera w momencie pojawienia się jakiejkolwiek wielkości dodatniej względem masy układu. ADCS uruchamia pierwszą konwersję danych pomiarowych. Ustawienie bitów ADPSx powoduję wybranie dzielnika częstotliwości zegara taktującego. W przypadku ustawienia stanów wysokich wszystkich bitów, wybrano dzielnik równy 128. Zegar taktujący układ posiada częstotliwośd równą 16MHz. Dzielnik 128 powoduje, że taktowanie układu przetwornika A/C wynosi 125kHz. W nocie katalogowej odczytano, iż czas konwersji wyników zajmuje mikrokontrolerowi 13 cykli. Obsługa przerwania wywołanego zakooczeniem procesu konwersji przedstawiono w poniższym fragmencie kodu źródłowego. ISR (ADC_vect) { uint8_t odczyt_rejestru; odczyt_rejestru=ADCL; fConvResult = (float) (odczyt_rejestru | (ADCH <<8 )) /1024*VREF; Pierwszym etapem jest prawidłowe odczytanie wartości mierzonej i jej zamiana z wartości 10 bitowej (0-1024) na wartośd napięcia. W tym celu skorzystano ze wzoru: odczyt _ rejestru VIN 1024 VREF (1) Wartośd Vref została zdefiniowana jako 3,3V. Aby odczytad napięcie wejściowe, należy przekształcid wzór następująco: VIN ( fConv Re sult ) odczyt _ rejestru VREF 1024 (2) Wartośd napięcia na wejściu przetwornika pochodzący z osi akcelerometru zapisana jest w zmiennej fconvResult. Następnie, jeśli przyciśnięto szary przycisk, następuje obsługa wyniku, co przedstawiono na fragmencie kodu poniżej. if(tryb==0) { Łukasz Przystalski www.przystalski.pl [email protected] Strona 14 [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT if (bit_is_set(ADMUX,MUX0)) { fMeasSensor[0]=fConvResult; ADMUX&=~(1<<MUX0); //Oś X - w lewo i prawo if(fMeasSensor[0]>1.80 && fMeasSensor[0]<2.25 && flaga_kierunku!=1 && fMeasSensor[0] != fMeasSensor_old[0]) { float posredni=fMeasSensor[0]*100-170+64;// Pominięcie 10 pierwszych stropni //180 char znak=(char)posredni; USART_Transmit(znak); flaga_kierunku=2; posredni=fMeasSensor[0]*100-170+128; znak=(char)posredni; USART_Transmit(znak); } if(fMeasSensor[0]<1.50 && fMeasSensor[0]>0.98 &&flaga_kierunku!=1 && fMeasSensor[0]!=fMeasSensor_old[0]) { flaga_kierunku=2; float posredni2=155-fMeasSensor[1]*(100)+128; char znak=(char)posredni2; USART_Transmit(znak); posredni2=155-fMeasSensor[1]*(100)+64; znak=(char)posredni2; USART_Transmit(znak); } fMeasSensor_old[0]=fMeasSensor[0]; } //Oś y - do przodu i do tyłu else { fMeasSensor[1]=fConvResult; ADMUX=(1<<MUX0); if(fMeasSensor[1]>1.70 && fMeasSensor[1]<2.22 && flaga_kierunku!=2 && fMeasSensor[1]!=fMeasSensor_old[1]) { flaga_kierunku=1; float posredni=fMeasSensor[1]*100-165+64; char znak=(char)posredni; USART_Transmit(znak); USART_Transmit(znak); } if(fMeasSensor[1]<1.50 && fMeasSensor[1]>0.99 && flaga_kierunku!=2 && fMeasSensor[1]!=fMeasSensor_old[1]) { flaga_kierunku=1; float posredni2=155-fMeasSensor[1]*(100)+128; char znak=(char)posredni2; USART_Transmit(znak); USART_Transmit(znak); } fMeasSensor_old[1]=fMeasSensor[1]; } if(fMeasSensor[0]>=1.50 && fMeasSensor[0]<=1.80 && fMeasSensor[1]>=1.50 && fMeasSensor[1]<=1.70 && flaga_kierunku!=0) { flaga_kierunku=0; USART_Transmit(serial_on); }} Łukasz Przystalski www.przystalski.pl [email protected] Strona 15 [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT W zależności od ustawionych bitów multipleksera przetwornika A/C wynik zostaje zapisany do zmiennej fMeasSensor. Rejestr odpowiedzialny za wybrany kanał multipleksera nosi nazwę ADMUX. Pierwszy kanał odpowiada pomiarowi z osi x, drugi z osi y. W zależności od napięcia danej osi, następuje wysłanie stosownego komunikatu z trybem jazdy oraz prędkością w zależności od kąta pochylenia rękawicy. Zależnośd odczytanej wartości od wysłanego rozkazu z rodzajem wysterowania ruchem robota przedstawiono na rysunku 11. Rys.11 Opis osi akceleracji oraz rodzaju wykonywanych ruchów w zależności od wartości pomiarowych Należy zwrócid uwagę na fakt, że zrezygnowano z jazdy po łuku. Taki typ jazdy jest nie pożądany z punktu widzenia gąsienicowego układu napędowego. W przypadku robota inspekcyjnego, zdolnośd jazdy po łuku jest tylko zbędnym dodatkiem. Fragment funkcji głównej programu przedstawiono poniżej. int main(void) { /* Linie portu C będą wejściami z podciągnięciem do VCC */ DDRD = 0x00; PORTD=0x0f; DDRB=0x0f; PORTB=0xff; MCUCR |= 1<<ISC01; //konfiguracja przerwania INT0 MCUCR |= 1<<ISC11; //konfiguracja przerwania INT1 Łukasz Przystalski www.przystalski.pl [email protected] Strona 16 [ PROJEKT RĘKAWICY Z AKCELEROMETREM ] ROBOT TWIN-CATT GICR |= 1<<INT0; //włączenie przerwania INT0 // BRĄZOWY GICR |= 1<<INT1; //włączenie przerwania INT0 // SZARY vADCInit(); sei(); // uruchomienie globalnych przerwań while(1) // Pętla nieskończona programu głównego { if(!(PIND & 0x04)) // Sprawdzenie stanu przycisku brązowego { } if(!(PIND & 0x08)) // Sprawdzenie stanu przycisku szarego { } PORTB=0x00; } return(0); } Rolą programu głównego jest wyłącznie odpowiednia inicjacja portów wejśd-wyjśd. Porty wejścia, do których dołączono przycisk muszą zostad podciągnięte wewnętrznie do zasilania mikrokontrolera, tak aby zachodziła reakcji na przyciśnięcie i tym samym zwarcie wejścia do masy układu. Zostaje także wywołana funkcja vADCInit(), uruchamiająca moduł przetwornika A/C. Polecenie sei() powoduje uruchomienie globalnych (wszystkich) przerwao. Wyłączenie odbywa się przy pomocy funkcji cli(). 5. Podsumowanie Po budowie mechanicznej robota najtrudniejszym zagadnieniem jest zdecydowanie się na sposób sterowania. W przypadku robota TWIN-CATT zdecydowano się na sterowanie przy pomocy urządzeo przenośnych takich jak: telefon, laptop. Zaprojektowano i wykonano dodatkowe urządzenie, podkreślające nabyte umiejętności inżynierski, jakim jest rękawica bezprzewodowa. Składa się na nią: wykonana z materiału skóropodobnego rękawica odpowiednio przygotowana do montażu elementów elektronicznych takich jak: płyty głównej, płyty z akcelerometrem, modułu Bluetooth oraz koszyka z bateriami. Oprócz wymienionych fizycznych elementów, należy pamiętad o istnieniu odpowiedniego oprogramowania zapisanego wewnątrz pamięci mikrokontrolera, odpowiedzialnego za przekształcanie pomiarów o przyśpieszeniu i wysyłania sygnałów sterujących do robota. Sterowanie przy pomocy rękawicy jest nie tylko praktyczne, ale pokazuję pewien trend – integrację elektroniki codziennej z odzieżą. W kolejnym artykule opisane zostanie wykorzystanie robota jako mobilnego wykrywacza metali. Zapraszam do lektury. Łukasz Przystalski www.przystalski.pl [email protected] Strona 17