- Giải thích làm việc:
- Các thành phần:
- Lập trình:
- Thiết kế mạch và PCB sử dụng EasyEDA:
- Tính toán và đặt hàng các mẫu PCB trực tuyến:
Trong dự án này, chúng tôi sẽ sử dụng vi điều khiển PIC để điều khiển từ xa một số tải AC bằng cách chỉ sử dụng điều khiển từ xa IR. Một dự án tương tự Tự động hóa nhà điều khiển từ xa bằng IR cũng đã được thực hiện với Arduino, nhưng ở đây chúng tôi đã thiết kế nó trên PCB bằng cách sử dụng trình mô phỏng và thiết kế PCB trực tuyến của EasyEDA và sử dụng các dịch vụ thiết kế PCB của họ để đặt hàng các bảng PCB như được hiển thị trong phần tiếp theo của bài báo.
Khi kết thúc dự án này, bạn sẽ có thể bật / tắt (BẬT / TẮT) bất kỳ tải AC nào bằng Điều khiển từ xa thông thường từ sự thoải mái của Ghế / Giường của bạn. Để làm cho dự án này thú vị hơn, chúng tôi cũng đã kích hoạt tính năng điều khiển tốc độ của quạt với sự trợ giúp của Triac. Tất cả những điều này có thể được thực hiện bằng những cú nhấp chuột đơn giản trên điều khiển IR của bạn. Bạn có thể sử dụng bất kỳ điều khiển từ xa TV / DVD / MP3 nào cho dự án này. Các tín hiệu IR khác nhau từ điều khiển từ xa được nhận bởi bộ vi điều khiển, sau đó sẽ điều khiển các rơ le tương ứng thông qua một mạch điều khiển rơ le. Các rơ le này được sử dụng để kết nối và ngắt kết nối các tải AC (Đèn / Quạt).
Giải thích làm việc:
Hoạt động của dự án này khá đơn giản để hiểu. Khi nhấn một nút trên Điều khiển từ xa IR, nó sẽ gửi một chuỗi mã dưới dạng các xung được mã hóa sử dụng tần số điều chế 38Khz. Các xung này được nhận bởi cảm biến TSOP1738 và sau đó được đọc bởi Bộ điều khiển. Sau đó, Bộ điều khiển giải mã dòng xung nhận được thành giá trị hex và so sánh nó với các giá trị hex được xác định trước trong chương trình của chúng tôi.
Nếu có bất kỳ kết quả phù hợp nào xảy ra thì bộ điều khiển thực hiện một hoạt động tương đối bằng cách kích hoạt Rơle / Triac tương ứng và kết quả tương ứng cũng được chỉ báo bằng đèn LED trên bo mạch. Ở đây, trong dự án này, chúng tôi đã sử dụng 4 bóng đèn (bóng đèn nhỏ) có màu sắc khác nhau làm phụ tải chiếu sáng và một bóng đèn khác (bóng đèn lớn hơn) được coi là một chiếc quạt cho mục đích trình diễn.
Chúng tôi đã chọn phím 1 để chuyển đổi rơle1, 2 để chuyển đổi rơle2, 3 để chuyển đổi rơle3, 4 để chuyển đổi rơle4, và Vol + để tăng tốc độ quạt và Vol- để giảm tốc độ của quạt.
Lưu ý: Ở đây chúng tôi đã sử dụng bóng đèn 100watt thay vì quạt.
Có nhiều loại Điều khiển từ xa hồng ngoại có sẵn cho các thiết bị khác nhau, nhưng hầu hết chúng hoạt động ở Tần số 38KHz. Ở đây trong dự án này, chúng tôi điều khiển các thiết bị gia dụng bằng điều khiển từ xa IR TV và để phát hiện tín hiệu IR, chúng tôi sử dụng Bộ thu IR TSOP1738. Cảm biến TSOP1738 này có thể cảm nhận tín hiệu Tần số 38Khz. Hoạt động của điều khiển từ xa IR và TSOP1738 được đề cập chi tiết trong bài viết này: Bộ phát và bộ thu IR
Bộ vi điều khiển PIC của chúng tôi hoạt động ở + 5V và Rơle hoạt động ở + 12V, Do đó chúng tôi sử dụng một biến áp để ngắt nguồn AC 220V và chỉnh lưu nó bằng cách sử dụng bộ chỉnh lưu cầu đầy đủ. Điện áp DC chỉnh lưu này sau đó được điều chỉnh thành + 12V và + 5V bằng cách sử dụng các IC điều chỉnh 7812 và 7805 tương ứng.
Để kích hoạt rơle, chúng tôi sử dụng các bóng bán dẫn như BC547 có thể hoạt động như một công tắc điện tử để BẬT / TẮT rơle dựa trên tín hiệu từ bộ vi điều khiển PIC. Ngoài ra để điều khiển tốc độ của quạt chúng tôi đang sử dụng TRIAC. TRIAC là chất bán dẫn công suất có khả năng kiểm soát điện áp đầu ra; khả năng này được sử dụng để điều khiển tốc độ của quạt.
Chúng tôi cũng đã sử dụng Trình điều khiển Triac để điều khiển Triac bằng vi điều khiển PIC của chúng tôi. Trình điều khiển này được sử dụng để cung cấp xung góc bắn cho Triac, để có thể kiểm soát công suất đầu ra. Ở đây chúng tôi đã sử dụng 6 cấp độ điều khiển tốc độ. Khi mức là 0 thì quạt sẽ tắt. Khi cấp độ sẽ là 1 thì tốc độ sẽ là 1/5 tốc độ tối đa. Khi cấp độ sẽ là 2 thì tốc độ sẽ là 2/3 tốc độ tối đa và tương ứng với những người khác. Có thể theo dõi mức tốc độ hiện tại bằng màn hình 7 đoạn trên bo mạch.
Sơ đồ khối của dự án được hiển thị bên dưới.
Các thành phần:
Các thành phần cần thiết để xây dựng dự án này được đưa ra dưới đây:
- Vi điều khiển PIC18f2520 -1
- TSOP1738 -1
- IR TV / DVD Remote -1
- Transistor BC547 -4
- Rơ le 12 volt -4
- Bóng đèn có giá đỡ -5
- Kết nối dây -
- EasyEda PCB -1
- LCD 16x2
- Nguồn điện 12v
- Đầu nối đầu cuối 2 pin `-8
- Đầu nối đầu cuối 3 pin -1
- Máy biến áp 12-0-12 -1 -
- Bộ điều chỉnh điện áp 7805 -1
- Bộ điều chỉnh điện áp 7812 -1
- Tụ 1000uf -1
- Tụ điện 10uf -1
- Tụ điện 0,1uf -1
- Tụ điện 0,01uf 400V `-1
- 10k -5
- 1k -5
- 100ohm -7
- Đoạn catốt chung -1
- 1n4007 diode -10
- BT136 triac -1
- Tiêu đề nam / nữ -
- Đèn LED -6
- Opto-coupler moc3021 -1
- Opto-coupler mtc2e hoặc 4n35 -1
- Tinh thể 20Mhz -1
- Tụ 33pf -2
- Điốt zener 5.1v -1
- Điện trở 47 ohm 2 watt -1
Tất cả các thành phần này đều được sử dụng phổ biến và có thể dễ dàng mua được. Tuy nhiên, nếu bạn đang tìm kiếm cách mua trực tuyến tốt nhất thì chúng tôi khuyên bạn nên sử dụng LCSC.
LCSC là một cửa hàng trực tuyến tuyệt vời để mua các linh kiện điện tử của bạn cho tất cả các loại dự án. Họ có khoảng 25.000 loại linh kiện và điều tốt nhất là họ bán các mặt hàng số lượng ít cho các dự án nhỏ và họ cũng có Global Shipping.
Giải mã điều khiển từ xa IR:
Như đã nói trước đó, bạn có thể sử dụng bất kỳ loại điều khiển từ xa nào cho dự án của mình. Nhưng chúng ta phải biết loại tín hiệu được tạo ra từ điều khiển từ xa cụ thể đó. Đối với mỗi khóa riêng lẻ trên điều khiển từ xa sẽ có một giá trị HEX tương đương cho khóa đó. Sử dụng giá trị HEX này, chúng tôi có thể phân biệt giữa từng khóa ở phía bộ vi điều khiển của chúng tôi. Vì vậy, trước khi quyết định sử dụng điều khiển từ xa, chúng ta nên biết giá trị HEX cho các phím được cài sẵn trong điều khiển từ xa cụ thể đó. Trong dự án này, chúng tôi đã sử dụng điều khiển từ xa NEC. Các giá trị HEX cho các khóa trên điều khiển từ xa NEC được đưa ra bên dưới.
Như bạn có thể nhận thấy giá trị HEX có 7 ký tự trong đó chỉ có hai ký tự cuối cùng khác nhau, do đó chúng ta chỉ có thể xem xét hai chữ số cuối cùng để phân biệt giữa mỗi khóa.
Sơ đồ mạch:
Sơ đồ cho dự án được hiển thị bên dưới.
Sơ đồ trên đã được thực hiện dễ dàng bằng cách sử dụng trình soạn thảo giản đồ esayEDA vì chúng cung cấp các bố cục của tất cả các thành phần được sử dụng trong dự án này. Nó cũng không yêu cầu cài đặt và có thể được sử dụng trực tuyến khi đang di chuyển.
Sơ đồ chân và giá trị thành phần được chỉ định rõ ràng trong sơ đồ trên. Bạn cũng có thể tải xuống tệp sơ đồ từ đây.
Lập trình:
Chương trình cho dự án này được thực hiện bằng MPLABX, mã cũng khá đơn giản và dễ hiểu. Mã hoàn chỉnh sẽ được đưa ra ở cuối hướng dẫn này, một số phần quan trọng khác của chương trình được giải thích bên dưới.
Trong phần đầu của mã, chúng ta nên bao gồm các thư viện bắt buộc, xác định các chân và khai báo các biến.
#include
Sau đó, chúng ta đã tạo một hàm trì hoãn đơn giản bằng cách sử dụng vòng lặp “for”.
void delay (int time) {for (int i = 0; i
Sau đó, chúng tôi đã khởi tạo bộ hẹn giờ bằng cách sử dụng chức năng sau
void timer () // 10 -> 1us {T0PS0 = 0; T0PS1 = 0; T0PS2 = 0; PSA = 0; // Nguồn đồng hồ hẹn giờ là từ Prescaler T0CS = 0; // Prescaler lấy xung nhịp từ FCPU (5MHz) T08BIT = 0; // 16 BIT MODE TMR0IE = 1; // Kích hoạt ngắt TIMER0 PEIE = 1; // Bật ngắt ngoại vi GIE = 1; // Bật INT toàn cầu TMR0ON = 1; // Bây giờ bắt đầu hẹn giờ! }
Bây giờ trong chức năng chính, chúng tôi đã đưa ra hướng đến các chân đã chọn và khởi tạo bộ định thời và ngắt bên ngoài int0 để phát hiện điểm giao cắt không.
ADCON1 = 0b00001111; TRISB1 = 0; TRISB2 = 1; TRISB3 = 0; TRISB4 = 0; TRISB5 = 0; TRISC = 0x00; TRISA = 0x00; PORTA = 0xc0; TRISB6 = 0; RB6 = 1; rơle1 = 0; relay2 = 0; rơle3 = 0; rơle4 = 0; rly1LED = 0; rly3LED = 0; rly2LED = 0; rly4LED = 0; fanLED = 0; i = 0; ir = 0; tric = 0; bộ đếm thời gian (); INTEDG0 = 0; // Ngắt trên cạnh rơi INT0IE = 1; // Cho phép ngắt ngoài INT0 (RB0) INT0IF = 0; // Xóa bit cờ ngắt ngoài INT0 PEIE = 1; // Kích hoạt ngắt ngoại vi GIE = 1; // Bật INT trên toàn cầu
Bây giờ, ở đây chúng tôi không sử dụng bất kỳ chế độ ngắt hoặc chụp và so sánh nào để phát hiện tín hiệu IR. Ở đây chúng ta vừa sử dụng chốt kỹ thuật số để đọc dữ liệu giống như đọc nút nhấn. Bất cứ khi nào tín hiệu tăng cao hoặc thấp, chúng tôi chỉ cần đặt phương pháp gỡ lỗi và chạy bộ đếm thời gian. Bất cứ khi nào pin thay đổi trạng thái của nó sang trạng thái khác thì giá trị thời gian sẽ được lưu trong một mảng.
IR từ xa gửi logic 0 là 562,5us và logic 1 là 2250us. Bất cứ khi nào bộ đếm thời gian đọc khoảng 562,5us thì chúng tôi giả sử nó là 0 và khi bộ đếm thời gian đọc khoảng 2250us thì chúng tôi giả định nó là 1. Sau đó, chúng tôi chuyển đổi nó thành hex.
Tín hiệu đến từ điều khiển từ xa chứa 34 bit. Chúng tôi lưu trữ tất cả các byte trong mảng và sau đó giải mã byte cuối cùng để sử dụng.
while (ir == 1); INT0IE = 0; while (ir == 0); TMR0 = 0; while (ir == 1); i ++; dat = TMR0; if (dat> 5000 && dat <12000) {} else {i = 0; INT0IE = 1; } if (i> = 33) {GIE = 0; chậm trễ (50); cmd = 0; for (j = 26; j <34; j ++) {if (dat> 1000 && dat <2000) cmd << = 1; else if (dat> 3500 && dat <4500) {cmd- = 0x01; cmd << = 1; }} cmd >> = 1;
Đoạn mã trên nhận và giải mã tín hiệu IR bằng cách sử dụng ngắt bộ định thời và lưu giá trị HEX tương ứng trong biến cmd. Bây giờ chúng ta có thể so sánh giá trị HEX này (biến cmd) với các giá trị HEX được xác định trước của chúng ta và chuyển đổi rơle như hình dưới đây
if (cmd == 0xAF) {relay1 = ~ relay1; rly1LED = ~ rly1LED; } else if (cmd == 0x27) {relay2 = ~ relay2; rly2LED = ~ rly2LED; } else if (cmd == 0x07) {relay3 = ~ relay3; rly3LED = ~ rly3LED; } else if (cmd == 0xCF) {relay4 = ~ relay4; rly4LED = ~ rly4LED; } else if (cmd == 0x5f) {speed ++; if (speed> 5) {speed = 5; }} else if (cmd == 0x9f) {speed--; if (speed <= 0) {speed = 0; }}
Bây giờ để biết quạt của chúng ta hiện đang hoạt động, chúng ta nên sử dụng màn hình 7 đoạn. Các dòng sau đây được sử dụng để hướng dẫn các chân của màn hình 7 đoạn.
if (speed == 5) // tắt triger 5x2 = 10ms // tốc độ 0 {PORTA = 0xC0; // hiển thị 0 RB6 = 1; fanLED = 0; } else if (speed == 4) // kích hoạt 8 ms // tốc độ 1 {PORTA = 0xfc; // hiển thị 1 RB6 = 1; fanLED = 1; } else if (speed == 3) // kích hoạt 6 ms // tốc độ 2 {PORTA = 0xE4; // hiển thị 2 RB6 = 0; fanLED = 1; } else if (speed == 2) // kích hoạt 4ms // tốc độ 3 {PORTA = 0xF0; // hiển thị 3 RB6 = 0; fanLED = 1; } else if (speed == 1) // kích hoạt 2ms // tốc độ 4 {PORTA = 0xD9; // hiển thị 4 RB6 = 0; fanLED = 1; } else if (speed == 0) // kích hoạt 0ms // tốc độ 5 full power {PORTA = 0xD2; // hiển thị 5 RB6 = 0; fanLED = 1; }
Hàm dưới đây dành cho ngắt ngoài và tràn thời gian. Chức năng này có nhiệm vụ phát hiện đường cắt ngang và lái xe Triac.
void ngắt isr () {if (INT0IF) {delay (speed); tric = 1; for (int t = 0; t <100; t ++); tric = 0; INT0IF = 0; } if (TMR0IF) // Kiểm tra xem nó có phải là TMR0 Overflow ISR hay không {TMR0IF = 0; }}
PCB cuối cùng cho tự động hóa nhà điều khiển từ xa IR này trông như hình dưới đây:
Thiết kế mạch và PCB sử dụng EasyEDA:
Để thiết kế tính năng tự động hóa nhà điều khiển từ xa này, chúng tôi đã sử dụng EasyEDA, một công cụ EDA trực tuyến miễn phí để tạo mạch và PCB một cách liền mạch. Trước đây, chúng tôi đã đặt hàng một số PCB từ EasyEDA và vẫn sử dụng dịch vụ của họ vì chúng tôi đã tìm thấy toàn bộ quá trình, từ vẽ mạch đến đặt hàng PCB, thuận tiện và hiệu quả hơn so với các nhà sản xuất PCB khác. EasyEDA cung cấp miễn phí bản vẽ mạch, mô phỏng, thiết kế PCB và cũng cung cấp dịch vụ PCB tùy chỉnh chất lượng cao nhưng giá thấp. Kiểm tra tại đây để xem hướng dẫn đầy đủ về Cách sử dụng Easy EDA để tạo Sơ đồ, bố trí PCB, Mô phỏng mạch, v.v.
EasyEDA đang cải thiện từng ngày; họ đã bổ sung nhiều tính năng mới và cải thiện trải nghiệm người dùng tổng thể, giúp EasyEDA dễ dàng hơn và có thể sử dụng để thiết kế mạch. Họ sẽ sớm ra mắt phiên bản Máy tính để bàn, có thể tải xuống và cài đặt trên máy tính của bạn để sử dụng ngoại tuyến.
Trong EasyEDA, bạn có thể công khai các thiết kế mạch và PCB của mình để những người dùng khác có thể sao chép hoặc chỉnh sửa chúng và có thể hưởng lợi từ đó, chúng tôi cũng đã công khai toàn bộ bố cục Mạch và PCB cho tính năng Tự động hóa Trang chủ điều khiển từ xa này .
Dưới đây là Ảnh chụp nhanh của lớp trên cùng của bố cục PCB từ EasyEDA, bạn có thể xem bất kỳ Lớp nào (Trên cùng, Dưới cùng, Topsilk, bottom, v.v.) của PCB bằng cách chọn lớp tạo thành Cửa sổ 'Lớp'.
Tính toán và đặt hàng các mẫu PCB trực tuyến:
Sau khi hoàn thành việc thiết kế PCB, bạn có thể nhấp vào biểu tượng của đầu ra Chế tạo , sẽ đưa bạn đến trang đặt hàng PCB. Tại đây, bạn có thể xem PCB của mình trong Gerber Viewer hoặc tải xuống các tệp Gerber trên PCB của bạn và gửi chúng đến bất kỳ nhà sản xuất nào, cũng dễ dàng hơn rất nhiều (và rẻ hơn) để đặt hàng trực tiếp trong EasyEDA. Tại đây bạn có thể chọn số lượng PCB mà bạn muốn đặt hàng, bao nhiêu lớp đồng bạn cần, độ dày PCB, trọng lượng đồng và thậm chí cả màu sắc của PCB. Sau khi bạn đã chọn tất cả các tùy chọn, hãy nhấp vào “Lưu vào giỏ hàng” và hoàn tất đơn đặt hàng của bạn, sau đó bạn sẽ nhận được PCB của mình trong vòng vài ngày.
Bạn có thể trực tiếp đặt mua PCB này hoặc tải xuống tệp Gerber bằng liên kết này.
Sau vài ngày đặt hàng PCB, chúng tôi đã nhận được PCB. Các bảng mà chúng tôi nhận được được hiển thị bên dưới.
Sau khi chúng tôi nhận được PCB, tôi đã gắn tất cả các thành phần cần thiết trên PCB và cuối cùng chúng tôi đã sẵn sàng Tự động hóa tại nhà được điều khiển từ xa bằng IR, hãy kiểm tra mạch này hoạt động trong video trình diễn ở cuối bài viết.