산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

포켓 금속 탐지기

구성품 및 소모품

SparkFun Arduino Pro Mini 328 - 5V/16MHz
× 1

필요한 도구 및 기계

3D 프린터(일반)

이 프로젝트 정보

소개:포켓 금속 탐지기 - Arduino

이 멋진 소형 금속 탐지기는 나무의 작은 못과 압정을 식별할 수 있을 만큼 민감하고 불편한 공간에 들어갈 만큼 충분히 작아 휴대하고 금속 위치를 찾는 데 편리하게 사용할 수 있습니다.

이 장치에는 4개의 독립적인 검색 코일과 컬러 LED 표시기가 있어 대상을 정확하게 식별할 수 있는 동시에 더 넓은 검색 영역을 빠르게 커버할 수 있습니다.

이 깔끔한 소형 장치는 버튼 하나로 자체 보정되며 USB 포트를 통해 충전할 수 있으며 컬러 LED, 소리 및 진동을 사용하여 목표 강도를 나타냅니다.

튜토리얼에는 직접 구축하는 데 필요한 모든 디자인, 테스트, 코드 및 3D 파일이 포함되어 있습니다. 여러분도 저처럼 이것을 만들고 사용하는 것을 즐기시기 바랍니다!!

1단계:재료 목록 및 작동 방식

1. 어떻게 작동

Pocket Metal Locator는 Arduino Pro Mini로 구동되는 4개의 독립적인 펄스 유도 검색 코일을 사용합니다. 각 검색 코일은 펄스가 TX 코일로 유도되어 RX 코일 주위에 전자기장을 생성하는 별도의 TX 및 RX 코일로 구성됩니다. 변화하는 필드는 신호의 펄스 폭이 Arduino에 의해 읽기 전에 감지되고 증폭되는 RX 코일에 전압을 유도합니다.

Arduino 코드의 평활화 알고리즘은 유효한 펄스에서 노이즈를 제거하여 매우 안정적으로 만드는 데 사용됩니다.

코드의 보정 알고리즘은 시작의 짧은 기간 동안 판독값의 평균을 취하고 신호를 비교할 일련의 임계값을 설정합니다.

금속 물체가 전자기장의 범위 내에 들어오면 필드가 중단되고 에너지의 일부가 RX 코일에서 대상 물체에 형성되는 "와류 전류"로 우회됩니다. 대상 물체의 이러한 기생 효과로 인해 RX 코일에서 감지된 펄스 폭이 감소합니다. 기본적으로 우리는 대상 물체에 대한 전력 손실을 측정합니다.

RX 코일에서 감지된 펄스 폭이 임계값 아래로 떨어지면 LED가 켜지고 부저가 울리고 햅틱 피드백 모터가 트리거됩니다(목표 신호의 미리 결정된 크기에 따라 다름).

이를 위한 회로는 지난 1년 동안 매우 안정적이고 신뢰할 수 있는 성능의 검출기로 발전했습니다. 코일 구성과 방향은 안정성과 깊이 감지를 극대화하도록 의도적으로 설계되었습니다.

2. 자료 목록

<울>
  • 3.7v 350mAh LiPo 배터리 크기:38mm x 20mm x 7.5mm
  • TP4056 USB LiPo 배터리 충전기데이터 시트
  • LiPo 배터리 충전 전류를 300mA 미만으로 제한하는 4.7K 저항
  • 아두이노 프로 미니
  • Mini Pro 프로그래밍을 위한 직렬 모듈에 대한 FTDI USB
  • LM339 4차 차동 비교기 집적 회로
  • Vero Board - 20x9 구멍과 34x9 크기로 자른 2개(정확한 방향은 사진 참조)
  • BC548 NPN 트랜지스터 x 4
  • 2N7000 MOSFET 스위치 x 5
  • 피에조 부저
  • 햅틱 피드백을 위한 코인 진동 모터
  • WS2812 RGB LED 모듈 x 4
  • 1k 저항 x 4
  • 10k 저항 x 4
  • 47옴 저항 x 4
  • 2.2K 저항 x 4
  • 150pf 세라믹 커패시터 x 8
  • 0.18uF 폴리에스테르 커패시터 x 4
  • 0.3mm 에나멜 구리 와이어 롤(일반적으로 롤 형태로 약 25g 무게)
  • PCB 장착 푸시 버튼 스위치
  • 뜨거운 글루건
  • 10mm 드릴 비트
  • 휴대용 드릴
  • 16개의 개별 전선에 라벨을 붙일 수 있는 라벨 건 또는 접착 테이프
  • 3D 프린터 사용
  • 3. 비교 연산

    LM339의 동작에 대해 궁금한 점이 많았는데 좀 더 명확한 설명을 드리고자 생각했습니다.

    LM339는 전압 비교기로 단독으로 작동하여 양극 핀과 음극 핀 사이의 차동 전압을 비교하고 입력 차동 극성에 따라 로직 로우 또는 하이 임피던스(풀업이 있는 로직 하이)를 출력합니다.

    이 회로에서 비교기의 양극 입력은 Vcc 라인에 연결되고 Vcc에 대한 풀업 저항은 비교기 출력에 적용됩니다. 이 구성에서 실제로 비교기의 출력 전압은 음극 입력의 입력 전압이 3.5v를 초과할 때까지 높게 유지됩니다.

    작동은 "입력 전압 범위"가 0V ~ Vsup-1.5V 사이임을 설명하는 LM339 데이터 시트에서 설명할 수 있습니다.

    IN– 및 IN+가 모두 공통 모드 범위 내에 있을 때 IN–가 IN+ 및 오프셋 전압보다 낮으면 출력은 고임피던스이고 출력 트랜지스터는 전도되지 않습니다.

    IN–가 공통 모드보다 높고 IN+가 공통 모드 내에 있으면 출력은 낮고 출력 트랜지스터는 전류를 싱킹합니다. 아래의 데이터 시트 및 설명 링크 http://www.ti.com/lit/ds/symlink/lm2901.pdf

    lm2901.pdf

    2단계:케이스 인쇄

    3D 프린팅 케이스는 5개의 개별 프린트를 사용하여 완성되었습니다. 치수 및 3D 파일은 Thingiverse에서 찾을 수 있습니다. 디자인은 검색 코일이 검색되는 영역에 가깝게 있도록 하는 동시에 장치를 쉽게 잡을 수 있도록 하는 데 중점을 두었습니다.

    조심스럽게 케이스를 인쇄하고 여분의 플라스틱을 제거하십시오. 최종 연결 및 테스트 전에 전자 부품을 케이스에 정렬할 수 있도록 지금 이 단계를 수행하는 것이 중요합니다.

    3단계:검색 코일 제작 및 장착

    인쇄된 코일 포머를 가지고 각각에 구리선을 25회 감습니다. 본체에 연결할 여분의 구리선을 20cm 정도 남겨두십시오.

    포머에 인쇄된 구멍을 사용하여 각 포머에 대해 일관된 바람과 코일 방향을 가능하게 합니다. 이렇게 하면서 전자를 거꾸로 뒤집고 전자를 베이스 유닛에 점차적으로 붙입니다.

    제공된 사진 어셈블리를 따르십시오. 결과적으로 코일 어셈블리에 8개의 코일이 장착되고 모든 와이어가 일관된 방향으로 배치되고 상부 인클로저의 메인 보드 장치에 연결될 만큼 충분히 길어집니다.

    각 코일에 대한 구멍이 있는 두 개의 와이어 가이드 블록을 사용하여 각 코일을 추적합니다.

    메인보드에 연결하기 쉽게 각각의 특정 코일을 추적할 수 있도록 와이어 블록의 상단을 따라 내부 코일용 와이어를, 하단부를 따라 외부 코일을 배치했습니다.

    4단계:회로 구축

    이 장치에는 드라이버 보드, 메인 보드, LED 어셈블리 및 충전식 전원 공급 장치의 4가지 핵심 회로가 있어 독립적으로 구축할 수 있습니다. 이 단계에서는 드라이버 보드와 메인 보드를 빌드합니다.

    1. 드라이버 보드

    공예 칼을 사용하여 구멍 22x11을 따라 Vero Board 조각을 자르면 포함된 그림에 따라 20x9 구멍이 있는 Vero Board 조각이 됩니다. 보드의 양쪽에 있는 구멍을 가로질러 여러 번 점수를 매긴 다음 남은 보드를 부드럽게 떼어내는 것이 가장 좋습니다. 보드가 양쪽에 충분한 여유 공간을 두고 인클로저 바닥에 안착하는지 확인합니다.

    사진과 10mm 드릴 비트를 사용하여 Vero Board 바닥에 표시된 압정을 손으로 조심스럽게 부수십시오. 회로도 및 구성 요소의 사진 레이아웃을 따라 회로 기판을 조립하고 단락된 트랙이 없는지 확인하십시오.

    나중에 테스트할 수 있도록 이 보드를 따로 보관하십시오.

    2. 메인 보드

    공예 칼을 사용하여 구멍 36x11을 따라 베로 보드 조각을 자르면 포함된 그림에 따라 34x9 구멍이 있는 베로 보드 조각이 됩니다. 보드의 양쪽에 있는 구멍을 가로질러 여러 번 점수를 매긴 다음 남은 보드를 부드럽게 떼어내는 것이 가장 좋습니다. 보드가 양쪽에 충분한 여유 공간을 두고 인클로저 바닥에 안착하는지 확인합니다.

    사진과 10mm 드릴 비트를 사용하여 Vero Board 바닥에 표시된 압정을 손으로 조심스럽게 꺾습니다.

    회로도와 Arduino 및 LM339 IC 및 기타 구성 요소의 사진 레이아웃을 따라 회로 기판을 조립하고 단락된 트랙이 없는지 확인하십시오.

    나중에 테스트할 수 있도록 이 보드를 따로 보관하십시오.

    5단계:LED 표시기 추가

    나는 내장 IC가 있는 WS2182 LED를 사용해 3개의 개별 와이어를 사용하여 Arduino에서 해결할 수 있지만 LED에 명령을 보내면 다양한 색상과 밝기 색상을 생성할 수 있습니다. 이것은 테스트 섹션에서 다루는 Arduino IDE에 로드된 특수 라이브러리를 통해 수행됩니다.

    1. 코일 인클로저 뚜껑에 LED 장착

    VCC 및 GND 연결이 정렬되고 구멍 중앙에 놓이도록 4개의 LED를 올바른 방향으로 조심스럽게 배치합니다.

    핫 글루를 사용하여 LED를 제자리에 고정합니다.

    2. LED 배선

    LED 접점을 가로질러 25cm 길이의 단일 코어 연결 와이어 3개를 조심스럽게 벗기고 배치합니다.

    이들을 제자리에 납땜하고 중앙 데이터 와이어가 사진과 같이 IN 및 OUT 접점에 연결되어 있는지 확인합니다.

    3. 케이스 정렬 확인

    케이스 덮개가 코일 인클로저와 같은 높이에 있는지 확인한 다음 핫 글루를 사용하여 와이어를 덮개 베이스 끝의 제자리에 고정합니다.

    나중에 테스트할 수 있도록 따로 보관해 두십시오.

    6단계:장치 조립 및 테스트

    1. 조립 준비

    조립하기 전에 문제를 더 쉽게 해결할 수 있도록 각 보드를 점진적으로 테스트합니다.

    Arduino Pro Mini를 PC에서 프로그래밍하려면 USB 직렬 보드가 필요합니다. 이렇게 하면 직렬 인터페이스가 없기 때문에 보드 크기를 줄일 수 있습니다. 이러한 보드를 프로그래밍하려면 부품 목록에 설명된 대로 보드를 구입하는 데 투자해야 합니다.

    Arduino 코드를 로드하기 전에 WS2182 LED를 구동하기 위한 라이브러리로 "FastLED.h" 라이브러리를 추가해야 합니다. 문제가 있는 경우 문제 해결을 위해 일련의 오실로스코프 추적이 제공되었습니다.

    각 채널의 펄스 폭 출력과 임계값을 보여주는 그래프 플롯 기능을 사용하는 IDE 직렬 데이터 출력의 스크린샷도 있습니다. 이는 각 채널이 유사한 수준의 감도로 작동하는지 확인할 수 있으므로 테스트 중에 유용합니다.

    두 개의 코드 사본을 포함했습니다. 하나는 문제 해결을 위한 테스트 직렬 데이터 스트리밍이 있습니다.

    참고: 조립 중 실수로 단락되면 장치가 과열되거나 화재가 발생할 수 있으므로 마지막 단계까지 LiPo 배터리 장치를 연결하지 마십시오.

    2. 메인 보드 테스트

    메인 보드를 무엇이든 연결하기 전에 Arduino 직렬 케이블을 연결하고 코드가 로드되는지 확인하는 것이 좋습니다.

    이것은 단순히 Arduino가 물리적으로 올바르게 연결되어 있고 IDE와 라이브러리가 로드되었는지 테스트합니다. 오류 없이 로드되어야 하고 구성 요소에서 연기가 나오지 않아야 하는 IDE를 통해 코드를 로드합니다!!

    3. 드라이버 보드 연결

    회로도에 따라 드라이버 보드를 메인 보드에 연결하고 장치를 케이스에 물리적으로 배치하여 항목이 인클로저에 맞도록 합니다. 이것은 시행착오의 경우이며 끈기가 필요합니다.

    오류 없이 로드되어야 하고 구성 요소에서 연기가 나오지 않아야 하는 IDE를 통해 코드를 로드합니다!!

    4. 코일 연결 회로도에 따라 코일을 메인 보드에 연결하고 장치를 케이스에 물리적으로 배치하여 항목이 적절하게 맞는지 확인하십시오. 코일이 회로도에 따라 드라이버 보드 및 메인 보드 입력과 정렬되도록 주의하십시오.

    테스트 코드가 로드되면 직렬 포트는 5000~7000uS 사이의 수신 코일에 펄스 폭을 표시합니다. IDE 그래프 플로터를 사용하여 볼 수도 있습니다.

    이렇게 하면 각 채널의 문제를 해결할 수 있고 대상이 검색 코일에 가까워짐에 따라 펄스 폭을 줄여야 하는 검색 코일 근처에서 동전을 움직이는 효과를 볼 수 있습니다.

    오실로스코프가 있는 경우 회로의 다양한 단계에서 파형을 확인하여 문제를 진단할 수도 있습니다.

    모든 채널이 예상대로 작동하면 케이스 인클로저가 올바르게 조립되고 닫힐 수 있도록 전선을 배치합니다.

    5. LED 연결

    코일 인클로저 LED에서 세 개의 와이어를 조심스럽게 가져와 메인 보드에 연결합니다. 코드를 로드하고 LED가 올바르게 작동하는지 확인하십시오. 접착제를 사용하여 코일 인클로저 덮개를 제자리에 고정합니다.

    Pocket_Metal_Locator_V11__TEST_CODE.zip Pocket_Metal_Locator_V11.zip

    7단계:충전식 배터리 연결

    참고:

    1. 마지막 단계까지 LiPo 배터리 장치를 연결하지 마십시오. 조립 중 실수로 단락되면 장치가 과열되거나 화재가 발생할 수 있습니다.

    2. 배터리와 충전기를 다룰 때 배터리 연결이 단락되지 않도록 주의하십시오.

    3. LiPo 배터리는 다른 충전식과 달리 과전류 충전이 위험할 수 있으므로 충전 회로를 올바르게 구성해야 합니다.

    4. 전원 버튼을 누른 상태에서 Arduino 직렬 케이블을 장치에 연결하지 마십시오. 그렇지 않으면 배터리가 손상될 수 있습니다.

    1. 충전기 전류 제한 수정

    Pocket Metal Locator는 Micro USB 전화 충전기를 사용하여 충전할 수 있는 LiPo 배터리를 사용합니다. TP4056 USB LiPo 배터리 충전기 보드는 먼저 4.7K 저항으로 수정되어 충전 전류를 300mA 미만으로 제한합니다. 이 작업을 수행하는 방법에 대한 지침은 여기에서 찾을 수 있습니다.

    TP4056.pdf

    이를 위해서는 기존 표면 실장 저항기를 제거하고 사진과 같이 저항기로 교체해야 합니다. 제자리에 배치되면 뜨거운 글루건으로 저항기의 계획되지 않은 움직임을 보호합니다.

    메인 보드에 연결하기 전에 휴대폰 충전기를 Micro USB 포트에 연결하여 충전기가 올바르게 작동하는지 테스트하십시오. 제대로 작동하면 빨간색 충전 표시등이 켜집니다.

    2. 푸시 버튼 전원 스위치 설치

    푸시 버튼이 인클로저 덮개의 중앙을 통해 돌출되도록 올바른 위치에 장착되었는지 확인한 다음 푸시 버튼을 제자리에 납땜하십시오. 회로도에 따라 푸시 버튼 스위치와 충전기 출력 및 Arduino의 VCC 라인 사이에 와이어를 설치합니다.

    올바르게 설치되면 스위치를 누르면 장치가 활성화됩니다.

    핫 글루를 사용하여 배터리를 제자리에 고정하고 충전할 수 있도록 Micro USB 소켓이 케이스 덮개의 구멍에 맞춰졌는지 확인합니다.

    8단계:최종 테스트 및 운영

    1. 물리적 조립

    마지막 단계는 케이스가 올바르게 닫힐 수 있도록 와이어를 조심스럽게 재배열하는 것입니다. 핫 글루를 사용하여 메인보드를 덮개에 고정한 다음 덮개를 제자리에 닫습니다.

    2. 장치 작동

    기기는 전원 버튼을 길게 누른 후 캘리브레이션하여 작동합니다. 장치를 사용할 준비가 되면 모든 LED가 깜박입니다. 검색하는 동안 푸시 버튼을 누른 상태로 유지하십시오. LED는 대상 물체의 강도에 따라 Blue-Green, Red, Purple에서 변경됩니다. LED가 보라색으로 바뀌면 햅틱 피드백이 발생합니다.

    실제 응용 프로그램에 사용할 준비가 되지 않았습니다!!

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • Pocket_Metal_Locator_V11.ino
  • Pocket_Metal_Locator_V11.inoC/C++
    이 멋진 소형 금속 탐지기는 나무에 있는 작은 못과 압정을 식별할 수 있을 만큼 민감하고 어색한 공간에 들어갈 만큼 충분히 작아 휴대하고 금속 위치를 찾는 데 편리하게 사용할 수 있습니다.

    이 장치에는 4개의 독립적인 검색 코일과 컬러 LED 표시기가 있어 대상을 정확하게 식별할 수 있으면서 더 넓은 검색 영역을 빠르게 커버할 수 있습니다.

    이 깔끔한 소형 장치는 버튼 하나만으로 자체 교정할 수 있으며 USB 포트를 통해 충전할 수 있으며 컬러 LED, 소리 및 진동을 사용하여 목표 강도를 나타냅니다.

    Instructable에는 직접 구축하는 데 필요한 모든 디자인, 테스트, 코드 및 3D 파일이 포함되어 있습니다. 내가 가진 만큼 이것을 만들고 사용하는 것을 즐기시기 바랍니다!!
    /* Pocket Metal Locator - Arduino Pro Mini 2018년 4월 TechKiwiGradgetsVersion 11 - 첫 번째 지침 릴리스*/// WS2182 LED 드라이버 라이브러리 설정#include "FastLED.h "// 스트립에 몇 개의 led가 있습니까?#define NUM_LEDS 4 // 참고:첫 번째 LED는 주소 0#define DATA_PIN 11 // 참고:D11은 LED 체인을 제어하는 ​​데 사용됩니다.// led 배열을 정의CRGB leds[NUM_LEDS];/ / LPFconst에 대한 평활화 변수 float alpha =0.85; float smoothedvalue1 =1000;float smoothedvalue2 =1000;float smoothedvalue3 =1000;float smoothedvalue4 =1000;int 임계값 =100; // pulseIn 함수의 최소 판독값은 noisefloat ledthreshold1 =0.93 이상의 샘플링을 보장합니다. // LED를 설정하기 전 기준선 아래의 백분율 Purplefloat ledthreshold2 =0.96; // LED를 설정하기 전 기준선 아래의 백분율 Redfloat ledthreshold3 =0.99; // LED를 설정하기 전 기준선 아래의 백분율 Greenfloat ledthreshold4 =0.998; // LED를 설정하기 전 기준선 미만의 백분율 파란색// 캘리브레이션 변수 부울 샘플 =false; // 참이면 임계값을 호출하지 않습니다.sint calcounter =0; // 샘플을 채취한 횟수를 계산하는 데 사용int scount =200; // 전원을 켠 후 한 번만 보정하기 전의 읽기 횟수 int numsamples =20; // 평균을 내기 전에 취한 샘플 수int t1 =100; // 캘리브레이션 동안 LED가 켜지는 시간(마이크로초)long calav1 =0; // 10개 샘플의 평균을 계산하는 데 사용long calav2 =0; // 10개 샘플의 평균을 계산하는 데 사용long calav3 =0; // 10개 샘플의 평균을 계산하는 데 사용long calav4 =0; // 10개 샘플의 평균을 계산하는 데 사용int div1 =0;// 샘플 수에 대한 제수 카운터int div2 =0;int div3 =0;int div4 =0;// A,B,C,Dint divA로 표시되는 4개의 채널 =0;긴 tempA =0;긴 pcounterA =0; // 필터링되지 않은 채널 1의 펄스 폭int divB =0;long tempB =0;long pcounterB =0; // 필터링되지 않은 채널 2의 펄스 폭int divC =0;long tempC =0;long pcounterC =0; // 필터링되지 않은 채널 1의 펄스 폭int divD =0;long tempD =0;long pcounterD =0; // 필터링되지 않은 채널 1의 펄스 폭 int pwindow =7500; // 펄스폭의 최대 타임아웃 값// ***************************************** ***********int dly1 =4; // TXR 핀이 하이 상태로 유지되는 시간(typicLLY 4uS)int dly2 =1; // 펄스 지속 시간을 읽기 시작하기 전에 TXR 핀이 LOW가 된 후 지연 - 일반적으로 1uS int dly3 =500; // 다음 주기를 시작하기 전에 펄스폭을 샘플링한 후 지연 시간(마이크로초)// ************************************ ****************int threshdiff =15; // 평균에 추가하여 LED가 켜지는 특정 임계값이 됩니다. (V21이 25에서 20으로 변경됨)long pulseav =0; // 보정을 위한 출력 값 저장// 진동 모터 부울 햅틱 =false; // 일정 시간 동안 진동 모터를 켜는 데 사용되는 플래그 int vduration =1; // 진동 모터가 활성화한 프로그램 사이클 수 int vcounter =vduration; // v 사이클 카운터 void setup() {// 진동 모터/햅틱 피드백 pinMode(12,OUTPUT); // Arduino의 진동 모터 드라이버 - D10 digitalWrite(12,LOW); // 모터 끄기 Serial.begin(115200); // 테스트 데이터 출력을 위한 직렬 인터페이스 설정// WS2182 LED 드라이버 설정 LEDS.addLeds(leds,NUM_LEDS); // RGB의 경우 기본값이지만 LED 제조업체에 따라 다를 수 있음 LEDS.setBrightness(5); //여기에 LED 밝기를 설정합니다. // 5v 전력 소비에서 1A로 제한합니다. FastLED.setMaxPowerInVoltsAndMilliamps(5,100); FastLED.setDither(0); // 깜박임을 제거하기 위해 자동 디더링 기능을 끕니다.// Arduino Mini Pro 논리적 핀 할당// 논리적 핀 이름 2,3,4,5,6,7,8,9는 보드에 인쇄된 D2-D9 핀 이름과 같습니다. // 논리적 핀 이름 10,11,12,13,14,15,16,17 보드에 인쇄된 D10-D13, A0-A3 핀 이름과 동일// Piezo Buzzer pinMode(10,OUTPUT); // Arduino의 Piezo Buzzer 드라이버 - D10// PinMode(2,OUTPUT) 전송; // Arduino의 펄스 출력 - D2 pinMode(4,OUTPUT); // Arduino의 펄스 출력 - D4 pinMode(6,OUTPUT); // Arduino의 펄스 출력 - D6 pinMode(8,OUTPUT); // Arduino의 펄스 출력 - D8 // 채널 A pinMode(3,INPUT); // LM339의 핀 2에서 Arduino로 신호 입력 - D3// 채널 B pinMode(5,INPUT); // LM339의 핀 1에서 Arduino로 신호 입력 - D5// 채널 C pinMode(7,INPUT); // LM339의 14번 핀에서 Arduino로 신호 입력 - D7// 채널 D pinMode(9,INPUT); // LM339의 핀 13에서 Arduino로 신호 입력 - D9 }void loop(){// 펄스 및 코일 읽기 -------------------------- --------------------// 채널 1(지팡이 포인트)digitalWrite(2,HIGH); // TX 핀을 highdelayMicroseconds(dly1)로 설정합니다. // 출력에서 ​​로우로 설정되기 전 지연 pindigitalWrite(2,LOW); // TX 핀을 lowdelayMicroseconds(dly2)로 설정; // 펄스 폭을 샘플링하기 전 지연 pcounterA =pulseIn(3,LOW,pwindow);digitalWrite(2,LOW); // TX 핀을 LOWdelayMicroseconds(dly3)로 설정합니다. // 펄스 폭 샘플링 전 지연 // 채널 1을 매끄럽게 하기 위해 신호에 저역 통과 필터 적용 if (pcounterA>=sthreshold) { smoothedvalue1 =(alpha * smoothedvalue1) + ( (1 - alpha) * pcounterA); } pcounterA =smoothedvalue1;// 채널 2digitalWrite(4,HIGH); // TX 핀을 highdelayMicroseconds(dly1)로 설정합니다. // 출력에서 ​​로우로 설정되기 전 지연 pindigitalWrite(4,LOW); // TX 핀을 lowdelayMicroseconds(dly2)로 설정; // 펄스 폭을 샘플링하기 전 지연 pcounterB =pulseIn(5,LOW,pwindow);digitalWrite(4,LOW); // TX 핀을 LOWdelayMicroseconds(dly3)로 설정합니다. // 펄스 폭 샘플링 전 지연// 채널 2를 매끄럽게 하기 위해 신호에 저역 통과 필터 적용 if (pcounterB>=sthreshold) { smoothedvalue2 =(alpha * smoothedvalue2) + ( (1 - alpha) * pcounterB); } pcounterB =smoothedvalue2;// 채널 3digitalWrite(6,HIGH); // TX 핀을 highdelayMicroseconds(dly1)로 설정합니다. // 출력에서 ​​로우로 설정되기 전 지연 pindigitalWrite(6,LOW); // TX 핀을 lowdelayMicroseconds(dly2)로 설정; // 샘플링 펄스 폭 이전 지연 pcounterC =pulseIn(7,LOW,pwindow);digitalWrite(6,LOW); // TX 핀을 LOW로 설정//delayMicroseconds(dly3); // 펄스 폭 샘플링 전 지연 // 채널 3을 매끄럽게 하기 위해 신호에 저역 통과 필터 적용 if (pcounterC>=sthreshold) { smoothedvalue3 =(alpha * smoothedvalue3) + ( (1 - alpha) * pcounterC); } pcounterC =smoothedvalue3;// 채널 4 digitalWrite(8,HIGH); // TX 핀을 highdelayMicroseconds(dly1)로 설정합니다. // 출력을 로우로 설정하기 전 지연 pindigitalWrite(8,LOW); // TX 핀을 lowdelayMicroseconds(dly2)로 설정; // 펄스 폭을 샘플링하기 전 지연 pcounterD =pulseIn(9,LOW,pwindow);digitalWrite(8,LOW); // TX 핀을 LOWdelayMicroseconds(dly3)로 설정합니다. // 펄스 폭 샘플링 전 지연// 채널 4를 매끄럽게 하기 위해 신호에 저역 통과 필터 적용 if (pcounterD>=sthreshold) { smoothedvalue4 =(alpha * smoothedvalue4) + ( (1 - alpha) * pcounterD); } pcounterD =smoothedvalue4;// 값을 인쇄한 다음 카운터를 재설정합니다./* Serial.print(pcounterA); Serial.print(" "); Serial.print(calav1); Serial.print(" "); Serial.print(pcounterB); Serial.print(" "); Serial.print(calav2); Serial.print(" "); Serial.print(pcounterC); Serial.print(" "); Serial.print(calav3); Serial.print(" "); Serial.print(pcounterD); Serial.print(" "); Serial.println(calav4);*/// 전원 공급 시 임계값 보정 // 각 코일에 대한 기준선을 설정하기 위해 일정 시간 대기 if (sample ==false){ calcounter++; } if ( calcounter> (scount-numsamples) ) { // 90을 기다린 다음 샘플을 더하여 평균 계산을 준비합니다. if (pcounterA> sthreshold) { calav1 =calav1 + pcounterA; div1++; } if (pcounterB> 임계값) { calav2 =calav2 + pcounterB; div2++; } if (pcounterC> 임계값) { calav3 =calav3 + pcounterC; div3++; } if (pcounterD> 임계값) { calav4 =calav4 + pcounterD; div4++; } } if ((calcounter> scount)&&(sample ==false)){ // 임계값 설정 calav1 =calav1/div1; calav2 =calav2/div2; calav3 =calav3/div3; calav4 =calav4/div4; // 보정 완료를 표시하는 플래시 LED // 0-3 Blue leds[3] =CRGB::Blue; FastLED.show(); 지연(t1); led[3] =CRGB::검정색; led[2] =CRGB::파란색; FastLED.show(); 지연(t1); led[2] =CRGB::검정색; led[1] =CRGB::파란색; FastLED.show(); 지연(t1); led[1] =CRGB::검정색; led[0] =CRGB::파란색; FastLED.show(); 지연(t1); led[0] =CRGB::검정; // 3-0 녹색 led[3] =CRGB::Green; FastLED.show(); 지연(t1); led[3] =CRGB::검정색; led[2] =CRGB::녹색; FastLED.show(); 지연(t1); led[2] =CRGB::검정색; led[1] =CRGB::녹색; FastLED.show(); 지연(t1); led[1] =CRGB::검정색; led[0] =CRGB::녹색; FastLED.show(); 지연(t1); led[0] =CRGB::검정; FastLED.show();// 사운드 부저 // digitalWrite(10,HIGH); // 출력 핀을 하이로 설정하여 LED를 활성화합니다. // delay(t1*2); 디지털 쓰기(10,LOW); // 출력 핀을 하이로 설정하여 LED를 활성화합니다. // 샘플 플래그를 재설정합니다. sample =true; 계산기 =0; } if (샘플 ==true) { updateLEDs(); }// 햅틱 피드백 - 임계값을 초과하면 "vduration" 주기 동안 진동 모터를 켭니다. if(haptic ==true) { // 플래그가 설정되면 모터를 켭니다. digitalWrite(12,HIGH); // 진동 모터를 활성화하기 위해 출력 핀을 하이로 설정 if (vcounter>=1){ vcounter--; // 카운터 감소 }else{ digitalWrite(12,LOW); // 진동 모터를 비활성화하려면 출력 핀을 LOW로 설정합니다. haptic =false; // 사이클 수 후 진동 플래그 재설정 vcounter =vduration; // 진동 카운터 재설정 } } }// Subroutinesvoid updateLEDs() {// 결과 표시// 보라색 - 가장 강한 목표 신호 + (삐삐 피에조 및 햅틱 피드백)// 빨간색 - 높음 +(햅틱 피드백)// 녹색 - 보통 + (햅틱 피드백)// 파란색 - 가장 약한 대상 신호// 모든 LED 끄기sleds[0] =CRGB::Black;leds[1] =CRGB::Black;leds[2] =CRGB::Black;leds[3] =CRGB::검정;digitalWrite(10,LOW); // 출력 핀을 LOW로 설정하여 Piezo SpeakerdigitalWrite(12,LOW)를 비활성화합니다. // 출력 핀을 LOW로 설정하여 Vibrating Motor// *************** 채널 1 if (pcounterA <(calav1*(ledthreshold1))) { // 강한 경우 보라색 표시 대상 led[3] =CRGB::보라색; 디지털 쓰기(10, 높음); // 출력 핀을 하이로 설정하여 피에조 스피커를 활성화합니다. haptic =true; } elseif (pcounterA <(calav1*(ledthreshold2))) { // 중간 강도 대상에 파란색 표시 leds[3] =CRGB::Red; 햅틱 =사실; } elseif (pcounterA <(calav1*(ledthreshold3))) { // 중간 강도 대상에 파란색 표시 leds[3] =CRGB::Green; 햅틱 =사실; } elseif (pcounterA <(calav1*(ledthreshold4))) { // 채널 1의 감도로 인해 임계값에 추가 백분율 포인트 추가 leds[3] =CRGB::Blue; } // 채널 2 표시 if ((pcounterB   

    맞춤형 부품 및 인클로저

    Thingiverse
    This cool little Pocket Metal Locator is sensitive enough to identify small nails and tacks in wood and compact enough to fit into awkward spaces making it convenient to carry and use for metal locating.The unit has four independent search coils and color LED indicators making it easy to cover a larger search area quickly while being able to accurately identify the target.This neat little device is self-calibrating with one button operation, rechargeable through a USB port and uses color LEDs, sound and vibration to indicate target strength.Included in the instructable is all of the designs, testing, code and 3D files required to build on your own. I hope you enjoy building and using this as much as I have!!CAD file on thingiverse.com

    회로도

    This cool little Pocket Metal Locator is sensitive enough to identify small nails and tacks in wood and compact enough to fit into awkward spaces making it convenient to carry and use for metal locating.

    The unit has four independent search coils and color LED indicators making it easy to cover a larger search area quickly while being able to accurately identify the target.

    제조공정

    1. 인명 구조기
    2. 16 대장장이 기술
    3. 금속 절단
    4. 판금 펀칭의 비용 효율성
    5. 판금 펀칭이란 무엇입니까?
    6. 천공 금속 기계 및 응용 분야
    7. 파운드리 란 무엇입니까?
    8. 금속 코일의 형성:코일 슬리팅
    9. 얇은 판금 개요
    10. 판금 교정이란 무엇입니까?