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

Podobne dokumenty