Spisu treści:

ZDALNIE STEROWANY ROBOCAR NA PODCZERWIEŃ ZA POMOCĄ AVR (ATMEGA32) MCU: 5 kroków
ZDALNIE STEROWANY ROBOCAR NA PODCZERWIEŃ ZA POMOCĄ AVR (ATMEGA32) MCU: 5 kroków

Wideo: ZDALNIE STEROWANY ROBOCAR NA PODCZERWIEŃ ZA POMOCĄ AVR (ATMEGA32) MCU: 5 kroków

Wideo: ZDALNIE STEROWANY ROBOCAR NA PODCZERWIEŃ ZA POMOCĄ AVR (ATMEGA32) MCU: 5 kroków
Wideo: JADA Disney Myszka Miki Samochód Kabriolet RC Roadster Zdalnie Sterowany 2024, Lipiec
Anonim
ZDALNIE STEROWANY ROBOCAR NA PODCZERWIEŃ Z WYKORZYSTANIEM AVR (ATMEGA32) MCU
ZDALNIE STEROWANY ROBOCAR NA PODCZERWIEŃ Z WYKORZYSTANIEM AVR (ATMEGA32) MCU

Niniejszy PROJEKT opisuje projekt i wdrożenie zdalnie sterowanego RoboCar na podczerwień (IR), który może być wykorzystywany do różnych zautomatyzowanych aplikacji sterowania bezzałogowego. Zaprojektowałem zdalnie sterowany RoboCar (ruch lewo-prawo/przód-tył). Cały system oparty jest na mikrokontrolerze (Atmega32), co sprawia, że system sterowania jest inteligentniejszy i łatwy do modyfikacji dla innych aplikacji. Umożliwia użytkownikowi obsługę lub sterowanie RoboCar i sterowanie wyłącznikiem sieciowym z odległości około 5 metrów.

Słowa kluczowe: dekoder IR, mikrokontroler AVR (Atmega32), pilot do telewizora, komunikacja bezprzewodowa

_

Krok 1: Komunikacja IntraRed

Komunikacja wewnątrzczerwona
Komunikacja wewnątrzczerwona

Zasada komunikacji IR:

a) transmisja IR

Nadajnik diody IR w swoim obwodzie, która emituje światło podczerwone dla każdego podanego mu impulsu elektrycznego. Impuls ten jest generowany po naciśnięciu przycisku na pilocie, zamykając w ten sposób obwód, zapewniając polaryzację diody LED. Dioda LED będąc przesunięta emituje światło o długości fali 940nm w postaci serii impulsów odpowiadających wciśniętemu przyciskowi. Jednakże, ponieważ wraz z diodą IR wiele innych źródeł światła podczerwonego, takich jak ludzie, żarówki, słońce itp., przesyłane informacje mogą być zakłócone. Rozwiązaniem tego problemu jest modulacja. Przesyłany sygnał jest modulowany przy użyciu częstotliwości nośnej 38 kHz (lub dowolnej innej częstotliwości od 36 do 46 kHz). Dioda IR oscyluje z tą częstotliwością przez czas trwania impulsu. Informacje lub sygnały świetlne są modulowane szerokością impulsów i są zawarte w częstotliwości 38 kHz. Transmisja w podczerwieni odnosi się do energii w obszarze widma promieniowania elektromagnetycznego przy długościach fal dłuższych niż światło widzialne, ale krótszych niż fale radiowe. Odpowiednio częstotliwości podczerwieni są wyższe niż mikrofal, ale niższe niż światła widzialnego. Naukowcy dzielą widmo promieniowania podczerwonego (IR) na trzy regiony. Długości fal podawane są w mikronach (symbol µ, gdzie 1 µ = 10-6 metra) lub w nanometrach (skrót nm, gdzie 1 nm = 10-9 metra = 0,001 5). Pasmo bliskiej podczerwieni zawiera energię w zakresie długości fal najbliższych widzialności, od około 0,750 do 1300 5 (750 do 1300 nm). Pośrednie pasmo IR (zwane także środkowym pasmem IR) składa się z energii w zakresie 1.300 do 3.000 5 (1300 do 3000 nm). Pasmo dalekiej podczerwieni rozciąga się od 2.000 do 14.000 5 (3000 nm do 1.4000 x 104 nm).

b) Odbiór IR

Odbiornik składa się z fotodetektora, który wytwarza wyjściowy sygnał elektryczny, gdy pada na niego światło. Sygnał wyjściowy detektora jest filtrowany przy użyciu filtra wąskopasmowego, który odrzuca wszystkie częstotliwości poniżej lub powyżej częstotliwości nośnej (w tym przypadku 38 kHz). Przefiltrowane wyjście jest następnie przekazywane do odpowiedniego urządzenia, takiego jak mikrokontroler lub mikroprocesor, który steruje urządzeniami, takimi jak komputer PC lub robot. Wyjście z filtrów można również podłączyć do oscyloskopu w celu odczytu impulsów.

Zastosowania IR:

Podczerwień jest wykorzystywana w różnych aplikacjach komunikacji bezprzewodowej, monitoringu i kontroli. Oto kilka przykładów:

· Skrzynki zdalnego sterowania do domowej rozrywki

· Bezprzewodowe (sieci lokalne)

· Powiązania między notebookami a komputerami stacjonarnymi

· Modem bezprzewodowy

· Detektory włamań

· Detektory ruchu

· Czujniki przeciwpożarowe

· Systemy noktowizyjne

· Medyczny sprzęt diagnostyczny

· Systemy naprowadzania rakiet

· Urządzenia do monitoringu geologicznego

Przesyłanie danych w podczerwieni z jednego urządzenia do drugiego jest czasami nazywane wiązką.

Krok 2: Czujnik podczerwieni i protokół NEC Fromat

Czujnik podczerwieni i protokół NEC Fromat
Czujnik podczerwieni i protokół NEC Fromat
Czujnik podczerwieni i protokół NEC Fromat
Czujnik podczerwieni i protokół NEC Fromat
Czujnik podczerwieni i protokół NEC Fromat
Czujnik podczerwieni i protokół NEC Fromat
Czujnik podczerwieni i protokół NEC Fromat
Czujnik podczerwieni i protokół NEC Fromat

Czujniki podczerwieni (ryc.1)

TSOP1738, SFH-5110-38 (38kHz)

Czujniki TSOP Cechy:

  • Przedwzmacniacz i fotodetektor znajdują się w jednym opakowaniu
  • Filtr wewnętrzny dla częstotliwości PCM
  • Ulepszone ekranowanie przed zakłóceniami pola elektrycznego
  • Kompatybilność TTL i CMOS
  • Wyjście aktywne niskie Niskie zużycie energii
  • Wysoka odporność na światło otoczenia
  • Możliwa ciągła transmisja danych

Protokół NEC:

Protokół transmisji NEC IR wykorzystuje impulsowe kodowanie bitów wiadomości. Każda seria impulsów ma długość 562,5 µs, przy częstotliwości nośnej 38 kHz (26,3 µs). Bity logiczne są przesyłane w następujący sposób (Rys.2):

  • Logiczne „0” – impuls impulsu 562,5 µs, po którym następuje przestrzeń 562,5 µs, z całkowitym czasem transmisji wynoszącym 1,125 ms
  • Logiczna „1” – seria impulsów 562,5 µs, po której następuje odstęp 1,6875 ms, z całkowitym czasem transmisji 2,25 ms

Impuls nośny składa się z 21 cykli przy 38kHz. Impulsy mają zwykle stosunek znak/przestrzeń 1:4, aby zmniejszyć pobór prądu:

(Rys.3)

Każda sekwencja kodu zaczyna się od 9ms impulsu, znanego jako impuls AGC. Po tym następuje cisza 4,5 ms:

(Rys.4)

Dane składają się z 32 bitów, 16-bitowego adresu, po którym następuje 16-bitowe polecenie, pokazane w kolejności, w jakiej są przesyłane (od lewej do prawej):

(Ryc.5)

Każdy z czterech bajtów bitów danych jest wysyłany w pierwszej kolejności. Rysunek 1 przedstawia format ramki transmisyjnej NEC IR dla adresu 00h(00000000b) i polecenia ADh (10101101b).

Do przesłania ramki danych potrzeba łącznie 67,5 ms. Potrzebuje 27 ms, aby przesłać 16 bitów adresu (adres + odwrotność) i 16 bitów polecenia (polecenie + odwrotność).

(Rys.6)

Czas potrzebny na przesłanie ramki:

16 bitów na adres (adres + odwrotność) wymaga 27 ms na przesłanie czasu, a 16 bitów na polecenie (polecenie + odwrotność) wymaga również 27 ms na przesłanie czasu. ponieważ (adres + adres odwrotny) lub (polecenie+polecenie odwrotne) zawsze będzie zawierał 8 zer i 8 zer 1, więc (8 * 1,125 ms) + (8 * 2,25 ms) == 27 ms. zgodnie z tym całkowity czas potrzebny do przesłania ramki wynosi (9ms +4,5ms +27ms+27ms) = 67,5ms.

KODY POWTARZALNE: Jeśli przycisk na pilocie jest wciśnięty, zostanie wydany kod powtórzenia, zwykle około 40 ms po impulsie oznaczającym koniec wiadomości. Powtórzony kod będzie nadal wysyłany w odstępach 108 ms, aż do ostatecznego zwolnienia klawisza. Powtórzony kod składa się z następujących elementów, w kolejności:

  • Wiodący impuls impulsowy o długości 9 ms
  • przestrzeń 2,25 ms
  • impuls impulsu 562,5 µs oznaczający koniec przestrzeni (a tym samym koniec transmitowanego kodu powtórzenia).

(Rys.7)

Obliczanie opóźnienia (1ms):

Częstotliwość zegara = 11,0592 MHz

Cykl maszyny = 12

Opóźnienie=1ms

TimerValue= 65536 - ((Opóźnienie * Częstotliwość Zegara)/Cykl maszyny)=65536-((1ms * 11.0592Mhz)/12)

= 65536 - 921= 0xFC67

Krok 3: Sterowanie silnikiem prądu stałego za pomocą L293D

Sterowanie silnikiem prądu stałego za pomocą L293D
Sterowanie silnikiem prądu stałego za pomocą L293D

Silnik prądu stałego

Silnik prądu stałego przekształca energię elektryczną w energię mechaniczną, która może być wykorzystana do wykonywania wielu użytecznych prac. Może generować ruch mechaniczny, taki jak Idź do przodu/do tyłu mojego RoboCar. Silniki prądu stałego są dostępne w różnych wartościach znamionowych, takich jak 6 V i 12 V. Posiada dwa przewody lub piny. Możemy odwrócić kierunek obrotów, odwracając polaryzację wejścia.

Tutaj preferujemy L293D, ponieważ wartość 600 mA jest dobra do napędzania małych silników prądu stałego, a diody zabezpieczające są zawarte w samym układzie scalonym. Opis każdego pinu jest następujący: Włącz piny: Są to pin nr. 1 i nr pin. 9. Nr PIN 1 służy do włączenia sterownika Half-H 1 i 2. (mostek H po lewej stronie). Nr pinu 9 służy do włączenia sterownika mostka H 3 i 4. (mostek H po prawej stronie).

Koncepcja jest prosta, jeśli chcesz użyć konkretnego mostka H, musisz nadać wysoką logikę odpowiednim pinom umożliwiającym wraz z zasilaniem układu scalonego. Ten pin może być również użyty do sterowania prędkością silnika za pomocą techniki PWM. VCC1 (Pin 16): Pin zasilania. Podłącz go do zasilania 5V. VCC2 (Pin 8): Zasilanie silnika. Zastosować do niego napięcie +ve zgodnie z wartością znamionową silnika. Jeśli chcesz napędzać silnik przy 12V, zastosuj 12V na tym bolcu.

Możliwe jest również napędzanie silnika bezpośrednio z akumulatora innego niż ten, który jest używany do zasilania układu, wystarczy podłączyć zacisk +ve tej baterii do pinu VCC2 i połączyć oba akumulatory z uziemieniem. (maksymalne napięcie na tym pinie wynosi 36 V zgodnie z jego arkuszem danych). GND (piny 4, 5, 12, 13): Podłącz je do wspólnego GND obwodu. Wejścia (piny 2, 7, 10, 15):

Są to piny wejściowe, przez które sygnały sterujące są podawane przez mikrokontrolery lub inne obwody/układy scalone. Na przykład, jeśli na pinie 2 (wejście sterownika 1. połowy H) podamy Logic 1 (5V), otrzymamy napięcie równe VCC2 na odpowiednim pinie wyjściowym sterownika 1. połowy H, czyli pin nr. 3. Podobnie dla logicznego 0 (0V) na pinie 2, pojawia się 0V na pinie 3. Wyjścia (Pin 3, 6, 11, 14): Wyjścia pinów. Zgodnie z sygnałem wejściowym przychodzi sygnał wyjściowy.

Ruchy silnika A B

-----------------------------------------------------------------------------------------

……………Stop: Niski: Niski

……Zgodnie z ruchem wskazówek zegara: Niska: Wysoka

Przeciwnie do ruchu wskazówek zegara: Wysoki: Niski

……………. Stop: Wysoki: Wysoki

Krok 4: Schematy obwodów sterownika silnika i czujnika podczerwieni

Schematy obwodów sterownika silnika i czujnika podczerwieni
Schematy obwodów sterownika silnika i czujnika podczerwieni
Schematy obwodów sterownika silnika i czujnika podczerwieni
Schematy obwodów sterownika silnika i czujnika podczerwieni
Schematy obwodów sterownika silnika i czujnika podczerwieni
Schematy obwodów sterownika silnika i czujnika podczerwieni

ATmega32 to 8-bitowy mikrokontroler CMOS o małej mocy oparty na architekturze RISC wzmocnionej przez AVR. Wykonując potężne instrukcje w jednym cyklu zegara, ATmega32 osiąga przepustowość zbliżoną do 1 MIPS na MHz, umożliwiając projektantowi systemu optymalizację zużycia energii w stosunku do szybkości przetwarzania.

Rdzeń AVR łączy bogaty zestaw instrukcji z 32 rejestrami roboczymi ogólnego przeznaczenia. Wszystkie 32 rejestry są bezpośrednio połączone z jednostką arytmetyczno-logiczną (ALU), umożliwiając dostęp do dwóch niezależnych rejestrów w jednej instrukcji wykonywanej w jednym cyklu zegara. Powstała architektura jest bardziej wydajna pod względem kodu, a jednocześnie osiąga przepustowość do dziesięciu razy większą niż konwencjonalne mikrokontrolery CISC.

ATmega32 zapewnia następujące funkcje:

  • 32 KB programowalnej pamięci Flash w systemie z możliwością odczytu podczas zapisu,
  • 1024 bajty EEPROM, 2K bajtów SRAM,
  • 32 linie I/O ogólnego przeznaczenia,
  • 32 rejestry pracy ogólnego przeznaczenia,
  • interfejs JTAG dla Boundaryscan,
  • Obsługa i programowanie na chipie, trzy elastyczne timery/liczniki z trybami porównywania, przerwania wewnętrzne i zewnętrzne, szeregowy programowalny USART, dwuprzewodowy interfejs szeregowy zorientowany bajtowo, 8-kanałowy,
  • 10-bitowy ADC z opcjonalnym różnicowym stopniem wejściowym z programowalnym wzmocnieniem (tylko pakiet TQFP),
  • programowalny Watchdog Timer z wewnętrznym oscylatorem,
  • port szeregowy SPI i
  • sześć trybów oszczędzania energii wybieranych programowo.

    • Tryb bezczynności zatrzymuje procesor, pozwalając jednocześnie na USART,
    • Interfejs dwuprzewodowy, przetwornik A/D,
    • SRAM,
    • Zegar/Liczniki,
    • port SPI i
    • przerwać system, aby kontynuować działanie.
    • Tryb wyłączania zapisuje zawartość rejestru, ale zamraża oscylator, wyłączając wszystkie inne funkcje układu do następnego przerwania zewnętrznego lub resetu sprzętowego.
    • W trybie oszczędzania energii zegar asynchroniczny nadal działa, umożliwiając użytkownikowi utrzymanie podstawy zegara, gdy reszta urządzenia jest uśpiona.
    • Tryb redukcji szumów ADC zatrzymuje procesor i wszystkie moduły we/wy z wyjątkiem zegara asynchronicznego i ADC, aby zminimalizować szum przełączania podczas konwersji ADC
    • W trybie czuwania oscylator kwarcowy/rezonator działa, podczas gdy reszta urządzenia jest w stanie uśpienia. Pozwala to na bardzo szybki rozruch w połączeniu z niskim zużyciem energii.
    • W trybie rozszerzonej gotowości zarówno główny oscylator, jak i zegar asynchroniczny nadal działają.

Wszystkie powiązane obwody są tutaj podane i główny obwód (atmega32) jest również podany.

Krok 5: Programy Avr

Programy AVR
Programy AVR
Programy AVR
Programy AVR

1. Dla "czujnika zdalnego":

#włącz #włącz

#include "remote.h"

//Global volatile unsigned int Czas; //Główny zegar, przechowuje czas w 10us, //Zaktualizowany przez ISR(TIMER0_COMP) volatile unsigned char BitNo; //Pozycja kolejnego bitu ulotnego unsigned char ByteNo; //Pozycja bieżącego bajtu

volatile unsigned char IrData[4]; //Cztery bajty danych pakietu Ir //2-bajtowy adres 2-bajtowy Dane volatile unsigned char IrCmdQ[QMAX];//Ostateczne polecenie odebrane (bufor)

volatile unsigned char PrevCmd; //Używane do powtarzania

//Zmienne używane do rozpoczęcia powtarzania tylko po naciśnięciu klawisza przez określony czas

volatile unsigned char Powtórz; //1=tak 0=nie ulotny unsigned char RCount; //liczba powtórzeń

nietrwały znak QFront=-1, QEnd=-1;

volatile unsigned char State; //Stan odbiorcy

volatile unsigned char Edge; //Krawędź przerwania [RISING=1 OR FALLING=0]

volatile unsigned int stop;

/************************************************** *********************************************/ /* URUCHAMIANIE FUNKCJI * / /************************************************** *********************************************/

void RemoteInit() {

znak ja; dla(i=0;i<4;i++)IDane=0;

stop=0; Stan=IR_VALIDATE_LEAD_HIGH; Krawędź=0; Powtórz=0;

//Ustaw zegar1 //------------ TCCR0|=((1<

TIMSK|=(1<

OCR0=TIMER_COMP_VAL; //Ustaw wartość porównania

unsigned char GetRemoteCmd(char wait) { unsigned char cmd;

if(czekaj) while(QFront==-1); else if(QFront==-1) return (RC_NONE);

cmd=IrKmdQ[QFront];

if(QFront==QEnd) QFront=QEnd=-1; else { if(QFront==(QMAX-1) QFront=0; jeszcze QFront++; }

powrót cmd;

}

2. główny():

int główny(unieważniony){

uint8_t cmd=0; DDRB=0x08;

DDRD=0x80;

DDRC=0x0f; PORTC=0x00;

while (1) //Nieskończona pętla do aktywnego czujnika podczerwieni {

cmd=PobierzZdalnePolecenia(1);

przełącznik(cmd) {

case xx: { //BOT Przechodzi do przodu //Ch+ btn forwardmotor();

przerwa; // Oba silniki w kierunku do przodu

}

………………………………………………….

………………………………………………….

………………………………………………….

domyślnie: PORTC=0x00;przerwa; // Zarówno lewy, jak i prawy silnik zatrzymują się }

}

}/*Koniec głównego*/

……………………………………………………………………………………………………………………

// To podstawowy model, ale mogę go używać w trybie PWM.

//…………………………………………….. Baw się dobrze……………………………………………………//

Zalecana: