Sprawozdanie z projektu: Dalmierz optyczny
Transkrypt
Sprawozdanie z projektu: Dalmierz optyczny
Sprawozdanie z projektu: Dalmierz optyczny Konrad Ćwiąkała 13 czerwca 2008 ∗ Wizualizacja danych sensorycznych - Projekt. Prowadzący - Dr inż. Bogdan Kreczmer 1 ∗ 1 Wstęp Celem projektu było stworzenie dalmierza optycznego, w oparciu o czujnik typu PSD (GP2Y0A02) firmy Sharp. Dodatkowo zrealizowano funkcję skanowania otoczenia w zakresie (−90◦ : +90◦ ). Wizualizację wyników pomiarów zrealizowano przy pomocy wyświetlacza graficznego opartego o sterownik S1D15705. Zaimplementowano także prosty protokół komunikacji z komputerem poprzez złącze RS232. Rysunek 1: Zdjęcie wykonanego urządzenia 2 2 Elementy składowe urządzenia Na poniższym schemacie blokowym, przedstawiono najważniejsze elementy składające się na zrealizowany projekt. W kolejnych podpunktach zostaną przedstawione poszczególne moduły urządzenia. Rysunek 2: schemat blokowy urządzenia Na następnej stronie przedstawiano schemat elektroniczny płyty głównej wykonanego urządzenia. Do płyty głównej poprzez oznaczone na schemacie złącza zostały podłączone odpowiednie moduły. W kolejnych podpunktach zostaną omówione poszczególne elementy płyty głównej oraz moduły peryferyjne dalmierza. 3 1 2 3 4 P2 +12 +5 1 2 +12 +5 U4 U2 U3 IN P1 A 2 IN C3 1000uF L7805 Power 1 Switch 3 2 1 OUT GND OUT GND PB0 2 PB1 7 PB2 10 PB3 15 2 C4 3 1 1 9 PB4 220uF 78L33 IN1 IN2 IN3 IN4 EN1 EN2 4 5 12 13 +5 P6 VCC VC OUT1 OUT2 OUT3 OUT4 16 8 P5 3 6 11 14 1 2 3 4 5 6 GND GND GND GND GND 2 4 6 8 10 R1, R2, ... , R9 = 100K +5 +3.3 R4 R5 R6 R7 R8 P7 Motor PA1 PD4 PD5 PD6 PD7 L293D 1 3 5 7 9 A R9 1 3 5 7 9 2 4 6 8 10 PA2 Keyboard +5 GND ISP GND R3 B B C5 +5 100uF U1 1 2 3 4 5 6 7 8 GND U5 C6 2 16 1uF C7 VDD VCC 1uF 14 7 P9 C 13 8 3 2 1 6 RS232 C8 1uF T1OUT T2OUT C1+ C1C2+ C2T1IN T2IN R1IN R1OUT R2IN R2OUT VEE GND 1 3 4 5 11 10 C9 1uF C10 1uF 14 15 16 17 18 19 20 21 12 9 15 MAX232 9 PB0 (XCK/T0) PB1 (T1) PB2 (AIN0/INT2) PB3 (AIN1/OC0) PB4 (SS) PB5 (MOSI) PB6 (MISO) PB7 (SCK) PD0 (RXD) PD1 (TXD) PD2 (INT0) PD3 (INT1) PD4 (OC1B) PD5 (OC1A) PD6 (ICP) PD7 (OC2) RESET C1 +5 R2 P4 D 1 C? R1 2 33pF 12 13 XTAL2 XTAL1 Y1 16MHz P3 PA0 (ADC0) PA1 (ADC1) PA2 (ADC2) PA3 (ADC3) PA4 (ADC4) PA5 (ADC5) PA6 (ADC6) PA7 (ADC7) PC0 (SCL) PC1 (SDA) PC2 (TCK) PC3 (TMS) PC4 (TDO) PC5 (TDI) PC6 (TOSC1) PC7 (TOSC2) VCC AVCC AREF GND GND 1 2 3 40 39 38 37 36 35 34 33 Sensor GND 22 23 24 25 26 27 28 29 C P8 +5 +3.3 10 30 32 +5 31 11 PC6 PC4 PC2 PC0 PA6 PA4 ATmega32-16PC 1 3 5 7 9 11 13 15 PC7 PC5 PC3 PC1 PA7 PA5 PA3 2 4 6 8 10 12 14 16 LCD 33pF GND GND 3 2 1 Title Dalmierz optyczny - płyta główna D GND Encoder Size Number Revision A4 GND Date: File: 1 2 3 2008-06-03 D:\Work\..\Sheet1.SchDoc Sheet of Drawn By: 4 Konrad Ćwiąkała 2.1 Zasilanie Do zasilania urządzenia zastosowano zasilacz sieciowy, dający na wyjściu napięcie 12V przy prądzie rzędu 500mA. Nieustabilizowany prąd z zasilacza został wykorzystany do sterowania silnikiem krokowym. Stabilizacji napięcia podawanego na elementy cyfrowe dokonano na stabilizatorze liniowym L7805. Przy obniżaniu napięcia z 12V do 5V i stosunkowo dużym poborze prądu przez układ, występowały znaczne straty mocy wydzielanej w postaci ciepła. Dla zabezpieczenia stabilizatora przed przegrzaniem zastosowano radiator o powierzchni 0.25dm2 . Drugi stabilizator widoczny na schemacie (78L33) był wykorzystywany tylko to do generowania napięcia odniesienia dla przetwornika ADC. 2.2 Mikrokontroler W urządzeniu zastosowano mikokontroler ATmega32 należący do rodziny AVR produkowanej przez firmę ATMEL. Jest to 8-bitowy procesor zbudowany w architekturze RISC. Poniżej przedstawiono niektóre własności wybranego mikrokontrolera: • 32 kB pamięci Flash • 2 kB pamięci SRAM • 1kB pamięci EEPROM • 32 programowalne linie I/O • 2 timery 8-bitowe i timer 16-bitowy • 8-kanałowy, 10-bitowy przetwornik ADC • port transmisji szeregowej USART • interfejs SPI Podobnie jak we wszystkich mikrokontrolerach z rodziny AVR, także w przypadku ATmega32, możliwe jest programowanie pamięci Flash w systemie (In-System Programming). Mikrokontroler dostępny jest w kilku obudowach. Ze względu na spore rozmiary urządzenia, oraz jego prototypowy charakter postanowiono wybrać obudowę PDIP-40. 5 2.3 Sterownik silnika krokowego L293D Do sterowania silnikiem krokowym wybrano układ L293D produkowany przez firmę STMicroelectronics. Układ jest dedykowany do sterowania silnikami szczotkowymi przy częstotliwościach sygnałów sterujących dochodzących do 5kHz. Ze względu na swoją architekturę może on zostać także wykorzystany do sterowania unipolarnym silnikiem krokowym. W omawianym urządzeniu każdy kanał sterownika obsługiwał jedno uzwojenie silnika. W czasie pracy oba sygnały enable były ustawione na stałe (Sterowanie sygnałami enable poprzez PWM mogło zapewnić pracę silnika w trybie mikrokrokowym). Rysunek 3: Architektura sterownika L293D Wykorzystany układ zapewnia możliwość sterowania prądami rzędu 600mA na kanał (1.2A w impulsie). Układ posiada dodatkowo wbudowane diody zabezpieczające oraz zabezpieczenie temperaturowe. Na sterownik można podać napięcie dochodzące do 36V, przy obsłudze logiki na poziomach TTL. Do sterowania układem wykorzystano 6 linii wyjściowych mikrokontrolera (4 na obsługę kanałów i 2 generujące sygnały enable). 6 2.4 MAX232 (transceiver RS232 - TTL) Układ MAX232 został wykorzystany w standardowej konfiguracji jako dwukierunkowy translator poziomów sygnałów RS232 i TTL. Zastosowanie układu było konieczne dla zapewnienia komunikacji urządzenia z komputerem przez port szeregowy. Rysunek 4: Architektura transceivera MAX232 Na chwilę obecną w urządzeniu zaimplementowana została jedynie prosta jednokierunkowa komunikacja z komputerem. Komunikacja odbywa się w trybie tekstowym przy baud rate równym 19200. Jeden pakiet zawiera 8 bitów danych, 1 bit stopu, oraz bit parzystości (even parity). Dla zabezpieczenia przed utratą niektórych pakietów wysyłane paczki mają określony format. Zaimplementowano trzy formaty wysyłanych paczek danych: • B %s; • D %d,%d; • S %d,%d; Pierwsze formatowanie oznacza wystąpienie zdarzenia (np. naciśnięcie przycisku), drugie pracę w trybie dalmierza, a trzecie w trybie skanera. W dwóch ostatnich formatowaniach wysyłane liczby oznaczają odpowiednio pozycję wieżyczki i zmierzoną odległość (w centymetrach). Każda paczka zakończona jest średnikiem. 7 2.5 Czujnik GP2Y0A02 W urządzeniu zastosowano czujnik typu PSD produkowany przez firmę Sharp. Wybrany czujnik ma następujące właściwości: • efektywny zasięg pomiaru 20cm-150cm • zasilanie napięciem 4.5-5.5V • napięcie wyjściowe 0-3V Rysunek 5: Wygląd zewnętrzny czujnika GP2Y0A02 Rysunek 6: Zależność napięcia wyjściowego od mierzonej odległości 8 2.6 Wyświetlacz LCD z kontrolerem S1D15705 W urządzeniu zamontowano wyświetlacz graficzny o rozdzielczości 162x64 pikseli. Wyświetlacz posiada wbudowane podświetlenie diodowe. Całość (wyświetlacz z podświetleniem) jest zasilana napięciem 5V i pobiera w czasie pracy prąd rzędu 250mA. Rysunek 7: Wygląd zastosowanego układu wyświetlacza Do obsługi wyświetlacza konieczne było wykorzystanie 13 linii wyjściowych mikrokontrolera. 2.7 Klawiatura Częścią interfejsu urządzenia jest 6-przyciskowa klawiatura. Wyjścia klawiszy niewciśniętych były zwarte do masy. Odcięcie od masy i podanie na odpowiadające przyciskowi wejście mikrokontrolera napięcia 5V następowało po wciśnięciu przycisku. 9 2.8 Silnik krokowy M42SP-4 Do zrealizowania ruchomej wieżyczki skanera wykorzystano unipolarny silnik krokowy M42SP-4 firmy Mitsumi. Silniki tego typu są stosowane w drukarkach do poruszania karetki z tuszem. Wykorzystany silnik ma następujące parametry: • Znamionowe napięcie zasilania 24V • Pobór prądu przy napięciu znamionowym 646mA • Rozdzielczość 3.75◦ /step W skonstruowanym urządzeniu sterowanie silnikiem odbywało się zawsze w trybie półkrokowym, dzięki czemu uzyskano efektywną rozdzielczość skanera równą 1.875◦ . Do wykrycia skrajnych położeń wieżyczki skonstruowano prosty czujnik krańcowy. Do spodniej części silnika doklejono 2 przełączniki, natomiast do wału silnika przyczepiono kawałek laminatu. Laminat w skrajnych położeniach, włączając jeden z przełączników wywoływał przerwanie mikrokontrolera. Rysunek 8: Wygląd silnika, oraz stworzonego czujnika położeń krańcowych 10 3 Konstrukcja urządzenia Do ostatecznego montażu elementów składowych wykorzystano dwie standardowe obudowy plastikowe. Mniejsza stanowi obrotową wieżyczkę urządzenia wyposażoną w czujnik. Większa zawiera w sobie pozostałe moduły, łącznie z gniazdem zasilania i gniazdem DB9-F pozwalającym na podłączenie urządzenia do portu szeregowego komputera. Rysunek 9: Mniejsza obudowa z okienkiem czujnika Rysunek 10: Obie obudowy połączone za pomocą wału silnika 11 Dla ułatwienia obsługi urządzenia zbudowano interfejs składający się z wyświetlacza graficznego i rozmieszczonych wokół niego klawiszy. Rozmieszczenie klawiszy jest zgodne z menu, programu obsługującego urządzenie, dzięki czemu użytkowanie dalmierza jest bardzo proste. Rysunek 11: Wygląd interfejsu urządzenia 4 Program wsadowy mikrokontrolera Program obsługujący urządzenie napisano w języku C, w środowisku CodeVision AVR. Największym problemem okazała się obsługa wyświetlacza, która wymagała napisania całej biblioteki funkcji pozwalającej na wygodną obsługę programową wyświetlania zarówno w trybie znakowym jak i w trybie graficznym. Podstawowe funkcje obsługiwały: inicjalizacja pracy wyświetlacza wyczyszczenie całego wyświetlacza wypełnienie całego wyświetlacza wysłanie komendy do wyświetlacza wysłanie danych do wyświetlacza wysłanie znaku do wyświetlacza wysłanie napisu do wyświetlacza przejście do wskazanego miejsca void void void void void void void void 12 lcd lcd lcd lcd lcd lcd lcd lcd init(); clear(); fill(); wrc(char data); wrd(char data); wrw(char sign); prnt(char *string); gotoxy(int x,int y); Na chwilę obecną nie udało się zrealizować wszystkich założeń narzuconych wcześniej na część programową projektu. Obsługiwane są dwa tryby pracy skanera: • Pomiar ciągły • Skanowanie Przy pracy urządzenia w trybie pomiar ciągły wieżyczka skanera jest ustawiana na zadanej pozycji, a na wyświetlaczu pokazywana jest odległość do przeszkody. Tryb skanowanie zapewnia pomiar odległości w zakresie −90◦ : +90◦ . Wynik pomiaru jest wyświetlany w formie wykresu. Na osi X przedstawiony jest kąt obrotu wieżyczki, natomiast na osi Y przedstawiona jest odległość do przeszkody. 5 Przykłady działania dalmierza W tym rozdziale zamieszczono zdjęcia obrazujące działanie skonstruowanego urządzenia w różnych przypadkach ustawienia sceny, przy pracy w trybie dalmierza oraz w trybie skanera. Rysunek 12: Obiekt w odległości 24cm na wprost 13 Rysunek 13: Obiekt w odległości 38cm na wprost Rysunek 14: Brak obiektu w odległości mniejszej niż 1.5m przed dalmierzem 14 Rysunek 15: Obiekt w odległości 24cm na pozycji około −30◦ Rysunek 16: Skanowanie wnęki 15 Rysunek 17: Przeszkoda na tle wnęki Rysunek 18: Dwie oddzielne płaskie przeszkody 16 Rysunek 19: Narożnik Rysunek 20: Dwie płaskie przeszkody w różnych odległościach 17 Rysunek 21: Trzy wąskie przeszkody 6 Podsumowanie Badania dowiodły, że urządzenie działa poprawnie. Pomiar odległości w trybie dalmierza zapewnia dokładność rzędu ±1cm, przy odległościach do przeszkody mniejszych niż 70cm. Wraz ze wzrostem odległości do przeszkody wzrasta błąd pomiaru. Skaner zbudowany na bazie czujnika typu PSD jest pozbawiony głównych wad związanych z konstrukcjami ultradźwiękowymi. Możemy bardzo dobrze odwzorowywać wszelki wnęki i narożniki, a dokładność pomiaru jest w bardzo małym stopniu zależna od faktury przeszkody. Wykorzystany w projekcie czujnik ma również swoje wady. Sensor PSD jest bardzo czuły na zakłócenia w podczerwieni. Pracę urządzenia można bardzo łatwo zaburzyć oświetlając czujnik dowolnym źródłem promieniowania podczerwonego np. pilotem do telewizora. 18