该实验项目展示了如何构建基于 AVR 微控制器的简单 PI(脉冲感应)金属探测器。我的目标是使电路尽可能简单,并且只使用流行/便宜的电子零件。该设备已通过非常小的线圈(55mm 直径,约 30 匝 0.5 DNE)和仅 3.0V 电源进行了测试。这是我的第一个 PI 金属探测器设计,我对结果非常满意!该原型能够检测到墙上的小硬币(6 厘米距离)和电线。代码位于 GitHub 上,此处。
提出的金属探测器使用 PI 方法在与电容器并联连接的探测线圈中产生电压尖峰。接下来,ATtiny13 使用模拟比较器测量谐振电路到零的衰减时间。当金属物体靠近环路时,它会减少脉冲衰减到零所需的时间。测量共振时间宽度的变化以发出金属目标存在的信号。
请注意,典型的 PI 检测器设计避免了谐振电路,并且测量的因数略有不同!
此代码是用 C 语言编写的,可以使用 avr-gcc 进行编译。有关如何编译该项目的所有信息都 在这里。
/**
* Copyright (c) 2019, Łukasz Marcin Podkalicki @gmail.com> * ATtiny13/037
* Example of simple PI (Pulse Induction) metal detector.
*/
#include
#include
#include
#define COIL_PIN PB2
#define BUZZER_PIN PB3
#define LED_PIN PB4
#define PULSE_WIDTH (32) // microseconds
#define CALIBRATION_ATTEMPTS_MAX (128)
#define MEASUREMENT_ATTEMPTS_MAX (2048)
#define SIGNAL_ON() (PORTB |= _BV(LED_PIN)|_BV(BUZZER_PIN))
#define SIGNAL_OFF() (PORTB &= ~(_BV(LED_PIN)|_BV(BUZZER_PIN)))
static uint16_t
measure_decay(void)
{
uint16_t i, counter = 0, decay = 0;
PORTB |= _BV(COIL_PIN); // pulse on
_delay_us(PULSE_WIDTH); // pulse delay
PORTB &= ~_BV(COIL_PIN); // pulse off
for (i = 0; i < MEASUREMENT_ATTEMPTS_MAX; ++i) {
if (ACSR & _BV(ACO)) {
decay = counter;
}
counter++;
}
return decay;
}
static uint16_t
calibration(void)
{
uint8_t i;
uint16_t tmp, decay = 0;
/* calibration process */
for (i = 0; i < CALIBRATION_ATTEMPTS_MAX; ++i) {
tmp = measure_decay();
if (tmp > decay) {
decay = tmp;
}
}
/* signalize end of calibration */
for (i = 0; i < 3; ++i) {
for (tmp = 0; tmp < 64; ++tmp) {
SIGNAL_ON();
_delay_ms(0.3);
SIGNAL_OFF();
_delay_ms(0.3);
}
_delay_ms(64);
}
return decay;
}
int
main(void)
{
uint16_t decay_cur, decay_max;
/* setup */
DDRB = _BV(COIL_PIN)|_BV(LED_PIN)|_BV(BUZZER_PIN); // set COIL, LED and BUZZER pins as output
ACSR = 0; // clear register
decay_max = calibration() - 1;
_delay_ms(500);
/* loop */
while (1) {
decay_cur = measure_decay();
if (decay_cur < decay_max) {
SIGNAL_ON();
_delay_us(100);
}
SIGNAL_OFF();
}
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !