» Điện tử » Máy dò kim loại »Máy dò kim loại trên Arduino Pro Mini. Xử lý độ sâu của Kolokolov-Shchedrin theo nguyên tắc Truyền Truyền

Máy dò kim loại trên Arduino Pro Mini. Xử lý độ sâu của Kolokolov-Shchedrin theo nguyên tắc Truyền Truyền


Tái chế sơ đồ nước sâu Kolokolov-Shchedrin. Sự khác biệt so với sơ đồ ban đầu:
1. KHÔNG có dao động tinh thể trên k561 .. chip và thạch anh 32 kHz. Tín hiệu 32 kHz mang lại cho Arduino Pro Mini.
2. Các mạch thông báo âm thanh trên một số vi mạch loạt 561 cũng không có mặt - tiếng nói của các mục tiêu cũng vậy, Arduino (và tôi phải nói rằng, giọng nói tuyệt vời, so với mạch của tác giả).
3. Cung cấp bởi điện áp đơn cực 12 v (pin axit-chì).
4. Điều chỉnh độ nhạy bằng các nút. Với thang đo ADC từ 0 đến 1023, ngưỡng phản hồi được điều chỉnh từ 1 đến 38 (giá trị có thể dễ dàng thay đổi trong bản phác thảo).


Máy dò kim loại trên Arduino Pro Mini. Xử lý độ sâu của Kolokolov-Shchedrin theo nguyên tắc Truyền Truyền


Quan trọng nhất, tôi muốn chỉ ra trong bài viết này rằng có thể lắp ráp MD trên Arduino không thua kém độ nhạy ban đầu (điều này đã được thực hiện, bởi vì bản gốc của mạch gốc được thu thập theo thứ tự 10 mảnh, vì vậy có tài liệu để so sánh). Mạch gốc:


Khi tôi mới bắt đầu làm việc với Arduino, tôi đã có cảm hứng đến mức tôi nghĩ rằng tôi có thể tìm và lắp ráp bất kỳ mạch Metal dò nào từ Internet trên Arduino mà tôi có thể dễ dàng tìm thấy trong bãi rác rộng lớn. Về nguyên tắc, hóa ra là như vậy, nhưng các mạch dựa trên bộ đếm tần số, không cho phép đạt được phạm vi thực sự tốt. Một số đồ chơi trẻ em và một bài kiểm tra bút + cố gắng kiếm tiền cho người mới bắt đầu. Bản gốc của MD này là một chiếc xe ngựa thực sự cho phép bạn tìm thấy các vật thể lớn ở khoảng cách 2m (xem sách Kolokolov-Shchedrin trên Google). Thống kê về MD biến đổi số. Tôi hy vọng cô ấy xuất hiện với sự hỗ trợ của người hâm mộ MD và Arduino. Chương trình này hoạt động với Arduino Uno và Arduino Pro Mini.

Hơn nữa, liên kết được trình bày về quá trình ra đời của MD này trên trang web của Iron Iron, kéo dài hơn một năm và thúc đẩy tác giả nghiên cứu về lập trình duin. Có lẽ bản phác thảo sẽ có vẻ tồi tệ với ai đó - tôi sẽ sẵn sàng chấp nhận CỐ ĐỊNH của bạn.




Hiện tại, có một bản phác thảo cho phép bạn điều chỉnh hàng rào độ nhạy (chân 7 nhân đôi +1 với hàng rào, chân 8 -1 cho hàng rào). .
Arduino về mini 5v, 16 MHz, ATmega168 và màn hình đã sử dụng những thứ này. Bên cạnh chiếc cân là bộ chuyển đổi Mini SD-


Như đã nói 1602 có giá 86 rúp, ProMini - 82 rúp. Nếu bạn muốn, bạn thường có thể chụp ATmega168 trần trụi, phát triển một bảng cho nó và điền bản phác thảo trực tiếp vào nó.Và vì vậy, ví dụ, tôi đã cài đặt mẹ-bố trên bảng MD bằng đầu nối. Bức ảnh cho thấy phích cắm 6 chân của Arduino, qua đó các bản phác thảo được đổ trực tiếp lên bảng.

Phác thảo-MD.Rx-Tx.ProMini.SrednjajaTochkaRegBar.ino

// Đầu vào tương tự A3 cho vôn kế
// Đầu vào tương tự A4 cho tín hiệu
// 6- kết luận của zook
// 9 - tần số đầu ra 31200 Hz
#incolee
LCD tinh thể lỏng (12, 11, 5, 4, 3, 2);
                                       
  byte z1 [8] = {// biểu tượng pin
  0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
 
 int đếm được = 0; // biến để lưu trữ giá trị mức tỷ lệ
 int voltag = 0; // biến để lưu giá trị điện áp
 int noll = 0; // biến để lưu giá trị trung điểm
   #define NUM_SAMPLES 10 // 10 mẫu tương tự để đọc trong 1 giây
   int tổng = 0; // tổng số mẫu đã lấy
   int mặt trời = 0; // giống nhau, nhưng chia cho 10
   unsign char sample_count = 0; // số mẫu hiện tại với
   điện áp phao = 0,0; // điện áp tính toán
   const int nút1 = 7; // nút cộng rào cản
   const int nút2 = 8; // nút rào cản
   int i = 5; // rào cản
   
void setup () {
     LCD.begin (16, 2); // hiển thị khởi tạo
     lcd.setCoder (1, 0);
     lcd.setCoder (10, 1);
     lcd.print ("Rx-Tx");
     độ trễ (3000);
     LCD.clear ();
     
     TCCR1A = TCCR1A & amp; 0xe0 | 2;
     TCCR1B = TCCR1B & amp; 0xe0 | 0x09;
     analogWrite (9, 126); // tại chân 10 PWM = 50% f = 31200Hz
     
     lcd.createChar (1, z1);
     }
     
void loop () {
     nút intState1 = CAO; // Trạng thái của nút là một
     nút intState2 = CAO; // Trạng thái hai nút
   mẫu_count = 0; // đặt lại đường viền của số lượng bổ sung
   tổng = 0; // đặt lại tổng của 10 bổ sung
   while (sample_count & lt; NUM_SAMPLES) {
   tổng + = analogRead (A4); // phép đo tiếp theo được thêm vào tổng
   mẫu_count ++; // đơn vị được thêm vào số đo
   sun = sum / 10;} // tìm giá trị trung bình từ 10 lần đo
   
   noll = analogRead (A3) / 2; // công suất trung điểm
   điện áp phao = bản đồ (analogRead (A3), 0,1023,0,1500) / 100,0;
                                        // Vôn kế được xây dựng ở đầu vào A3
   if (sun & gt; = noll + i) {Countleds = map (sun, noll + i, noll * 2 - 250, 9, 14);
                                        // nếu kết quả nhận được nằm ở đoạn thứ 9-15 của thang đo
    âm (6, đếm * 100);}
   if (sun & lt; = noll - i) {Countleds = map (sun, 116, noll - i, 0, 7);
                                        // nếu kết quả kết quả là phân đoạn 0-7 của thang đo
    âm (6, đếm * 50); }
     if (sun & lt; noll & amp; & amp; sun & gt; = noll - (i-1)) {Countleds = 7;
    không có (6); } // islet of ZERO ảo (7 đoạn)
     if (sun & gt; noll & amp; & amp; sun & lt; = noll + (i-1)) {Countleds = 8;
    không có (6); } // đảo quy mô ZERO ảo (8 đoạn)

   
    {lcd.setCoder (đếm, 0); // đặt con trỏ vào cột đếm, dòng 0
    lcd.print ("\ xff"); // biểu tượng điền
    lcd.setCoder (0, 1); // di chuyển đến 2 hàng, cột-0
    lcd.print (char (1)); // Dấu hiệu biểu tượng pin
    lcd.setCoder (1, 1); // di chuyển đến chỉ thị điện áp
    LCD.print (điện áp); // điện áp
    lcd.setCoder (7, 0); // cột thứ 8 hàng thứ 1
    if (sun & lt; noll) {lcd.print ("{");} // in
    lcd.setCoder (8, 0); // cột thứ 9 hàng thứ 1
    if (sun & gt; noll) {lcd.print ("}");} // in
    lcd.setCoder (7, 1);
    lcd.print ("B =");
    lcd.setCoder (9, 1); // 11 cột thứ 2
    LCD.print (i); // rào cản
    lcd.setCoder (13, 1); // cột thứ 13 hàng thứ 2
    lcd.print (mặt trời); // in giá trị trung bình của giá trị ADC
    độ trễ (100); // chờ
    
  buttonState1 = digitalRead (button1); // Đọc nút 1 Trạng thái
  buttonState2 = digitalRead (button2); // Đọc nút 2 trạng thái
  if (buttonState1 == THẤP) {i = i + 1; trì hoãn (50);}
                                        // Khi nhấn nút, rào cản tăng thêm 1. Trì hoãn 50
  if (buttonState2 == THẤP) {i = i - 1; trì hoãn (50);}
                                        // Khi nhấn nút, rào cản giảm đi 1. Trì hoãn 50
  if (i & lt; 1) {i = 1;} // Ranh giới dưới của hàng rào
  if (i & gt; 38) {i = 38;} // Ranh giới trên của hàng rào
 
 LCD.clear ();
    }
}

Tôi đã sử dụng xe hơi. Hai yếu tố cuối cùng của TL074 là không hoạt động. Nhưng trên mạch và bảng họ là. Bạn có thể muốn đưa họ đến tình trạng làm việc sau đó một chút. Tôi tin rằng tôi đã đạt được mục tiêu của mình. Các đơn vị hiển thị hoạt động tuyệt vời. Mọi thứ khác phụ thuộc vào MD.
9.8
10
10

Thêm một bình luận

    • cườinhững nụ cườixaxađược rồikhông biếtyahookhông
      ông chủvết xướcđồ ngốcvângvâng-vânghung hăngbí mật
      xin lỗinhảynhảy2nhảy3ân xágiúp đỡđồ uống
      dừng lạibạn bètốttốt lànhcòingấtlưỡi
      hút thuốcvỗ taycraytuyên bốgiễu cợtdon-t_mentiontải về
      nhiệttôi rấtcười1mdacuộc họpmoskingtiêu cực
      không phảibỏng ngôtrừng phạtđọcsợsợ hãitìm kiếm
      chế nhạocảm ơncái nàyto_cluecựu sinh viêncấp tínhđồng ý
      xấubeeeđen_eyeblum3đỏ mặttự hàobuồn chán
      bị kiểm duyệtdễ chịubí mật2đe dọachiến thắngyusun_bespectacled
      shokrespekthahacó trướcchào mừngkrutoyya_za
      ya_dobryingười trợ giúpne_huliganne_othodifludcấmđóng
24 bình luận
Tác giả
Cảm ơn puteec FU! Tôi yêu cầu nó từ lần thứ hai. Tôi khâu qua Arduino uno. Sự cố biến mất sau khi cập nhật bộ nạp khởi động. Bây giờ quan tâm làm thế nào để cấu hình hơn nữa.
puteec fu
Bất kỳ Arduino nào cũng phù hợp với atmega168, atmega328. Giới thiệu về nano này với một đầu nối usb nếu không nhầm. Khâu trong ide Arduino từ các ví dụ của bản phác thảo Blink (đèn LED nhấp nháy ở chân 13, đèn LED được cài đặt trên bảng). Đảm bảo rằng bạn đang sử dụng đúng cổng, bo mạch được chọn đúng, bộ xử lý trên bo mạch được chọn chính xác, tần số thạch anh trên bo mạch được chọn chính xác và phương pháp phần sụn (2) được chọn chính xác.
Lỗi không gặp phải.
Tạo một tệp mới trong Arduino, sao chép bản phác thảo từ đây sang bản phác thảo mới và sạch sẽ và nó sẽ hoạt động.Nhưng trước tiên, làm cho đèn LED trên bo mạch Arduino nhấp nháy với một ví dụ nhấp nháy tiêu chuẩn. Sau đó di chuyển trên.
Tôi chỉ mua Arduino p nano trên bộ xử lý Atmega328. Tôi đã xem lại một loạt các video và diễn đàn ... họ nói rằng nó sẽ xuất hiện .... nhưng sau đó người chơi KHÔNG nhấp nháy .... nó mang lại cho #incolee mong đợi "FILENAME" hoặc . Có ai gặp phải điều này?
Tác giả
Một bản phác thảo làm việc với bảng này. Chính xác thì phích cắm được hình thành là gì?
Nếu bạn đổ bản phác thảo cuối cùng, thì tất cả các chi tiết liên quan đến D3.3 và D3.4 cũng như bản thân chúng không thể được cài đặt. Trên sắt hàn có vẽ lại về chủ đề này
Anjey888
Xin chào. Chủ đề này rất quan tâm. Tôi muốn lắp ráp thiết bị. Tôi đã làm một bảng sắt hàn ra khỏi ... và sau đó bị mắc kẹt. Vì có rất nhiều bất đồng giữa hội đồng quản trị và mạch. Bắt đầu so sánh bảng của bạn ... đó là một sự khác biệt lớn. Nhưng nhầm lẫn với khai thác tại Arduino.
Tôi nhờ sự giúp đỡ của những người hiểu biết.
Tác giả
Tương tự như đối với các kim loại khác. Độ sâu phát hiện phụ thuộc vào khu vực của mục tiêu. Càng nhiều, càng sâu.
Khách mời
Các giới hạn để phát hiện các đối tượng là gì? Vàng, nhôm, đồng.
Khách Alexander
Phải làm gì bây giờ, vì vẫn còn rào cản Schottky?
Tác giả
Vâng đây! Về ngay cả giá trị nhỏ nhất là ra khỏi câu hỏi! Cảm ơn đã làm rõ.
Trích dẫn: puteec_80
Và mọi người sẽ hiểu nhanh hơn và trực giác những gì tôi nói về.
Bạn có thể tiếp tục duy trì lỗi này. ((Những người biết chữ về mặt kỹ thuật sẽ bị mất một chút.
CỨU, chồng.
1. Một chướng ngại vật (một loại tường, xà ngang) đặt trên đường đi.
2. Hàng rào, hàng rào.

CẢM ƠN, ngưỡng, chồng.
1. Trong khoa học và công nghệ, ngưỡng được gọi là giá trị nhỏ nhất, mức độ biểu hiện của một cái gì đó.
Ngưỡng độ nhạy của thiết bị. | Ngưỡng nghe. | Ngưỡng đau. | Cảm biến được kích hoạt khi vượt quá ngưỡng nhiệt độ cài đặt.
cười
Tác giả
Hãy ở lại với chính chúng ta. Tôi sẽ viết "tăng rào cản thêm một đơn vị" và "độ nhạy của máy thu là 5 μV." Và bạn viết ra Tăng tăng ngưỡng hoạt động của một đơn vị ngưỡng và độ nhạy của máy thu .. Hơn nữa, mọi người sẽ hiểu nhanh hơn và trực giác những gì tôi nói về.
Và tôi giải thích trong ví dụ này. Không có ngưỡng nói đúng, bởi vì không có thang đo tham chiếu rõ ràng. Có một số loại dải nổi bị cắt ra từ tín hiệu nổi. Vì vậy, dường như đối với tôi, định nghĩa về một rào cản phù hợp hơn nhiều đối với dải nổi nổi này, hơn là một ngưỡng.
Nói chung là vô nghĩa và ngu ngốc. Bạn có câu hỏi nào không?
Trích dẫn: puteec_80
Ngưỡng dưới và trên của họ là gì?
Có thể nghĩa của các từ được dịch không khớp hoặc hơi không khớp. Nhưng họ mô tả hoàn hảo quá trình và dần dần đi vào tiếng lóng.
Chính xác thì ngưỡng là gì. Ngưỡng phản hồi là trong trường hợp của bạn. Vui lòng giải thích cách rào cản của người Viking mô tả quá trình.
Đối với việc tham gia tiếng lóng - bây giờ có rất nhiều loại hiểu lầm ở đó. ((
Tác giả
Trong trường hợp này, tôi vẫn có xu hướng sử dụng từ "rào cản", bởi vì đó là rào cản được thiết lập trong văn bản của chương trình, chỉ cần không rơi vào phạm vi của nó, tín hiệu được vi điều khiển cảm nhận là hữu ích. Và nó có rào cản vì Nó có hai giá trị - giới hạn trên và dưới của run-in i.e. hoạt động xảy ra ở trên "trên" và dưới biên "dưới" của rào cản trên thang đo ADC. Tuy nhiên, bạn biết rõ hơn. Ngưỡng dưới và trên của họ là gì?
Có thể nghĩa của các từ được dịch không khớp hoặc hơi không khớp. Nhưng họ mô tả hoàn hảo quá trình và dần dần đi vào tiếng lóng.
Nhân tiện. Sự nhạy cảm và rào cản là những thứ hoàn toàn khác nhau.
VângHọ giao nhau. Nhưng không còn nữa.
Trích dẫn: puteec_80
Trong MD nước ngoài, menu nói "Barier".

Tôi có thể làm bạn ngạc nhiên, nhưng nhiều từ tiếng Anh trông giống với từ của chúng ta có một nghĩa khác, đôi khi gần gũi, đôi khi không. Tìm kiếm các từ "bạn bè dịch giả sai."
Bây giờ về cơ bản. Trong tiếng Nga kỹ thuật tài liệu không đơn giản là không có cụm từ như vậy rào cản của độ nhạy cảm - và đó là nó! Có một ngưỡng độ nhạy cảm của người dùng, trong một số trường hợp, người ta có thể nói giới hạn về độ nhạy cảm của người dùng, nhưng không phải là một rào cản về độ nhạy cảm. Có lẽ trong một số nhánh kiến ​​thức khác, nó được sử dụng, nhưng không phải trong điện tử.
Tác giả
Chà, điều đó có nghĩa là tất cả các kỹ sư nước ngoài đang nhảy qua một cây gậy trên đường. Ở MD nước ngoài, thực đơn ghi "Barier". Đồng chí Ivan, bạn đang rơi vào mắt tôi với những trò đùa nhỏ nhặt như vậy! Ý kiến ​​của bạn về công đức ở đâu? Sau đó bạn phải vỗ tay bằng phẳng trên trán? Bạn thường làm hư tôi trừng phạt
Sự khác biệt là rất đáng kể: ngưỡng là một thuật ngữ kỹ thuật, rào cản là một "cây gậy trên đường".
Tác giả
Có lẽ. Nhưng tôi không thấy sự khác biệt.
Có lẽ không phải là một "rào cản", mà là một ngưỡng? ;)
Tác giả
Sơ đồ không hiển thị các nút điều chỉnh rào cản. Chúng được kết nối với chân 7 và 8 của Arduino. Mỗi chiếc được kéo lên với điện trở 10k đến điểm cộng, đóng lại khi bạn nhấn khối lượng.
Tác giả
void loop () {
nút intState1 = CAO; // Trạng thái của nút là một
nút intState2 = CAO; // Trạng thái hai nút

int pot = analogRead (A4); // bộ lọc để thay đổi tín hiệu nhanh
dấu = ký * (1-K) + nồi * K;

noll = noll * (1-L) + dấu * L; // bộ lọc tín hiệu dài hạn
// Vôn kế được xây dựng ở đầu vào A3
điện áp phao = bản đồ (analogRead (A3), 0,1023,0,1500) / 100,0;

if (dấu> = noll + i) {Countleds = map (dấu, noll + i, 1023, 9, 14);
// nếu kết quả nhận được nằm ở đoạn thứ 9-15 của thang đo
âm (6, đếm * 100);}
if (dấu <= noll - i) {Countleds = map (dấu, 0, noll - i, 0, 7);
// nếu kết quả kết quả là phân đoạn 0-7 của thang đo
âm (6, đếm * 50); }
if (dấu = noll - (i-1)) {Countleds = 7;
không có (6); } // islet of ZERO ảo (7 đoạn)
if (dấu> noll && dấu <= noll + (i-1)) {Countleds = 8;
không có (6); } // đảo quy mô ZERO ảo (8 đoạn)


{lcd.setCoder (đếm, 0); // đặt con trỏ vào cột đếm, dòng 0
lcd.print ("\ xff"); // biểu tượng điền
lcd.setCoder (0, 1); // di chuyển đến 2 hàng, cột-0
lcd.print (char (1)); // Dấu hiệu biểu tượng pin
lcd.setCoder (1, 1); // di chuyển đến chỉ thị điện áp
LCD.print (điện áp); // điện áp
lcd.setCoder (7, 0); // cột thứ 8 hàng thứ 1
if (ký hiệu lcd.setCoder (8, 0); // cột thứ 9 hàng thứ 1
if (dấu> noll) {lcd.print ("}");} // in
lcd.setCoder (7, 1);
lcd.print ("B =");
lcd.setCoder (9, 1); // 11 cột thứ 2
LCD.print (i); // rào cản
lcd.setCoder (13, 1); // cột thứ 13 hàng thứ 2
LCD.print (dấu hiệu); // in giá trị trung bình của giá trị ADC
trì hoãn (10); // chờ

buttonState1 = digitalRead (button1); // Đọc nút 1 Trạng thái
buttonState2 = digitalRead (button2); // Đọc nút 2 trạng thái
if (buttonState1 == THẤP) {i = i + 1; trì hoãn (50);}
// Khi nhấn nút, rào cản tăng thêm 1. Trì hoãn 50
if (buttonState2 == THẤP) {i = i - 1; trì hoãn (50);}
// Khi nhấn nút, rào cản giảm đi 1. Trì hoãn 50
if (i <1) {i = 1;} // Ranh giới dưới của hàng rào
if (i> 38) {i = 38;} // Ranh giới trên của hàng rào

LCD.clear ();
}
}
Tác giả
Bản phác thảo mới. Thuật toán phát hiện tín hiệu hữu ích đã được thay đổi. Sơ đồ được đơn giản hóa, không có phần tử D3.4 và D3.3 với tất cả các ràng buộc của chúng. Nếu bạn có dấu hiệu của riêng bạn, thì tất cả các chi tiết này không thể được cài đặt. Nhạy cảm hơn. Không có dương tính giả.
Phác thảo:

// Đầu vào tương tự A3 cho vôn kế. Có thể cài đặt bằng chiết áp R32.
// Đầu vào tương tự A4 cho tín hiệu. Đặt với tín hiệu tối thiểu trên D3.2
// điện trở R40 cho số đọc ADC khoảng 510.
// 6- kết luận của zook
// 9 - tần số đầu ra 31200 Hz
#inc loại
LCD tinh thể lỏng (12, 11, 5, 4, 3, 2);

byte z1 [8] = {// biểu tượng pin
0b01100, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110};
int đếm được = 0; // biến để lưu trữ giá trị mức tỷ lệ

điện áp phao = 0,0; // điện áp tính toán
const int nút1 = 7; // nút cộng rào cản
const int nút2 = 8; // nút rào cản
int i = 5; // rào cản
const nổi K = 0,1; // bộ lọc theo dõi thay đổi nhanh (hệ số. càng nhỏ càng mạnh)
const nổi L = 0,07; // theo dõi bộ lọc thay đổi trong một thời gian dài
dấu phao = 0; // bộ lọc
phao câu = 0;

void setup () {
LCD.begin (16, 2); // hiển thị khởi tạo
lcd.createChar (1, z1);
pinMode (9, ĐẦU RA);
pinMode (6, ĐẦU RA);
TCCR1A = TCCR1A & 0xe0 | 2;
TCCR1B = TCCR1B & 0xe0 | 0x09;
analogWrite (9, 126); // tại chân 10 PWM = 50% f = 31200Hz
// trên thực tế, đối với PWM = 50%, bạn cần đặt ít nhất 220 lần đổ đầy, theo máy hiện sóng
// bộ đôi không thể xử lý nó. Điều này không quan trọng.
}
Tác giả
Những người sẽ xem bản phác thảo. Các dấu hiệu> = và <= đã được thay thế bằng các kết hợp lạ & gt và & lt. Tại sao tôi không biết. Khi gỡ lỗi là bình thường.

Chúng tôi khuyên bạn nên đọc:

Đưa nó cho điện thoại thông minh ...