Съдържание:
- Стъпка 1: Вътрешночервена комуникация
- Стъпка 2: IR сензор и протокол NEC Fromat
- Стъпка 3: Управление на постоянен двигател с помощта на L293D
- Стъпка 4: Схеми за задвижване на двигателя и IR сензор
- Стъпка 5: Avr програми
Видео: INFRA ЧЕРВЕН ДИСТАНЦИОНЕН РОБОКАР, ИЗПОЛЗВАЩ AVR (ATMEGA32) MCU: 5 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Настоящият ПРОЕКТ описва проектирането и изпълнението на инфрачервен (IR) дистанционно управляван RoboCar, който може да се използва за различни автоматизирани безпилотни приложения за управление. Аз съм проектирал RoboCar с дистанционно управление (движение наляво-надясно/отпред-назад). Цялата система е базирана на микроконтролер (Atmega32), който прави системата за управление по -интелигентна и лесна за промяна за други приложения. Тя позволява на потребителя да управлява или управлява RoboCar и да управлява захранващия превключвател от около 5 метра разстояние.
Ключови думи: IR декодер, AVR (Atmega32) микроконтролер, дистанционно управление на телевизора, безжична комуникация
_
Стъпка 1: Вътрешночервена комуникация
Принцип на IR комуникация:
а) IR предаване
Предавателят на инфрачервен светодиод в неговата верига, който излъчва инфрачервена светлина за всеки подаден му електрически импулс. Този импулс се генерира при натискане на бутон на дистанционното управление, като по този начин завършва веригата, осигурявайки отклонение на светодиода. Светодиодът, когато е пристрастен, излъчва светлина с дължина на вълната 940 nm като поредица от импулси, съответстващи на натиснатия бутон. Въпреки това, тъй като заедно с инфрачервения светодиод, много други източници на инфрачервена светлина, като нас, хората, крушки, слънце и т.н., предаваната информация може да бъде намесена. Решението на този проблем е чрез модулация. Предаваният сигнал се модулира, като се използва носеща честота от 38 KHz (или всяка друга честота между 36 до 46 KHz). Инфрачервеният светодиод е направен да се колебае с тази честота за продължителността на импулса. Информацията или светлинните сигнали са модулирани по ширина на импулса и се съдържат в честотата 38 KHz. Инфрачервеното предаване се отнася до енергия в областта на спектъра на електромагнитното излъчване при дължини на вълните по -дълги от тези на видимата светлина, но по -къси от тези на радиовълните. Съответно инфрачервените честоти са по -високи от тези на микровълните, но по -ниски от тези на видимата светлина. Учените разделят спектъра на инфрачервеното лъчение (IR) на три области. Дължините на вълните са посочени в микрони (символизирани µ, където 1 µ = 10-6 метра) или в нанометри (съкратено nm, където 1 nm = 10-9 метър = 0.001 5). Близкият инфрачервен обхват съдържа енергия в обхвата на дължините на вълните, най -близки до видимата, от приблизително 0.750 до 1.300 5 (750 до 1300 nm). Междинната IR лента (наричана още средна IR лента) се състои от енергия в диапазона 1.300 до 3.000 5 (1300 до 3000 nm). Далечната IR лента се простира от 2.000 до 14.000 5 (3000 nm до 1.4000 x 104nm).
б) IR приемане
Приемникът се състои от фотодетектор, който развива изходящ електрически сигнал при падане на светлина върху него. Изходът на детектора се филтрира с помощта на теснолентов филтър, който изхвърля всички честоти под или над носещата честота (38 KHz в този случай). След това филтрираният изход се подава на подходящо устройство като микроконтролер или микропроцесор, което управлява устройства като компютър или робот. Изходът от филтрите може също да бъде свързан към осцилоскопа за отчитане на импулсите.
Приложения на IR:
Инфрачервеният се използва в различни приложения за безжична комуникация, мониторинг и контрол. Ето няколко примера:
· Кутии за дистанционно управление за домашно забавление
· Безжична връзка (локални мрежи)
· Връзки между преносими компютри и настолни компютри
· Безжичен модем
· Детектори за проникване
· Детектори на движение
· Пожарни сензори
· Системи за нощно виждане
· Медицинско диагностично оборудване
· Системи за насочване на ракети
· Устройства за геоложки мониторинг
Предаването на IR данни от едно устройство на друго понякога се нарича излъчване.
Стъпка 2: IR сензор и протокол NEC Fromat
IR сензори (Фиг. 1)
TSOP1738, SFH-5110-38 (38kHz)
Характеристики на сензорите TSOP:
- Предварителният усилвател и фотодетекторът са в една опаковка
- Вътрешен филтър за PCM честота
- Подобрена защита срещу смущения в електрическото поле
- Съвместимост с TTL и CMOS
- Изход активен нисък Ниска консумация на енергия
- Висок имунитет срещу околната светлина
- Възможно е непрекъснато предаване на данни
NEC протокол:
Протоколът за предаване на IR NEC използва импулсно кодиране на разстоянията на съобщението. Всеки импулсен пакет е с дължина 562,5 µs, при носеща честота 38 kHz (26,3 µs). Логическите битове се предават, както следва (Фиг.2):
- Логически „0“- 562,5 µs импулсен пакет, последван от 562,5 µs интервал, с общо време на предаване 1,125 ms
- Логически „1“- 562,5 µs импулсен пакет, последван от 1,6875ms интервал, с общо време на предаване 2,25ms
Носещият импулс се състои от 21 цикъла при 38 kHz. Импулсите обикновено имат съотношение маркировка/пространство 1: 4, за да се намали консумацията на ток:
(Фиг. 3)
Всяка кодова последователност започва с 9ms импулс, известен като AGC импулс. Това е последвано от 4.5 мс мълчание:
(Фиг. 4)
След това данните се състоят от 32 бита, 16-битов адрес, последван от 16-битова команда, показана в реда, в който се предават (отляво надясно):
(Фиг. 5)
Четирите байта битове с данни се изпращат първо най -малкия бит. Фигура 1 илюстрира формата на NEC IR предавателен кадър за адрес от 00h (00000000b) и команда на ADh (10101101b).
За предаване на рамка за съобщение са необходими общо 67,5 ms. Нужни са 27ms за предаване на 16 бита адрес (адрес + обратен) и 16 бита на команда (команда + обратен).
(Фиг. 6)
Време, необходимо за предаване на кадъра:
16 бита за адреса (адрес + обратен) изискват 27ms за предаване на времето. А 16 -те бита за командата (command + inverse) също изискват 27ms за предаване на време. защото (адрес + адрес обратен) или (команда + команда обратна) винаги ще съдържат 8 '0 и 8' 1, така че (8 * 1.125ms) + (8 * 2.25ms) == 27 ms. според това общо време, необходимо за предаване на кадъра е (9ms +4.5ms +27ms +27ms) = 67.5 ms.
КОДОВЕ НА ПОВТОРЯНЕ: Ако ключът на дистанционното управление се държи натиснат, ще бъде издаден код за повторение, обикновено около 40 мс след импулса, който означава края на съобщението. Кодът за повторение ще продължи да се изпраща на интервали от 108 ms, докато ключът най -накрая бъде освободен. Кодът за повторение се състои от следното, в следния ред:
- 9ms водещ импулс
- пространство 2,25 мс
- импулс от 562,5 µs, който маркира края на интервала (и следователно края на предавания код за повторение).
(Фиг. 7)
Изчисляване на забавяне (1ms):
Тактова честота = 11.0592 Mhz
Машинен цикъл = 12
Забавяне = 1ms
TimerValue = 65536 - ((Закъснение * ClockFreq)/Машинен цикъл) = 65536 - ((1ms * 11.0592Mhz)/12)
= 65536 - 921 = 0xFC67
Стъпка 3: Управление на постоянен двигател с помощта на L293D
DC мотор
DC моторът преобразува електрическата енергия в механична енергия, която може да се използва за извършване на много полезни работи. Той може да произвежда механични движения, като Go Forward/Backword на моя RoboCar. DC двигателите се предлагат в различни оценки като 6V и 12V. Той има два проводника или щифта. Можем да обърнем посоката на въртене, като обърнем полярността на входа.
Тук предпочитаме L293D, тъй като рейтинг от 600mA е добър за задвижване на малки DC двигатели, а защитните диоди са включени в самата IC. Описанието на всеки щифт е следното: Активиране на щифтове: Това са щифтове №. 1 и щифт №. 9. Пин №. 1 се използва за активиране на Half-H драйвер 1 и 2. (H мост от лявата страна). Пин № 9 се използва за активиране на H-мостови драйвери 3 и 4. (H мост от дясната страна).
Концепцията е проста, ако искате да използвате определен H мост, трябва да дадете висока логика на съответните щифтове за активиране заедно с захранването на IC. Този щифт може да се използва и за управление на скоростта на двигателя чрез PWM техника. VCC1 (Pin 16): Захранващ щифт. Свържете го към 5V захранване. VCC2 (Pin 8): Захранване на двигателя. Приложете +ve напрежение към него според номинала на двигателя. Ако искате да задвижвате двигателя си с 12V, приложете 12V към този щифт.
Възможно е също така да задвижвате двигателя директно върху батерия, различна от тази, използвана за захранване на веригата, Просто свържете +ve терминала на тази батерия към щифта VCC2 и направете GND на двете батерии общи. (МАКСИМАЛНОТО напрежение на този извод е 36V според листа с данни). GND (Pins 4, 5, 12, 13): Свържете ги към общата GND на веригата. Входове (Pins 2, 7, 10, 15):
Това са входни щифтове, чрез които управляващи сигнали се подават от микроконтролери или други схеми/интегрални схеми. Например, ако на щифт 2 (вход на 1 -вото полувреме H драйвер) дадем Logic 1 (5V), ще получим напрежение, равно на VCC2 на съответния изходен извод на 1 -вото полувреме на H драйвера, т.е. 3. По същия начин за Logic 0 (0V) на Pin 2 се появява 0V на Pin 3. Изходи (Pin 3, 6, 11, 14): Извежда пинове. Според входния сигнал изходният сигнал идва.
Движения на двигателя A B
-----------------------------------------------------------------------------------------
…………… Стоп: Ниско: Ниско
…… По посока на часовниковата стрелка: Ниска: Висока
Обратно на часовниковата стрелка: Висока: Ниска
……………. Стоп: Високо: Високо
Стъпка 4: Схеми за задвижване на двигателя и IR сензор
ATmega32 е 8-битов микроконтролер CMOS с ниска мощност, базиран на AVR подобрена RISCarchitecture. Чрез изпълнение на мощни инструкции в един тактов цикъл, ATmega32 постига пропускателни способности, приближаващи се до 1 MIPS на MHz, което позволява на системния дизайнер да оптимизира консумацията на енергия спрямо скоростта на обработка.
Ядрото на AVR съчетава богат набор от инструкции с 32 работни регистъра с общо предназначение. Всички 32 регистъра са директно свързани към аритметично -логическата единица (ALU), което позволява достъп до два независими регистъра в една единствена инструкция, изпълнена в един тактов цикъл. Получената архитектура е по -ефективна при кода, като същевременно постига производителност до десет пъти по -бърза от конвенционалните CISC микроконтролери.
ATmega32 предоставя следните функции:
- 32 Kbytes In-System Programmable Flash Program memory с възможности за четене-докато-запис,
- 1024 байта EEPROM, 2K байта SRAM,
- 32 линии за входно/изходно устройство с общо предназначение,
- 32 работни регистри с общо предназначение,
- интерфейс на JTAG за Boundaryscan,
- Поддръжка и програмиране за отстраняване на грешки на чип, три гъвкави таймера/брояча с режими на сравнение, вътрешни и външни прекъсвания, сериен програмируем USART, байтов ориентиран двупроводен сериен интерфейс, 8-канален,
- 10-битов ADC с опционален диференциален входен етап с програмируемо усилване (само за пакет TQFP),
- програмируем таймер за наблюдение с вътрешен осцилатор,
- сериен порт SPI и
-
шест софтуерни режима за пестене на енергия.
- Режимът на готовност спира процесора, като същевременно позволява USART,
- Двупроводен интерфейс, A/D конвертор,
- SRAM,
- Таймер/броячи,
- SPI порт и
- система за прекъсване, за да продължи да функционира.
- Режимът на изключване запазва съдържанието на регистъра, но замразява осцилатора, като деактивира всички други функции на чипа до следващото външно прекъсване или хардуерно нулиране.
- В режим на пестене на енергия асинхронният таймер продължава да работи, което позволява на потребителя да поддържа базата на таймера, докато останалата част от устройството спи.
- Режимът за намаляване на шума на ADC спира процесора и всички I/O модули с изключение на асинхронен таймер и ADC, за да сведе до минимум шума при превключване по време на преобразуване на ADC
- В режим на готовност кристалният/резонаторен осцилатор работи, докато останалата част от устройството спи. Това позволява много бързо стартиране в комбинация с ниска консумация на енергия.
- В режим на разширен режим на готовност, както основният осцилатор, така и асинхронният таймер продължават да работят.
Всички свързани схеми са дадени тук и също е дадена основна верига (atmega32).
Стъпка 5: Avr програми
1. За "дистанционен сензор":
#включи #включи
#include "remote.h"
// Глобали променливи без знак int Време; // Основен таймер, съхранява времето в 10us, // Актуализирано от ISR (TIMER0_COMP) променлив неподписан символ BitNo; // Pos на следващия BIT променлив беззнаков char ByteNo; // Позиция на текущия байт
летлив неподписан символ IrData [4]; // Четирите байта от данни на Ir пакет // 2-байтов адрес 2-байтови данни променлив беззнаков char IrCmdQ [QMAX]; // Получена крайна команда (буфер)
летлив неподписан символ PrevCmd; // Използва се за повторение
// Променливи, използвани за започване на повторение само след натискане на клавиш за известно време
променлив неподписан символ Повтаряне; // 1 = да 0 = не променлив неподписан знак RCount; // Брой повторения
летлив символ QFront = -1, QEnd = -1;
променлива неподписана char държава; // Състояние на приемника
летлив неподписан символ Edge; // Ръб на прекъсване [RISING = 1 OR FALLING = 0]
променлив неподписан int стоп;
/************************************************* ********************************************* / /*ФУНКЦИИ НАЧАЛИ* / / ********************************************** **********************************************/
void RemoteInit () {
char i; за (i = 0; i <4; i ++) IrData = 0;
стоп = 0; Състояние = IR_VALIDATE_LEAD_HIGH; Edge = 0; Повтаряне = 0;
// Таймер за настройка1 // ------------ TCCR0 | = ((1 <
TIMSK | = (1 <
OCR0 = TIMER_COMP_VAL; // Задайте стойност за сравнение
unsigned char GetRemoteCmd (char wait) {unsigned char cmd;
if (изчакайте) while (QFront ==-1); иначе ако (QFront ==-1) връща (RC_NONE);
cmd = IrCmdQ [QFront];
if (QFront == QEnd) QFront = QEnd = -1; else {if (QFront == (QMAX-1)) QFront = 0; else QFront ++; }
връщане cmd;
}
2. main ():
int main (void) {
uint8_t cmd = 0; DDRB = 0x08;
DDRD = 0x80;
DDRC = 0x0f; PORTC = 0x00;
while (1) // Безкраен цикъл към активен IR-сензор {
cmd = GetRemoteCmd (1);
превключвател (cmd) {
случай xx: {// BOT Придвижва се напред // Ch+ btn forwardmotor ();
прекъсване; // И двата двигателя в посока напред
}
………………………………………………….
………………………………………………….
………………………………………………….
по подразбиране: PORTC = 0x00; break; // И двата и левия двигател спират}
}
}/*Край на основната*/
……………………………………………………………………………………………………………………
// Това е основен модел, но мога да го използвам в PWM режим.
//…………………………………………….. Забавлявай се……………………………………………………//
Препоръчано:
UCL-IIOT-алармена система с база данни и червен възел: 7 стъпки
UCL-IIOT-Алармена система с база данни и Node-red: Целта на тази компилация е да научи за свързването на Arduino с Node-red и база данни, така че да можете да регистрирате данни и също така да ги събирате за по-късна употреба. проста алармена система arduino, която извежда 5 номера с данни, всеки разделен с
Червен балон детектор на въглероден окис: 5 стъпки
Червен балон детектор на въглероден окис: Сензорът за въглероден окис открива високи нива на концентрации на CO-газ във въздуха. Когато концентрацията достигне високо ниво (което предварително зададохме), светодиодът променя цвета си от зелен в червен
Прост червен лазер: 5 стъпки
Прост червен лазер: Здравейте приятели. Днес в тази инструкция ще ви покажа как да направите прост червен лазер. Сигурно сте виждали, че лазерите изискват много сложни схеми, използващи различни видове интегрални схеми и транзистори. Днес, в тези инструкции, ние ще
Измервател PZEM-004 + ESP8266 & Платформа IoT възел-ЧЕРВЕН и Modbus TCP/IP: 7 стъпки
Измервател PZEM-004 + ESP8266 & Платформа IoT Node-RED & Modbus TCP/IP: При тази възможност ще интегрираме нашия измервател на активна мощност или консумация на електроенергия, Pzem-004-Peacefair с платформата за интеграция на IoT NED-RED, използвана в предишни уроци, ще използваме модул ESP8266, конфигуриран като Modbus TCP / IP подчинен, по -късно
ESP8266 Управляващ серво възел-ЧЕРВЕН MQTT (Mosquitto) IoT: 6 стъпки
ESP8266 Control Servo Node-RED MQTT (Mosquitto) IoT: Този път интеграцията на ESP8266 и платформата Node-RED е направена, като в този случай се задейства задвижващ механизъм, в този случай серво, управляван от ШИМ с въртене от 0 до 180 градуса. От уеб създател на HMI или SCADA на Node-Red-Dashboard, използвайки като база