Tự làm máy dò kim loại Arduino Đơn giản

Tự làm máy dò kim loại Arduino Đơn giản

Mặc dù có thiết kế đơn giản, nhưng thiết bị vẫn đảm bảo độ nhạy khá cao và hoạt động ổn định một cách hoàn hảo.

Hãy tưởng tượng cảm giác phấn khích khi khám phá một kho báu ẩn giấu, niềm vui khi tự tay tạo ra một thiết bị hữu ích, và sự thích thú khi thử nghiệm với các mạch điện tử. Giờ đây, hãy kết hợp tất cả những điều đó trong một dự án đầy thú vị: tự chế tạo máy dò kim loại bằng Arduino!

Quên đi những thiết bị đắt tiền bán sẵn – chúng ta sẽ bước vào thế giới của những nhà sáng tạo, nơi chỉ với một vài linh kiện dễ tìm và sức mạnh của Arduino, bạn có thể trở thành một thợ săn kho báu thực thụ. Nhưng dự án này không chỉ đơn thuần là tìm kiếm những đồng xu lạc trong cát; đó còn là cơ hội để khám phá hệ thống nhúng, hiểu về nguyên lý của trường điện từ và tận hưởng cảm giác phấn khích khi biến ý tưởng thành hiện thực.

Vậy nên, hãy cầm lấy mỏ hàn, mở Arduino IDE và chuẩn bị bước vào một hành trình đầy sáng tạo – nơi mỗi tín hiệu phát ra từ thiết bị của bạn có thể dẫn đến một phát hiện bất ngờ!

Hãy bắt đầu ngay thôi!

Câu chuyện

Hôm nay, mình sẽ hướng dẫn các bạn cách chế tạo một máy dò kim loại cực kỳ đơn giản nhưng vẫn mang lại hiệu suất ấn tượng. Dù thiết kế tối giản, máy vẫn có độ nhạy khá cao và hoạt động ổn định, không cần hiệu chuẩn ngay cả khi sử dụng trong thời gian dài. Đặc biệt, kích thước và độ tự cảm của cuộn dây dò không quá quan trọng – điều quan trọng nhất là sau khi lắp ráp, máy sẽ hoạt động ngay lập tức. Chính vì vậy, đây là lựa chọn lý tưởng cho những ai mới bắt đầu bước vào thế giới chế tạo điện tử.

Dự án này được lấy cảm hứng từ blog Silicon Junction, nhưng mình đã bổ sung thêm một chỉ báo âm thanh để giúp kiểm soát quá trình phát hiện kim loại tốt hơn. Phần cốt lõi của hệ thống là một bộ dao động Colpitts đơn giản, trong đó mạch cộng hưởng được tạo thành từ C2, C3 và cuộn dây dò (SEARCH_COIL). Bộ dao động này hoạt động ở tần số khoảng 260kHz, cho phép máy phát hiện kim loại một cách hiệu quả.

Toàn bộ thiết bị bao gồm các thành phần sau:

  • Vi điều khiển Arduino Nano
  • Transistor NPN BC337 hoặc loại tương tự
  • Một số điện trở
  • Năm tụ điện
  • Điốt Zener
  • Và cuộn dây dò

Điốt Zener D1 được sử dụng để giới hạn điện áp trên chân Arduino ở mức an toàn 4,3V. Tụ điện C5 và điện trở R4 giúp đảm bảo đầu ra của bộ dao động được tham chiếu về đất.

Bất kỳ cuộn dây nào có độ tự cảm khoảng 200-400µH đều có thể hoạt động tốt, và bạn nên cố gắng giữ điện trở của cuộn dây ở mức thấp để tối ưu hiệu suất. Điều này giúp tạo ra tần số dao động trong khoảng 200-400 kHz, phù hợp với khả năng xử lý của Arduino. Trong thử nghiệm, tôi đã sử dụng một cuộn dây có đường kính 20 cm với 25 vòng dây. Ngoài ra, máy dò cũng hoạt động chính xác với hai cuộn dây đồng tâm có đường kính 12 cm và 23 cm, cả hai đều có 25 vòng và được đấu nối tiếp.

Chương trình Arduino sẽ đếm số xung xảy ra trong mỗi khoảng thời gian 100 mili giây và lưu trữ giá trị này làm đường cơ sở. Trong vòng lặp chính, nó tiếp tục đếm số xung trong 100 mili giây tiếp theo và lưu trữ kết quả này làm số đếm hiện tại. Nếu số đếm thay đổi so với đường cơ sở, đèn LED sẽ bật sáng và còi báo động sẽ được kích hoạt. Điều này có nghĩa là máy dò tự động hiệu chuẩn liên tục sau mỗi 100 mili giây.

Nhờ thư viện FreqCount (có thể tải xuống từ các liên kết được cung cấp), mã chương trình trở nên đơn giản và dễ triển khai. Một ưu điểm lớn của phương pháp này là thiết bị có thể hoạt động ngay mà không cần điều chỉnh hay hiệu chuẩn thủ công. Tuy nhiên, nhược điểm là để phát hiện vật thể kim loại, cần có sự chuyển động tương đối giữa vật thể và cuộn dây dò.

Sơ đồ

Sơ đồ mạch dao động

Sơ đồ (Phần Arduino)

Code

#include <FreqCount.h>

//the baseline frequency of the main search coil
unsigned long baseLine = 0;

//Pins red, green and blue LEDs are attached to.
const int bluePin = A2;
const int greenPin = A4;
const int redPin = A5;
const int buzzerPin = 12;


void setup() {
  //set our LED pins as outputs
  pinMode(redPin,OUTPUT);
  pinMode(greenPin,OUTPUT);
  pinMode(bluePin,OUTPUT);
  pinMode(buzzerPin,OUTPUT);
  //Flash a sequence to test the LEDs and show we are starting up  
  digitalWrite(redPin,HIGH);
  delay(200);
  silence();
  digitalWrite(greenPin,HIGH);
  delay(200);
  silence();
  digitalWrite(bluePin,HIGH);
  delay(200);
  silence();

  //Read out baseline frequency count, 100ms intervals
  FreqCount.begin(100);
  while(!FreqCount.available())
  {
    delay(10);
  }
  baseLine = FreqCount.read();

  if(baseLine > 10000)
  {
    //Green, we started up OK
    digitalWrite(greenPin,HIGH);  
  }
  else
  {
    //Red, something went wrong, we didn't get a sensible count
    digitalWrite(redPin,HIGH);
  }
  delay(1000);

  silence();
}


void loop() {
  //no sample ready yet, exit.
  if (!FreqCount.available()) {
    return;
  }
  //Read how many pulses in 100 milliseconds
  unsigned long count = FreqCount.read();
  
  long difference =  baseLine - count;
  difference = abs(difference);
  
  //Difference is large, turn on the RED led
  if(difference > 5)
  {
    digitalWrite(greenPin,LOW);
    digitalWrite(bluePin,LOW);
    digitalWrite(redPin,HIGH);
    digitalWrite(buzzerPin,HIGH);
  }
  else if(difference > 2)  //medium difference, green
  {
    digitalWrite(greenPin,HIGH);
    digitalWrite(bluePin,LOW);
    digitalWrite(redPin,LOW);
    digitalWrite(buzzerPin,HIGH);
  }
  else if(difference > 1) //small difference, blue.
  {
    digitalWrite(greenPin,LOW);
    digitalWrite(bluePin,HIGH);
    digitalWrite(redPin,LOW);
    digitalWrite(buzzerPin,HIGH);
  }
  else
  {
    silence(); //no difference, turn off all LEDs
    digitalWrite(buzzerPin,LOW);
  }

  //Auto-adjust our baseline
  if(count > baseLine)
  {
    baseLine +=1;
  }
  else if (count < baseLine)
  {
     baseLine -= 1;
  }
}

  //Turn off all output pins
  void silence()
  {
    digitalWrite(redPin,LOW);
    digitalWrite(greenPin,LOW);
    digitalWrite(bluePin,LOW);
  }
    
  

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Win a Raspberry Pi!

Answer 5 questions for your chance to win!
Question 1

What color is the sky?

Tìm kiếm bằng danh mục

Chọn danh mục