Mạch đếm sản phẩm dùng cảm biến hồng ngoại – Chia Sẻ Kiến Thức Điện Máy Việt Nam
Giới Thiệu Mạch đếm mẫu sản phẩm dùng cảm biến hồng ngoại
Mạch đếm loại sản phẩm dùng cảm biến hồng ngoại : Trong bài viết này, tất cả chúng ta sẽ phong cách thiết kế Mạch đếm loại sản phẩm dùng cảm biến hồng ngoại. Chi tiết hơn, chúng tôi sẽ sử dụng cảm biến IR để phát hiện vật thể để làm bộ đếm. Các Ứng dụng thường được sử dụng :
- Đếm những người đi qua một lối đi hoặc lối vào nhất định. Ví dụ, trong những tòa nhà ở TM có những cổng trấn áp sự ra vào hoặc hiện hữu của người dùng thường được sử dụng để tối ưu hóa việc tiêu thụ nguồn năng lượng ;
-
đếm đồ vật hoặc hàng hóa trong lĩnh vực công nghiệp;
Bạn đang đọc: Mạch đếm sản phẩm dùng cảm biến hồng ngoại
- Vân vân .
Mạch đếm loại sản phẩm dùng cảm biến hồng ngoại đếm loại sản phẩm dùng cảm biến hồng ngoại hoàn toàn có thể được tạo ra không riêng gì với công nghệ IR mà còn với những mạng lưới hệ thống hình ảnh nhiệt sử dụng một loạt những cảm biến phát hiện nguồn nhiệt hoặc sử dụng thị giác máy thường nhu yếu những thuật toán giải quyết và xử lý hình ảnh phức tạp.
Giới thiệu ứng dụng : bộ đếm với công nghệ tiên tiến IR
Khoảng cách từ đối tượng người dùng là rất quan trọng và trong 1 số ít trường hợp, cảm biến IR không thích hợp cho những ứng dụng này. Nếu khoảng cách từ vật thể lớn hơn 20-30 cm, cảm biến siêu âm hoàn toàn có thể là lựa chọn tốt hơn.
Chúng ta cần biết khi nào cảm biến IR thay đổi trạng thái của nó từ CAO sang THẤP và đếm số lần chuyển đổi này xảy ra: đây được gọi là phát hiện thay đổi trạng thái . Để biết thêm thông tin về nguyên tắc hoạt động của cảm biến hồng ngoại .
Mạch đếm loại sản phẩm dùng cảm biến hồng ngoại hai chiều
Các bộ đếm hạng sang sử dụng phần cứng phức tạp cho quy trình đếm. Dự án của chúng tôi là một bộ đếm đối tượng người dùng đơn thuần dựa trên Arduino và hai cảm biến IR. Chi tiết hơn, nó là bộ đếm từ 0 đến 9, trong đó cảm biến tiên phong được sử dụng để đếm những vật đến, cảm biến thứ hai là những người đi ra. Sự độc lạ ( IN – OUT ) được hiển thị trên LED 7 đoạn.
Mô tả phần cứng : LED 7 đoạn
Tập trung vào LED 7 đoạn SMA42056, đây là một thành phần điện tử được thiết kế để hiển thị số và thường được sử dụng trong đồng hồ kỹ thuật số, đồng hồ điện tử và các loại LED số khác.
SMA42056 là LED 7 đoạn cathode chung với một đoạn bổ trợ ở đầu cuối được gọi là dấu thập phân hoặc đơn thuần là dấu chấm, được biểu lộ bằng chữ P. ( Xem Hình 2 ), được sử dụng để hiển thị những số không phải số nguyên. Mỗi đoạn chỉ là một đèn LED đơn thuần và thường được biểu lộ bằng những vần âm từ A đến G. LED 7 đoạn không nhúng một điện trở tiếp nối đuôi nhau cho mỗi đèn LED và tinh chỉnh và điều khiển chúng với điện áp một chiều không đổi hoàn toàn có thể làm hỏng vĩnh viễn những điểm nối : tránh điều này chúng tôi sẽ sử dụng một điện trở tiếp nối đuôi nhau 220 Ω cho mỗi đèn LED.
Giải thích về Demo Bộ đếm hai chiều
Mạch sẽ đếm những đối tượng người dùng không trong suốt đang đi qua hai cổng IR : cổng tiên phong tạo ra số tăng trên bộ đếm tổng, cổng thứ hai tạo ra số giảm. Vì mạch khá đơn thuần và sử dụng led một chữ số, ứng dụng của chúng tôi sẽ kiểm tra xem có hai điều đã xảy ra :
- Số đếm không được trình diễn bằng số âm ;
- Số đếm không được màn biểu diễn bằng số lớn hơn 9 ;
BOM ( Bill of Materials ) của mạch là :
- Bo mạch Arduino UNO;
- 2 x cảm biến IR fc-51;
- 1 x LED 7 – đoạn SMA42056;
- 8 x R = 220 Ω.
Mạch nguyên tắc
Để điều khiển LED 7 đoạn, chúng ta cần có 7 PIN đầu ra kỹ thuật số như trong Hình 4. Ta cũng cần đọc thông tin từ hai cảm biến IR. Điều này yêu cầu sử dụng 9 chân kỹ thuật số.
Trong trường hợp, ta đã sử dụng chân từ D2 đến D10 của Arduino. Để làm rõ ràng hơn, chúng tôi đã xác lập số PIN để gán tên riêng cho chúng. Lưu ý rằng, những tham số không đổi tại thời hạn chạy và do đó, được xác lập tại thời gian biên dịch, chúng tôi đang sử dụng những thông tư tiền giải quyết và xử lý. Sử dụng lệnh “ define ”, tất cả chúng ta không chỉ giảm chiếm hữu bộ nhớ mà còn tối ưu hóa việc thực thi chương trình. Chúng ta được xác lập những chân kỹ thuật số ( từ D2 đến D8 ) mà sẽ sử dụng để điều khiển và tinh chỉnh led là DISP_PIN_x ( x từ 0 đến 6 ). Hai chân đầu ra của cảm biến IR ( D9 và D10 ) đã được xác lập là IR1 và IR2.
/*===========================================================================*//* PIN-map. *//*===========================================================================*/#define DISP_PIN_0 2 /* digital pin input for segment A */#define DISP_PIN_1 3 /* digital pin input for segment B */#define DISP_PIN_2 4 /* digital pin input for segment C */#define DISP_PIN_3 5 /* digital pin input for segment D */#define DISP_PIN_4 6 /* digital pin input for segment E */#define DISP_PIN_5 7 /* digital pin input for segment F */#define DISP_PIN_6 8 /* digital pin input for segment G */#define IR1 9 /* digital pin input for ir sensor */#define IR2 10 /* digital pin input for ir sensor */
Chúng tôi cũng đã xác lập 1 số ít hằng số bổ trợ :
-
NUMB_OF_PRESET, đó là số lượng đặt trước được lưu trữ trong Lookup table (tức là 10 vì chúng tôi sẽ sử dụng các chữ số từ 0 đến 9);
- NUMB_OF_SEGMENTS, đó là những đoạn hiển thị mà tất cả chúng ta đang sử dụng ;
- MAX_NUMB, đó là số lượng giới hạn khoanh vùng phạm vi đếm lớn nhất .
/*===========================================================================*//* Constant values *//*===========================================================================*/#define NUMB_OF_PRESET 10 /* Available preset */#define NUMB_OF_SEGMENTS 7 /* Available segments */#define MAX_NUMB 9 /* High counting range limit */
Có 1 số ít giá trị không đổi khác được khai báo trong code của chúng tôi, dù sao để dễ sử dụng, chúng tôi ưu tiên tàng trữ chúng vào một mảng bidimensional được gọi là displaySEG là một Lookup table : nói cách khác, nó là một tập hợp những mã PIN đặt trước thiết yếu để hiển thị một chữ số nhất định trên màn hình hiển thị hiển thị. Trong khi những hàng biểu lộ chữ số, những cột biểu lộ từng đoạn ( LED ) của màn hình hiển thị. Ví dụ, để hiển thị số 0, toàn bộ những đoạn ngoại trừ G phải được đặt là CAO ( xem Hình 2 ). Phần tử tiên phong của mảng tàng trữ thông số kỹ thuật theo nhu yếu của mỗi DISP_PIN để hiển thị 0. Vì vậy, tất cả chúng ta hoàn toàn có thể sử dụng mảng displaySEG [ 0 ] trong một vòng lặp để đặt từng DISP_PIN theo giá trị đặt trước của tất cả chúng ta và lấy số 0 của tất cả chúng ta.
/*===========================================================================*//* Lookup table. *//*===========================================================================*/const byte displaySEG[NUMB_OF_PRESET][NUMB_OF_SEGMENTS] = {/* A B C D E F G */{ HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW }, /* 0 */{ LOW, HIGH, HIGH, LOW, LOW, LOW, LOW }, /* 1 */{ HIGH, HIGH, LOW, HIGH, HIGH, LOW, HIGH }, /* 2 */{ HIGH, HIGH, HIGH, HIGH, LOW, LOW, HIGH }, /* 3 */{ LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH }, /* 4 */{ HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH }, /* 5 */{ HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH }, /* 6 */{ HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW }, /* 7 */{ HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH }, /* 8 */{ HIGH, HIGH, HIGH, HIGH, LOW, HIGH, HIGH }, /* 9 */};
Chúng ta cần những biến bổ trợ là trạng thái của cảm biến IR được đặt tên là IRx_out ( với x 1 hoặc 2 ), một biến để tàng trữ giá trị đếm và một biến chung được sử dụng trong những vòng lặp.
int IR1_out = HIGH; /* Avoiding initial false detections. */int IR2_out = HIGH; /* Avoiding initial false detections. */int counter = 0;int i = 0;
Các công dụng được lý giải
setDisplayValue()
Hàm này viết 1 số ít từ 0 đến 9 trên màn hình hiển thị. Chi tiết hơn, tham số n đại diện thay mặt cho số hiển thị trên màn hình hiển thị của tất cả chúng ta. Lưu ý rằng n % 10 là bắt buộc để tránh thực trạng tràn bộ đệm ở đầu cuối.
void setDisplayValue(int n) {for(i = 0; i < NUMB_OF_SEGMENTS; i++){digitalWrite(DISP_PIN_0 + i, displaySEG[n % 10][i]);}}
initDisplay()
Đây không phải là một tính năng mà là một macro mà ridefine setDisplayValue chuyển 0 làm đối số. Macro này được sử dụng để đặt lại hiển thị khi khởi động. Lưu ý rằng bằng cách sử dụng những lệnh tiền giải quyết và xử lý, chúng tôi vẫn đang tối ưu hóa những bộ nhớ và hiệu suất tránh để tạo bản ghi kích hoạt bổ trợ.
#define initDisplay() setDisplayValue(0)
increaseAndDisplay()
Chức năng này tăng bộ đếm và update màn hình hiển thị. Lưu ý rằng, nếu bộ đếm lớn hơn MAX_NUMB thì nó sẽ kết thúc thành 1.
void increaseAndDisplay() {counter++;if(counter > MAX_NUMB) {counter = 1;}setDisplayValue(counter);}
decreaseAndDisplay()
Chức năng này giảm bộ đếm và update màn hình hiển thị. Lưu ý rằng, nếu bộ đếm bằng 0 thì nó không có công dụng gì : theo cách này, tất cả chúng ta đang tránh những số âm.
void decreaseAndDisplay() {if(counter) {counter--;setDisplayValue(counter);}}
Code chính
setup()
Thiết lập () đặt các chế độ chân: IRx làm đầu vào và DISP_PIN_x làm đầu ra. Hơn nó gọi là initDisplay () hiển thị số 0 trên SMA42056 của chúng tôi .
void setup() {Serial.begin (9600);pinMode(IR1, INPUT);pinMode(IR2, INPUT);/* Setting Display related PIN as OUTPUT */for(i = 0; i < NUMB_OF_SEGMENTS; i++){pinMode(DISP_PIN_0 + i, OUTPUT);} initDisplay();}
loop()
Vòng lặp đọc những trạng thái IR được lưu trong chúng vào IRx_out. Khi IR phát hiện một đối tượng người tiêu dùng không trong suốt thì giá trị của nó là THẤP. Lưu ý rằng cần có độ trễ để tránh phát hiện sai.
void loop() {IR1_out = digitalRead(IR1);IR2_out = digitalRead(IR2);if(IR1_out == LOW) {increaseAndDisplay();delay(500);}if(IR2_out == LOW) {decreaseAndDisplay();delay(500);} delay(100);}