Mục lục:

ROBOCAR ĐIỀU KHIỂN TỪ XA MÀU ĐỎ INFRA SỬ DỤNG AVR (ATMEGA32) MCU: 5 bước
ROBOCAR ĐIỀU KHIỂN TỪ XA MÀU ĐỎ INFRA SỬ DỤNG AVR (ATMEGA32) MCU: 5 bước

Video: ROBOCAR ĐIỀU KHIỂN TỪ XA MÀU ĐỎ INFRA SỬ DỤNG AVR (ATMEGA32) MCU: 5 bước

Video: ROBOCAR ĐIỀU KHIỂN TỪ XA MÀU ĐỎ INFRA SỬ DỤNG AVR (ATMEGA32) MCU: 5 bước
Video: ✅ Hướng dẫn chi tiết lắp ráp, nạp code làm robot đa hướng Omni Mecanum - phương tiện từ tương lai 2024, Tháng bảy
Anonim
ROBOCAR ĐIỀU KHIỂN TỪ XA MÀU ĐỎ INFRA SỬ DỤNG MCU AVR (ATMEGA32)
ROBOCAR ĐIỀU KHIỂN TỪ XA MÀU ĐỎ INFRA SỬ DỤNG MCU AVR (ATMEGA32)

DỰ ÁN hiện tại mô tả thiết kế và triển khai RoboCar được điều khiển từ xa bằng tia hồng ngoại (IR) có thể được sử dụng cho các ứng dụng điều khiển không người lái tự động khác nhau. Tôi đã thiết kế RoboCar được điều khiển từ xa (chuyển động trái-phải / trước-sau). Toàn bộ hệ thống dựa trên vi điều khiển (Atmega32) làm cho hệ thống điều khiển thông minh hơn và dễ dàng sửa đổi cho các ứng dụng khác. Nó cho phép người dùng vận hành hoặc điều khiển RoboCar và vận hành công tắc nguồn chính từ khoảng cách 5 mét.

Từ khóa: Bộ giải mã IR, Bộ vi điều khiển AVR (Atmega32), Bộ điều khiển từ xa TV, Giao tiếp không dây

_

Bước 1: Giao tiếp IntraRed

Giao tiếp nội bộ
Giao tiếp nội bộ

Nguyên tắc giao tiếp IR:

a) Truyền dẫn IR

Bộ phát đèn LED hồng ngoại bên trong mạch của nó, phát ra ánh sáng hồng ngoại cho mọi xung điện được cấp cho nó. Xung này được tạo ra khi một nút trên điều khiển được nhấn, do đó hoàn thành mạch, cung cấp độ lệch cho đèn LED. Đèn LED được phân cực phát ra ánh sáng có bước sóng 940nm dưới dạng một chuỗi xung, tương ứng với nút được nhấn. Tuy nhiên, vì cùng với đèn LED hồng ngoại, nhiều nguồn ánh sáng hồng ngoại khác như con người chúng ta, bóng đèn, mặt trời, v.v., thông tin được truyền đi có thể bị can thiệp. Một giải pháp cho vấn đề này là bằng cách điều chế. Tín hiệu truyền đi được điều chế bằng cách sử dụng tần số sóng mang 38 KHz (hoặc bất kỳ tần số nào khác từ 36 đến 46 KHz). IR LED được tạo ra để dao động ở tần số này trong khoảng thời gian của xung. Thông tin hoặc tín hiệu ánh sáng được điều chế độ rộng xung và được chứa ở tần số 38 KHz. Truyền tia hồng ngoại đề cập đến năng lượng trong vùng của phổ bức xạ điện từ ở các bước sóng dài hơn bước sóng của ánh sáng nhìn thấy, nhưng ngắn hơn bước sóng của sóng vô tuyến. Tương ứng, tần số hồng ngoại cao hơn tần số của vi sóng, nhưng thấp hơn tần số của ánh sáng nhìn thấy. Các nhà khoa học chia phổ bức xạ hồng ngoại (IR) thành ba vùng. Các bước sóng được quy định bằng micrômet (ký hiệu là µ, trong đó 1 µ = 10-6 mét) hoặc bằng nanomet (viết tắt là nm, trong đó 1 nm = 10-9 mét = 0,001 5). Dải hồng ngoại gần chứa năng lượng trong dải bước sóng gần nhất với vùng khả kiến, từ khoảng 0,750 đến 1,300 5 (750 đến 1300 nm). Dải IR trung gian (còn gọi là dải IR giữa) bao gồm năng lượng trong dải từ 1.300 đến 3.000 5 (1300 đến 3000 nm). Dải hồng ngoại xa mở rộng từ 2.000 đến 14.000 5 (3000 nm đến 1,4000 x 104nm).

b) Tiếp tân IR

Bộ thu bao gồm một máy dò ảnh phát tín hiệu điện đầu ra khi có ánh sáng chiếu vào nó. Đầu ra của máy dò được lọc bằng bộ lọc dải hẹp loại bỏ tất cả các tần số thấp hơn hoặc cao hơn tần số sóng mang (38 KHz trong trường hợp này). Sau đó, đầu ra được lọc sẽ được cấp cho thiết bị phù hợp như Vi điều khiển hoặc Vi xử lý điều khiển các thiết bị như PC hoặc Robot. Đầu ra từ các bộ lọc cũng có thể được kết nối với Máy hiện sóng để đọc các xung.

Các ứng dụng của IR:

Hồng ngoại được sử dụng trong nhiều ứng dụng truyền thông, giám sát và điều khiển không dây. Dưới đây là một số ví dụ:

· Hộp điều khiển từ xa giải trí gia đình

· Không dây (mạng cục bộ)

· Liên kết giữa máy tính xách tay và máy tính để bàn

· Modem không dây

· Máy dò xâm nhập

· Máy dò chuyển động

· Cảm biến cháy

· Hệ thống nhìn ban đêm

· Thiết bị chẩn đoán y tế

· Hệ thống dẫn đường tên lửa

· Thiết bị giám sát địa chất

Truyền dữ liệu IR từ thiết bị này sang thiết bị khác đôi khi được gọi là truyền tia.

Bước 2: Cảm biến IR & Từ giao thức NEC

Cảm biến IR & Từ giao thức NEC
Cảm biến IR & Từ giao thức NEC
Cảm biến IR & Từ giao thức NEC
Cảm biến IR & Từ giao thức NEC
Cảm biến IR & Từ giao thức NEC
Cảm biến IR & Từ giao thức NEC
Cảm biến IR & Từ giao thức NEC
Cảm biến IR & Từ giao thức NEC

Cảm biến hồng ngoại (Hình 1)

TSOP1738, SFH-5110-38 (38kHz)

Các tính năng của cảm biến TSOP:

  • Cả bộ tiền khuếch đại và bộ dò ảnh đều ở trong một gói duy nhất
  • Bộ lọc nội bộ cho tần số PCM
  • Cải thiện khả năng che chắn chống lại nhiễu điện trường
  • TTL và khả năng tương thích CMOS
  • Đầu ra hoạt động thấp Tiêu thụ điện năng thấp
  • Khả năng miễn dịch cao chống lại ánh sáng xung quanh
  • Truyền dữ liệu liên tục có thể

Giao thức NEC:

Giao thức truyền NEC IR sử dụng mã hóa khoảng cách xung của các bit bản tin. Mỗi chùm xung có độ dài 562,5µs, ở tần số sóng mang là 38kHz (26,3µs). Các bit logic được truyền như sau (Hình 2):

  • Hợp lý '0' - một xung 562,5µs theo sau là khoảng không gian 562,5µs, với tổng thời gian phát là 1,125ms
  • Logic '1' - một xung 562,5µs theo sau bởi một không gian 1,6875ms, với tổng thời gian truyền là 2,25ms

Xung sóng mang bao gồm 21 chu kỳ ở tần số 38kHz. Các xung thường có tỷ lệ dấu / không gian là 1: 4, để giảm mức tiêu thụ hiện tại:

(Hình 3)

Mỗi chuỗi mã bắt đầu với một xung 9ms, được gọi là xung AGC. Tiếp theo là khoảng lặng 4,5ms:

(Hình 4)

Dữ liệu sau đó bao gồm 32 bit, địa chỉ 16 bit, theo sau là lệnh 16 bit, được hiển thị theo thứ tự chúng được truyền (từ trái sang phải):

(Hình 5)

Bốn byte bit dữ liệu là mỗi bit ít quan trọng nhất được gửi đầu tiên. Hình 1 minh họa định dạng của khung truyền NEC IR, cho địa chỉ 00h (00000000b) và lệnh ADh (10101101b).

Tổng cộng 67,5ms được yêu cầu để truyền một khung bản tin. Nó cần 27ms để truyền 16 bit địa chỉ (địa chỉ + nghịch đảo) và 16 bit lệnh (lệnh + nghịch đảo).

(Hình 6)

Thời gian cần thiết để truyền khung:

16 bit cho địa chỉ (địa chỉ + nghịch đảo) yêu cầu 27ms thời gian truyền. Và 16 bit cho lệnh (lệnh + nghịch đảo) cũng yêu cầu 27ms thời gian truyền. bởi vì (nghịch đảo địa chỉ + địa chỉ) hoặc (lệnh + lệnh nghịch đảo) sẽ luôn chứa 8 '0's và 8' 1 nên (8 * 1.125ms) + (8 * 2.25ms) == 27 ms. theo đó tổng thời gian cần thiết để truyền khung là (9ms + 4,5ms + 27ms + 27ms) = 67,5 ms.

LẶP LẠI MÃ: Nếu giữ phím trên bộ điều khiển từ xa, một mã lặp lại sẽ được cấp, thường là khoảng 40ms sau khi phát xung báo hiệu sự kết thúc của thông báo. Một mã lặp lại sẽ tiếp tục được gửi đi trong khoảng thời gian 108ms, cho đến khi khóa cuối cùng được phát hành. Mã lặp lại bao gồm những điều sau, theo thứ tự:

  • bùng nổ xung hàng đầu 9ms
  • không gian 2,25ms
  • một xung 562,5µs để đánh dấu sự kết thúc của không gian (và do đó kết thúc của mã lặp lại được truyền).

(Hình 7)

Tính toán độ trễ (1ms):

Tần số đồng hồ = 11,0592 Mhz

Chu kỳ máy = 12

Độ trễ = 1ms

TimerValue = 65536 - ((Delay * ClockFreq) / Machine Cycle) = 65536 - ((1ms * 11.0592Mhz) / 12)

= 65536 - 921 = 0xFC67

Bước 3: Điều khiển động cơ DC bằng L293D

Điều khiển động cơ DC bằng L293D
Điều khiển động cơ DC bằng L293D

Động cơ DC

Động cơ điện một chiều biến đổi năng lượng điện thành cơ năng có thể được sử dụng để làm nhiều công việc hữu ích. Nó có thể tạo ra chuyển động cơ học như Go Forward / Backword của RoboCar của tôi. Động cơ DC có nhiều loại khác nhau như 6V và 12V. Nó có hai dây hoặc chân. Chúng ta có thể đảo ngược hướng quay bằng cách đảo ngược cực của đầu vào.

Ở đây chúng tôi thích L293D hơn vì đánh giá 600mA là tốt để điều khiển động cơ DC nhỏ và điốt bảo vệ được bao gồm trong chính vi mạch. Mô tả của mỗi chân như sau: Chân kích hoạt: Đây là số pin. 1 và số pin. 9. Ghim số. 1 được sử dụng để kích hoạt trình điều khiển Half-H 1 và 2. (Cầu H ở phía bên trái). Ghim không. 9 được sử dụng để kích hoạt trình điều khiển cầu H 3 và 4. (Cầu H ở bên phải).

Khái niệm rất đơn giản, nếu bạn muốn sử dụng một cầu H cụ thể, bạn phải đưa ra một mức logic cao cho các chân kích hoạt tương ứng cùng với nguồn cung cấp cho IC. Chân này cũng có thể được sử dụng để điều khiển tốc độ của động cơ bằng kỹ thuật PWM. VCC1 (Chân 16): Chân cấp nguồn. Kết nối nó với nguồn cung cấp 5V. VCC2 (Chân 8): Nguồn cấp cho động cơ. Áp dụng điện áp + ve cho nó theo đánh giá động cơ. Nếu bạn muốn điều khiển động cơ của mình ở mức 12V, hãy áp dụng 12V trên chân này.

Cũng có thể điều khiển động cơ trực tiếp trên pin, không phải là động cơ được sử dụng để cung cấp điện cho mạch, Chỉ cần kết nối đầu cuối + ve của pin đó với chân VCC2 và làm cho GND của cả hai pin chung. (Điện áp tối đa tại chân này là 36V theo biểu dữ liệu của nó). GND (Chân 4, 5, 12, 13): Kết nối chúng với GND chung của mạch. Đầu vào (Chân 2, 7, 10, 15):

Đây là các chân đầu vào mà qua đó tín hiệu điều khiển được đưa ra bởi vi điều khiển hoặc các mạch / IC khác. Ví dụ, nếu trên chân 2 (Đầu vào của nửa thứ nhất trình điều khiển H), chúng tôi cung cấp cho Logic 1 (5V), chúng tôi sẽ nhận được điện áp bằng VCC2 trên chân đầu ra tương ứng của nửa đầu H trình điều khiển tức là chân không. 3. Tương tự đối với Logic 0 (0V) trên Pin 2, 0V trên Pin 3 xuất hiện. Outputs (Pin 3, 6, 11, 14): Các chân đầu ra. Theo tín hiệu đầu vào tín hiệu đầu ra đến.

Chuyển động cơ A B

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

…………… Dừng lại: Thấp: Thấp

…… Theo chiều kim đồng hồ: Thấp: Cao

Ngược chiều kim đồng hồ: Cao: Thấp

……………. Stop: High: Cao

Bước 4: Sơ đồ mạch cho Trình điều khiển động cơ và Cảm biến IR

Sơ đồ mạch cho Trình điều khiển động cơ và Cảm biến IR
Sơ đồ mạch cho Trình điều khiển động cơ và Cảm biến IR
Sơ đồ mạch cho Trình điều khiển động cơ và Cảm biến IR
Sơ đồ mạch cho Trình điều khiển động cơ và Cảm biến IR
Sơ đồ mạch cho Trình điều khiển động cơ và Cảm biến IR
Sơ đồ mạch cho Trình điều khiển động cơ và Cảm biến IR

ATmega32 là vi điều khiển CMOS 8-bit công suất thấp dựa trên Kiến trúc RISCarchitecture AVR. Bằng cách thực hiện các lệnh mạnh mẽ trong một chu kỳ đồng hồ duy nhất, ATmega32 đạt được thông lượng gần 1 MIPS trên mỗi MHz cho phép nhà thiết kế hệ thống tối ưu hóa mức tiêu thụ điện năng so với tốc độ xử lý.

Lõi AVR kết hợp một tập lệnh phong phú với 32 thanh ghi làm việc cho mục đích chung. Tất cả 32 thanh ghi được kết nối trực tiếp với Đơn vị Logic Số học (ALU), cho phép hai thanh ghi độc lập được truy cập trong một lệnh duy nhất được thực hiện trong một chu kỳ đồng hồ. Kiến trúc kết quả là mã hiệu quả hơn trong khi đạt được thông lượng nhanh hơn đến mười lần so với vi điều khiển CISC thông thường.

ATmega32 cung cấp các tính năng sau:

  • 32 Kbyte bộ nhớ chương trình Flash có thể lập trình trong hệ thống với khả năng Đọc-Trong khi-Ghi,
  • 1024 byte EEPROM, 2K byte SRAM,
  • 32 dòng I / O mục đích chung,
  • 32 thanh ghi làm việc mục đích chung,
  • một giao diện JTAG cho Boundaryscan,
  • Hỗ trợ và lập trình gỡ lỗi trên chip, ba bộ hẹn giờ / bộ đếm linh hoạt với các chế độ so sánh, Ngắt bên trong và bên ngoài, USART có thể lập trình nối tiếp, Giao diện nối tiếp hai dây định hướng byte, 8 kênh,
  • ADC 10 bit với giai đoạn đầu vào vi sai tùy chọn với độ lợi lập trình được (chỉ gói TQFP),
  • Bộ định thời gian giám sát có thể lập trình với Bộ tạo dao động bên trong,
  • một cổng nối tiếp SPI và
  • sáu chế độ tiết kiệm năng lượng có thể lựa chọn phần mềm.

    • Chế độ Chờ dừng CPU trong khi cho phép USART,
    • Giao diện hai dây, Bộ chuyển đổi A / D,
    • SRAM,
    • Hẹn giờ / Bộ đếm,
    • Cổng SPI và
    • hệ thống ngắt để tiếp tục hoạt động.
    • Chế độ Power-down lưu nội dung thanh ghi nhưng đóng băng Bộ tạo dao động, vô hiệu hóa tất cả các chức năng khác của chip cho đến khi Ngắt bên ngoài hoặc Thiết lập lại phần cứng tiếp theo.
    • Ở chế độ Tiết kiệm năng lượng, Bộ hẹn giờ không đồng bộ tiếp tục chạy, cho phép người dùng duy trì cơ sở hẹn giờ trong khi phần còn lại của thiết bị đang ngủ.
    • Chế độ Giảm nhiễu ADC dừng CPU và tất cả các mô-đun I / O ngoại trừ Bộ hẹn giờ không đồng bộ và ADC, để giảm thiểu nhiễu chuyển mạch trong quá trình chuyển đổi ADC
    • Ở chế độ Chờ, Bộ tạo dao động tinh thể / bộ cộng hưởng đang chạy trong khi phần còn lại của thiết bị đang ngủ. Điều này cho phép khởi động rất nhanh kết hợp với mức tiêu thụ điện năng thấp.
    • Trong chế độ Chờ mở rộng, cả Bộ tạo dao động chính và Bộ hẹn giờ không đồng bộ tiếp tục chạy.

Tất cả các mạch liên quan được đưa ra ở đây và mạch chính (atmega32) cũng được đưa ra.

Bước 5: Chương trình Avr

Chương trình trung bình
Chương trình trung bình
Chương trình trung bình
Chương trình trung bình

1. Đối với "cảm biến từ xa":

#include #include

#include "remote.h"

// Quả cầu dễ bay hơi unsigned int Time; // Bộ đếm thời gian chính, lưu trữ thời gian trong 10us, // Cập nhật bởi ISR (TIMER0_COMP) dễ bay hơi không dấu char BitNo; // Vị trí của BIT tiếp theo dễ bay hơi unsigned char ByteNo; // Vị trí của Byte hiện tại

biến không dấu char IrData [4]; // Bốn byte dữ liệu của gói Ir // Địa chỉ 2 byte Địa chỉ 2 byte dữ liệu dễ bay hơi unsigned char IrCmdQ [QMAX]; // Lệnh cuối cùng đã nhận (Bộ đệm)

dễ bay hơi không dấu char PrevCmd; // Được sử dụng để lặp lại

// Các biến được sử dụng để bắt đầu lặp lại chỉ sau khi một phím được nhấn trong một thời gian nhất định

dễ bay hơi không dấu char Lặp lại; // 1 = yes 0 = no unsigned char RCount; // Số lần lặp lại

char dễ bay hơi QFront = -1, QEnd = -1;

Trạng thái char không dấu dễ bay hơi; // Trạng thái của người nhận

char Edge dễ bay hơi; // Cạnh của ngắt [RISING = 1 OR FALLING = 0]

biến động unsigned int stop;

/ ************************************************* ********************************************* / / * CÁC CHỨC NĂNG * // ************************************************ ********************************************** /

void RemoteInit () {

char tôi; for (i = 0; i <4; i ++) IrData = 0;

dừng = 0; Trạng thái = IR_VALIDATE_LEAD_HIGH; Cạnh = 0; Lặp lại = 0;

// Thiết lập Timer1 // ------------ TCCR0 | = ((1 <

TIMSK | = (1 <

OCR0 = TIMER_COMP_VAL; // Đặt giá trị so sánh

unsigned char GetRemoteCmd (char chờ) {unsigned char cmd;

if (đợi) while (QFront == - 1); else if (QFront == - 1) return (RC_NONE);

cmd = IrCmdQ [QFront];

if (QFront == QEnd) QFront = QEnd = -1; else {if (QFront == (QMAX-1)) QFront = 0; khác QFront ++; }

trả về cmd;

}

2. main ():

int main (void) {

uint8_t cmd = 0; DDRB = 0x08;

DDRD = 0x80;

DDRC = 0x0f; PORTC = 0x00;

while (1) // Vòng lặp vô hạn tới cảm biến hồng ngoại đang hoạt động {

cmd = GetRemoteCmd (1);

chuyển đổi (cmd) {

case xx: {// BOT Di chuyển về phía trước // Ch + btn forwardmotor ();

nghỉ; // Cả hai động cơ theo hướng chuyển tiếp

}

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

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

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

mặc định: PORTC = 0x00; break; // Cả động cơ bên trái và bên phải đều dừng}

}

} / * Cuối main * /

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

// Đây là một mô hình cơ bản, nhưng tôi có thể sử dụng nó ở chế độ PWM.

//…………………………………………….. Chúc vui vẻ……………………………………………………//

Đề xuất: