Mục lục:

Máy dò cảm ứng xung dựa trên Arduino - Cuộn dây lật: 5 bước (có hình ảnh)
Máy dò cảm ứng xung dựa trên Arduino - Cuộn dây lật: 5 bước (có hình ảnh)

Video: Máy dò cảm ứng xung dựa trên Arduino - Cuộn dây lật: 5 bước (có hình ảnh)

Video: Máy dò cảm ứng xung dựa trên Arduino - Cuộn dây lật: 5 bước (có hình ảnh)
Video: Lạ lắm cách xăm mình ngầu lòi #shorts #thúvị 2024, Tháng bảy
Anonim
Máy dò cảm ứng xung dựa trên Arduino - Cuộn dây lật
Máy dò cảm ứng xung dựa trên Arduino - Cuộn dây lật
Máy dò cảm ứng xung dựa trên Arduino - Cuộn dây lật
Máy dò cảm ứng xung dựa trên Arduino - Cuộn dây lật

Ý tưởng

Trước đây, đã từng chế tạo một số máy dò kim loại với nhiều kết quả khác nhau, tôi muốn khám phá các khả năng của Arduino theo hướng đó.

Có một số ví dụ điển hình về cách chế tạo máy dò kim loại với Arduino, một số ví dụ ở đây là tài liệu hướng dẫn. Nhưng khi nhìn vào chúng, chúng thường yêu cầu khá nhiều thành phần bên ngoài để xử lý tín hiệu tương tự hoặc độ nhạy khá thấp.

Khi nghĩ về máy dò kim loại, chủ đề chính là làm thế nào để cảm nhận những thay đổi nhỏ của điện áp trong các tín hiệu liên quan đến cuộn dây tìm kiếm. Những thay đổi này thường rất nhỏ. Cách tiếp cận rõ ràng nhất sẽ là sử dụng các đầu vào tương tự của ATmega328. Nhưng nhìn vào các thông số kỹ thuật, có hai vấn đề cơ bản: chúng (thường) chậm và độ phân giải (trong hầu hết các trường hợp) là thấp.

Mặt khác, Arduino đang chạy ở tần số 16MHz và có một số khả năng định thời i. e. độ phân giải 0,0625µS nếu sử dụng tốc độ xung nhịp. Vì vậy, thay vì sử dụng đầu vào tương tự để cảm nhận, cách đơn giản nhất để cảm nhận những thay đổi động nhỏ của điện áp là so sánh sự thay đổi điện áp sụt giảm theo thời gian ở một điện áp chuẩn cố định.

Với mục đích này, ATmega328 có tính năng gọn gàng của một bộ so sánh nội bộ giữa D6 và D7. Bộ so sánh này có thể kích hoạt ngắt, cho phép xử lý sự kiện chính xác. Bỏ lại bên cạnh các quy trình định thời được mã hóa gọn gàng như millis () và micos () và chuyển sang bộ đếm thời gian bên trong của ATmega328 với độ phân giải cao hơn nhiều, Arduino là cơ sở tuyệt vời cho các phương pháp phát hiện kim loại.

Vì vậy, từ chế độ xem mã nguồn, một khởi đầu tốt sẽ là lập trình bộ so sánh bên trong để "thay đổi" trong cực của các đầu vào và sử dụng bộ đếm bên trong với tốc độ cao nhất có thể để thay đổi thời gian của các thay đổi.

Mã chung trong Arduido để đạt được điều này là:

// Định nghĩa tất cả các biến trước bắt buộc, v.v. và thiết lập các thanh ghi

không dấu char clockSelectBits = _BV (CS10); // không có tỷ lệ đặt trước, full xtal void setup () {pinMode (6, INPUT); // + của bộ so sánh - bằng cách đặt chúng là INPUT, chúng // được đặt thành pinMode trở kháng cao (7, INPUT); // - của bộ so sánh - bằng cách đặt chúng là INPUT, chúng // được đặt thành trở kháng cao cli (); // dừng ngắt TCCR1A = 0; // đặt toàn bộ thanh ghi TCCR1A thành 0 TCCR1B = 0; // tương tự cho TCCR1B -> chế độ bình thườngTCNT1 = 0; // khởi tạo giá trị bộ đếm thành 0; TCCR1B | = clockSelectBits; // thiết lập prescaler và khởi động đồng hồ TIMSK1 = _BV (TOIE1); // thiết lập cho phép ngắt tràn bộ định thời bit sei (); // cho phép ngắt ACSR = (0 << ACD) | // Bộ so sánh tương tự: Đã bật (0 << ACBG) | // Băng tần so sánh tương tự Chọn: AIN0 được áp dụng cho đầu vào tích cực (0 << ACO) | // Đầu ra của bộ so sánh tương tự: Tắt (1 << ACI) | // Cờ ngắt so sánh tương tự: Xóa ngắt đang chờ xử lý (1 << ACIE) | // Ngắt so sánh tương tự: Đã bật (0 << ACIC) | // Chụp đầu vào so sánh tương tự: Đã tắt (0 << ACIS1 | 0 << ACIS0 // ngắt khi chuyển đổi đầu ra // (0 << ACIS1 | 1 << ACIS0 // dành riêng // (1 << ACIS1 | 0 << ACIS0 // ngắt trên cạnh đầu ra giảm // (1 << ACIS1 | 1 << ACIS0 // ngắt trên cạnh đầu vào tăng;}

// quy trình này được gọi mỗi khi trình so sánh tạo ra một ngắt

ISR (ANALOG_COMP_vect) {oldSREG = SREG; cli (); timeStamp = TCNT1; SREG = oldSREG; }

// quy trình này được gọi mỗi khi có sự cố tràn trong bộ đếm nội bộ

ISR (TIMER1_OVF_vect) {timer1_overflow_count ++; }

// quy trình này được sử dụng để đặt lại bộ đếm thời gian về 0

void resetTimer (void) {oldSREG = SREG; cli (); // Vô hiệu hóa ngắt TCNT1 = 0; // khởi tạo giá trị bộ đếm thành 0 SREG = oldSREG; // Khôi phục thanh ghi trạng thái TCCR1B | = clockSelectBits; // thiết lập prescaler và khởi động đồng hồ timer1_overflow_count = 0; // đặt lại bộ đếm tràn}

Tất nhiên ý tưởng này không hoàn toàn mới. Phần chính của mã này có thể được tìm thấy ở nơi khác. Một cách triển khai tốt như một ứng dụng cho bộ vi điều khiển được tìm thấy trên trang chủ Máy dò kim loại cảm ứng xung siêu nhỏ của TPIMD.

www.miymd.com/index.php/projects/tpimd/ (rất tiếc là trang này không còn trực tuyến nữa, hiện có một bản sao lưu của trang tại www.basic4mcu.com, tìm kiếm cho "TPIMD").

Bước 1: Ý tưởng cảm ứng xung Arduino - Cuộn dây lật

Ý tưởng cảm ứng xung Arduino - Cuộn dây lật
Ý tưởng cảm ứng xung Arduino - Cuộn dây lật
Ý tưởng cảm ứng xung Arduino - Cuộn dây lật
Ý tưởng cảm ứng xung Arduino - Cuộn dây lật

Ý tưởng là sử dụng Arduino làm máy dò Cảm ứng xung, giống như trong TPIMD, vì ý tưởng thời gian của đường cong phân rã dường như hoạt động khá tốt. Vấn đề với máy dò cảm ứng xung là chúng thường cần điện áp khác nhau để hoạt động. Một điện áp để cấp nguồn cho cuộn dây và một điện áp riêng để xử lý đường cong phân rã. Hai nguồn điện áp này làm cho máy dò cảm ứng xung luôn phức tạp một chút.

Nhìn vào điện áp của cuộn dây trong máy dò PI, đường cong kết quả có thể được chia thành hai giai đoạn khác nhau. Giai đoạn đầu tiên là xung tự cung cấp năng lượng cho cuộn dây và tạo ra từ trường (1). Giai đoạn thứ hai là đường cong phân rã điện áp, bắt đầu với đỉnh điện áp, sau đó điều chỉnh nhanh đến điện áp "không có điện" của cuộn dây (2). Vấn đề là cuộn dây thay đổi cực sau xung. Xung có dương không (Var 1. trong hình đính kèm) đường cong phân rã là âm. Xung có âm không, đường cong phân rã sẽ dương (Var 2. trong hình đính kèm)

Để giải quyết vấn đề cơ bản này, cuộn dây cần được “lật lại” điện tử sau xung. Trong trường hợp này, xung có thể dương và đường cong phân rã cũng có thể dương.

Để đạt được điều này, cuộn dây phải được cách ly với Vcc và GND sau xung. Lúc này chỉ có dòng điện chạy qua điện trở tắt dần. Hệ thống cô lập của cuộn dây và điện trở giảm chấn có thể được "định hướng" đến bất kỳ điện áp tham chiếu nào. Điều này, về lý thuyết sẽ tạo ra đường cong dương kết hợp (dưới cùng của hình vẽ)

Đường cong tích cực này có thể được sử dụng thông qua bộ so sánh để phát hiện thời điểm mà điện áp phân rã “cắt” điện áp tham chiếu. Trong trường hợp kho báu gần cuộn dây, đường cong phân rã thay đổi và thời điểm vượt qua điện áp tham chiếu thay đổi. Thay đổi này có thể được phát hiện.

Sau một số thí nghiệm, mạch điện sau đây hoạt động.

Mạch bao gồm một mô-đun Arduino Nano. Mô-đun này điều khiển hai bóng bán dẫn MOSFET cấp nguồn cho cuộn dây (ở SV3) thông qua D10. Khi xung tại D10 kết thúc, cả hai MOSFET cách ly cuộn dây khỏi 12V và GND. Năng lượng tiết kiệm được trong cuộn dây chảy ra qua R2 (220 Ohms). Đồng thời R1 (560 Ohms) nối cực dương trước đây của cuộn dây tho GND. Điều này thay đổi đường cong phân rã âm tại R5 (330 Ohms) thành đường cong dương. Các điốt bảo vệ chân đầu vào của Arduino.

R7 là một nhà cung cấp điện áp vào khoảng 0,04V. Tại thời điểm đường cong phân rã tại D7 trở nên âm hơn 0,04 tại D6, một ngắt được kích hoạt và khoảng thời gian sau khi kết thúc xung được lưu lại.

Trong trường hợp kim loại gần cuộn dây, đường cong phân rã kéo dài hơn, và thời gian từ khi kết thúc xung đến khi ngắt sẽ dài hơn.

Bước 2: Xây dựng máy dò (Breadboard)

Xây dựng máy dò (Breadboard)
Xây dựng máy dò (Breadboard)
Xây dựng máy dò (Breadboard)
Xây dựng máy dò (Breadboard)
Xây dựng máy dò (Breadboard)
Xây dựng máy dò (Breadboard)

Việc xây dựng máy dò khá dễ dàng. Điều này có thể được thực hiện trên breadboard (dính vào mạch gốc) hoặc bằng cách hàn các bộ phận trên PCB.

Đèn LED D13 trên bảng Arduino Nano được sử dụng làm chỉ thị cho kim loại

Mở breadboard là cách nhanh nhất để máy dò đang hoạt động. Khá cần một số hệ thống dây điện, nhưng điều này vẫn có thể được thực hiện với một breadboard nhỏ. Trong hình, điều này được thể hiện qua 3 bước khi Arduino và MOSFET đang ẩn một số dây. Khi kiểm tra, tôi đã ngắt kết nối các điốt bằng cách nào đó mà không nhận thấy lúc đầu. Điều này không có ảnh hưởng tiêu cực đến hoạt động của máy dò. Trong phiên bản PCB của mạch, tôi đã loại bỏ chúng hoàn toàn.

Không hiển thị trên hình ảnh là kết nối với màn hình OLED 0,96. Màn hình này được kết nối:

Vcc - 5V (tại chân Arduino, không phải điện áp cung cấp !!!)

GND - GND

SCL - A5

SDA - A4

Màn hình OLED này là cần thiết để hiệu chỉnh máy dò ban đầu. Điều này được thực hiện bằng cách đặt điện áp phù hợp tại PIN6 của Arduino. Điện áp này phải vào khoảng 0,04V. Màn hình hiển thị giúp đặt điện áp phù hợp.

Phiên bản breadboard hoạt động khá tốt, mặc dù có lẽ không phù hợp để đi vào thế giới hoang dã.

Bước 3: Đi PCB

Đi PCB
Đi PCB
Đi PCB
Đi PCB
Đi PCB
Đi PCB
Đi PCB
Đi PCB

Đối với việc hàn, tôi không thực sự thích PCB công nghệ cao hai mặt, vì vậy tôi đã sửa đổi mạch để phù hợp với PCB một mặt.

Các sửa đổi sau đã được thực hiện:

1. các điốt đã được bỏ ra ngoài.

2. các cổng của MOSFET có điện trở 10 Ohm

3. điện áp cung cấp cho bộ phân áp tại D6 được cung cấp bởi một tín hiệu mức CAO tại D8

4. pin trình điều khiển cho MOSFET đã được thay đổi.

Bằng cách này có thể tạo ra một PCB một mặt có thể được hàn trên các PCB thông dụng. Sử dụng mạch này, bạn sẽ có một máy dò PI hoạt động chỉ với 8-10 thành phần bên ngoài (tùy thuộc vào màn hình OLED và / hoặc loa được sử dụng hay không).

Bước 4: Thiết lập và sử dụng máy dò

Thiết lập và sử dụng máy dò
Thiết lập và sử dụng máy dò
Thiết lập và sử dụng máy dò
Thiết lập và sử dụng máy dò
Thiết lập và sử dụng máy dò
Thiết lập và sử dụng máy dò

Nếu bộ phát hiện được xây dựng đúng cách và chương trình được ghi vào Arduino, cách dễ nhất (nếu không phải là duy nhất) để thiết lập đơn vị là sử dụng màn hình OLED. Màn hình được gắn vào 5V, GND, A4, A5. Màn hình sẽ hiển thị "hiệu chỉnh" sau khi thiết bị được cấp nguồn. Sau một vài giây, nó sẽ thông báo “hiệu chuẩn đã xong” và ba số sẽ được hiển thị trên màn hình.

Số đầu tiên là "giá trị tham chiếu" được xác định trong quá trình hiệu chuẩn. Giá trị thứ hai là giá trị đo cuối cùng và giá trị thứ ba là giá trị trung bình của 32 lần đo cuối cùng.

Ba giá trị này ít nhiều phải giống nhau (trong trường hợp thử nghiệm của tôi là dưới 1000). Giá trị giữa phải ổn định hơn hoặc ít hơn.

Để bắt đầu thiết lập ban đầu, không được có kim loại gần cuộn dây.

Bây giờ bộ chia điện áp (chiết áp cắt) nên được cắt để hai giá trị thấp hơn phải được đặt ở mức tối đa trong khi vẫn cho kết quả đọc ổn định. Có một cài đặt quan trọng, trong đó giá trị giữa bắt đầu cho các kết quả đọc kỳ lạ. Xoay lại tông đơ để lấy lại giá trị ổn định.

Nó có thể xảy ra, rằng màn hình bị đóng băng. Chỉ cần nhấn nút đặt lại và bắt đầu lại.

Đối với thiết lập của tôi (cuộn dây: 18 vòng @ 20cm), giá trị ổn định là khoảng 630-650. Sau khi thiết lập, nhấn nút đặt lại, thiết bị sẽ hiệu chỉnh lại và tất cả các giá trị cây phải ở trong cùng một phạm vi trở lại. Nếu kim loại bây giờ được đưa đến cuộn dây, đèn LED trên Arduino-Board (D13) sẽ sáng lên. Một loa gắn liền tạo ra một số tiếng động khi nhấp chuột (có một số chỗ để cải thiện chương trình ở đó).

Để ngăn chặn kỳ vọng cao:

Máy dò có phát hiện một số thứ, nhưng nó vẫn là một máy dò rất đơn giản và hạn chế.

Để tạo ấn tượng về các khả năng, a đã thực hiện một số phát hiện tham chiếu với các máy dò khác. Nhìn vào kết quả, nó vẫn khá ấn tượng đối với một máy dò chỉ có 8 bộ phận bên ngoài nhưng không tương xứng với các máy dò chuyên nghiệp.

Nhìn vào mạch và chương trình, có rất nhiều chỗ để cải thiện. Giá trị của các điện trở được tìm thấy theo kinh nghiệm, thời gian xung 250ms được chọn ngẫu nhiên, các thông số cuộn dây cũng vậy. Nếu bạn có ý tưởng để cải tiến, tôi sẽ rất vui khi thảo luận về chúng.

Chúc vui vẻ!

Bước 5: Cập nhật 1: Sử dụng màn hình LCD 16x2

Cập nhật1: Sử dụng màn hình LCD 16x2
Cập nhật1: Sử dụng màn hình LCD 16x2
Cập nhật1: Sử dụng màn hình LCD 16x2
Cập nhật1: Sử dụng màn hình LCD 16x2
Cập nhật1: Sử dụng màn hình LCD 16x2
Cập nhật1: Sử dụng màn hình LCD 16x2

Cải tiến

Trong quá trình kiểm tra thêm, tôi nhận ra rằng thư viện cho Màn hình OLED I2C đang sử dụng hết thời gian. Vì vậy, tôi quyết định sử dụng màn hình 16x2 với bộ chuyển đổi I2C.

Vì vậy, tôi đã áp dụng chương trình cho màn hình LCD thêm một số tính năng hữu ích. Dòng đầu tiên của màn hình hiển thị cường độ tín hiệu của một chỉ báo có thể. Dòng thứ hai bây giờ hiển thị hai giá trị. Nắm tay chỉ ra độ lệch tín hiệu hiện tại so với giá trị hiệu chuẩn. Giá trị này phải là "0". Nếu giá trị này liên tục âm hoặc dương, máy dò phải được hiệu chỉnh lại bằng cách nhấn nút đặt lại. Giá trị dương cho biết kim loại gần cuộn dây.

Giá trị thứ hai cho thấy giá trị trễ thực tế của đường cong phân rã. Giá trị này thường không thú vị lắm, nhưng cần thiết cho thiết lập ban đầu của máy dò.

Chương trình hiện cho phép tạo nhiều khoảng thời gian xung trong một chuỗi (phương tiện thử nghiệm / cải thiện hiệu suất). Tôi đã không đạt được bất kỳ đột phá nào. Vì vậy, mặc định được đặt thành một khoảng thời gian xung.

Thiết lập ban đầu của máy dò

Khi thiết lập bộ dò, giá trị thứ hai của dòng thứ hai là có liên quan (giá trị đầu tiên có thể được bỏ qua). Ban đầu giá trị có thể "không ổn định" (xem hình). Xoay điện trở cắt cho đến khi giá trị đọc ổn định. Sau đó, xoay nó để tăng giá trị đến giá trị ổn định tối đa. Nhấn nút đặt lại để hiệu chỉnh lại và máy dò đã sẵn sàng để sử dụng.

Tôi có ấn tượng rằng bằng cách đặt giá trị ổn định tối đa, tôi đã mất độ nhạy đối với các kim loại không phải sắt. Vì vậy, có thể đáng để thử nghiệm một số cài đặt để có độ nhạy tốt cho những thứ không phải sắt.

Cuộn dây

Tôi xây dựng 3 cuộn dây để thử nghiệm thêm

1 -> 18 lượt @ 200mm

2 -> 25 lượt @ 100mm

3 -> 48 lượt @ 100mm

Điều thú vị là tất cả các cuộn dây hoạt động khá tốt, với hiệu suất gần như giống nhau (đồng xu 20ct ở 40-50mm trong không khí). Đây có thể là một quan sát khá chủ quan.

Đề xuất: