Paso 4: código
Otra vez he utilizado este blog para el código. Tuve que jugar con el código porque tuve unos problemas, pero he leido comentarios de otras personas que utilizan el código y no tenían ningún problema. Te recomiendo ajustar la sensibilidad y ver cómo funciona para usted.
Visita este blog para el código original. Abajo está el mismo código, pero con cambios menores.
Detector de metales basados en Arduino
(C) Dzl julio de 2013
http://dzlsevilgeniuslair.blogspot.dk
/ Conectar el oscilador de la bobina de búsqueda (20-200kHz) al pin 5
Conectar piezoeléctrico entre GND y el pin 13
Conectar botón NULL entre el pin 12 y GND
RECUERDE LA TECLA NULA DESPUÉS DE LA ENERGÍA PARA ARRIBA!!
#define SET(x,y) (x | =(1<
#define CLR(x,y) (x & = (~(1<
#define CHK(x,y) (x & (1 <
#define TOG(x,y) (x ^ =(1<
sin firmar largo t0 = 0; -Última vez
int t = 0; -tiempo entre enteros
unsigned char tflag = 0; -Bandera listo medición
SENSIBILIDAD del flotador = 1000.0; -Supongo que lo que
-Generar interrupción cada 1000 oscilaciones de la bobina de búsqueda
Signal(TIMER1_COMPA_vect)
{
OCR1A += 1000;
t = (micros)-t0;
T0 += t;
tflag = 1;
}
void setup()
{
Serial.Begin(9600);
pinMode(13,OUTPUT); -piezoeléctrico pin
digitalWrite(12,HIGH); -Levante los SW NULL.
-Configurar counter1 contar en el pin 5
TCCR1A = 0;
TCCR1B = 0X07;
SET(TIMSK1,OCF1A);
}
-Flotador de ABS
flotador absf(float f)
{
if(f<0.0)
volver -f;
otra cosa
volver a f;
}
int v0 = 0; -Valor NULL
Float f = 0; -El valor
unsigned int FTW = 0; -Haz clic en el tipo de generador
unsigned int PCW = 0; -Haga clic en generador fase
temporizador larga sin signo = 0; -Haga clic en temporizador
void loop()
{
if(tflag)
{
if(digitalRead(12)==LOW) //-Check SW nulo.
V0 = t; -Nuevo valor null muestra
f = f * 0.9 + absf(t-v0) * 0.1; -Ejecución de promedio más de 10 muestras
tflag = 0; -Restablecer la bandera
flotador de clf = f * sensibilidad; -Conversión de medida para la frecuencia, haga clic en
if(CLF>10000)
CLF = 10000;
FTW = clf;
Serial.println(f);
}
-Haga clic en generador de
if(Millis() > temporizador)
{
contador += 10;
PCW += FTW;
if(PCW&0x8000)
{
digitalWrite(13,HIGH);
PCW & = 0x7fff;
}
otra cosa
digitalWrite(13,LOW);
}
}
1. Copie y pegue este código en un sketch de arduino.
2. Verifique el código y subir a tu arduino.