Como aumentar una frecuencia de hz a khz?

#1
Hola,me gustaría saber cómo podría aumentar una frecuencia de 30hz a 2000hz.
Es una onda cuadrada,esque estoy usando un altavoz piezoelectrico, para que genere un pitido funcionaria a 2 khz.
Gracias.
 
Última edición:
#2
Es Hz y no hz. Las abreviaciones son "case sensitive". Por ejemplo aunque escribas en mayúsculas kilómetro es km y nunca KM.

Si aclaras la pregunta mejor, se me ocurre usar un PLL o algo así, pero me parece cazar moscas a cañonazos.

¿En que sitio va montado? ¿Que función tendría?
 
#4
Gracias por la aclaración.
Voy a explicar un poco de que va el proyecto,
He echo un detector de metales, con arduino que vi en Internet, resulta que el piezoelectrico no se escucha apenas, hice una prueba con un generador de funciones
Y para que suene el pitido tendría que entregar 2kHz.
Le tengo puesto un led, que parpadea en reposo a 5Hz y cuando detecta un metal llega más o menos a 30Hz por eso yo quería coger esa frecuencia y aumentarla hasta 2KHz. No se si se podrá es una onda cuadrada.
Saludos.
 
#5
Hola. Bueno si ya tienes todo el sistema manejado por el arduino será más sencillo usar el mismo micro para activar/desactivar el piezo. Pero antes que nada ¿que tanto dominas o comprendes el programa que se encarga de la detección del metal?. La solución se puede hacer por software.

Saludos
 
#6
La programación de arduino la descarge de la misma página.en la programación no estoy muy puesto me gustaría darle más potencia al detector pero no se como se hace la salida solo trabaja a 5 voltios si me pudieran echar un cable estaría muy agradecido.
Saludos.
 
#7
El detalle es que tu piezo no tiene driver interno y por eso necesita de ese rango de frecuencia específico para emitir el sonido. Existen otro tipo de piezos que ya traen el driver interno y emiten sonido con tan solo conectarles un voltaje entre 3-12V (depende el modelo). Quizá te sea más sencillo trabajar con uno así.

Por otro lado, se puede resolver la situación con los componentes que tienes pero si se necesita cambiarle o agragarle algo al soft. La idea es "detectar" ese cambio de frecuencia por medio del ARDUINO y en base a ello generar la frecuencia de 2KHz con la misma placa para emitir o no el zumbido.
 
#10
Se ve claramente.
En la línea 22, donde pone:

int Frec=30;

pones
int Frec=2000;

/Sarcastic

En serio, acaba de decir lo que tengas que decir.
Publica el código
El esquema
Di que va con arduino
Dilo todo en el primer post y no con cuentagotas, ¿Tenemos que adivinar en que estás pensando?
 
Última edición:
#11
Gracias.
Publicaré el código.
Esque no sabía que se podría cambiar por software, por eso pregunté si se podría cambiar la frecuencia desde fuera de arduino.
Estoy pensando en mejorarlo, si saben como cambiar la frecuencia de la bobina o el voltaje de salida que está limitado a 5 voltios.
Un saludo.
 
#12
Si que si puede cambiar por fuera pero no se justifica si por software también se puede lograr y sin agregar nada más al circuito actual. Pero seguimos "por partes". Publica el código y ya vemos.
 
#13
Este es el codigo:
// Arduino based metal detector
// (C)Dzl july 2013
// http://dzlsevilgeniuslair.blogspot.dk/

// Connect search coil oscillator (20-200kHz) to pin 5
// Connect piezo between pin 13 and GND
// Connect NULL button between pin 12 anf GND

// REMEMBER TO PRESS NULL BUTTON AFTER POWER UP!!


#define SET(x,y) (x |=(1<<y)) //-Bit set/clear macros
#define CLR(x,y) (x &= (~(1<<y))) // |
#define CHK(x,y) (x & (1<<y)) // |
#define TOG(x,y) (x^=(1<<y)) //-+

unsigned long t0=0; //-Last time
int t=0; //-time between ints
unsigned char tflag=0; //-Measurement ready flag

float SENSITIVITY= 1000.0; //-Guess what

//-Generate interrupt every 1000 oscillations of the search coil
SIGNAL(TIMER1_COMPA_vect)
{
OCR1A+=1000;
t=micros()-t0;
t0+=t;
tflag=1;
}

void setup()
{
pinMode(13,OUTPUT); //-piezo pin
digitalWrite(12,HIGH); //-NULL SW. pull up
//-Set up counter1 to count at pin 5
TCCR1A=0;
TCCR1B=0x07;
SET(TIMSK1,OCF1A);
}
//-Float ABS
float absf(float f)
{
if(f<0.0)
return -f;
else
return f;
}

int v0=0; //-NULL value
float f=0; //-Measurement value
unsigned int FTW=0; //-Click generator rate
unsigned int PCW=0; //-Click generator phase
unsigned long timer=0; //-Click timer
void loop()
{
if(tflag)
{
if(digitalRead(12)==LOW) //-Check NULL SW.
v0=t; //-Sample new null value
f=f*0.9+absf(t-v0)*0.1; //-Running average over 10 samples
tflag=0; //-Reset flag

float clf=f*SENSITIVITY; //-Convert measurement to click frequency
if(clf>10000)
clf=10000;
FTW=clf;
}

//-Click generator
if(millis()>timer)
{
timer+=10;
PCW+=FTW;
if(PCW&0x8000)
{
digitalWrite(13,HIGH);
PCW&=0x7fff;
}
else
digitalWrite(13,LOW);
}
}
 
#15
Ese código tiene errores.
¿Tal cual está compila?
Veo un if con llave de cerrar pero sin llave de abrir.
Y algunos if que no hacen nada porque no tienen ni llaves ni nada que hacer.

Cambiando el último if debería de cambiar la frecuencia. Me parece que cambiando por ejemplo el 0x8000 por 0x4000 subiría al doble... Y después por 0x3fff
No estoy del todo seguro, ya te digo que veo cosas raras en ese programa.
 
Última edición:
#17
Me preguntaba si además de habilitar el pin 13 como salida del piezo.se podria habilitar más pines de salida por ejemplo para poner tres led, uno que empezará a encender a partir de 15 Hz el segundo a 25 Hz y el tercero ha 35 Hz todos en pines diferentes de salida del arduino.
Un saludo.
 
#20
Hola he echo los cambios.El zumbador sigue al mismo volumen, pero más rápido la frecuencia.
He ido cambiando y he probado 0×2000 y 0×2fff. Y ahora con este cambio, solo oscila cuando detecta un metal .creo que asín es mejor.
He cambiado tambien la parte de oscilación coil //-Generate interrupt every 1000 oscillations of the search coil
SIGNAL(TIMER1_COMPA_vect)
{
OCR1A+=1000;
t=micros()-t0;
t0+=t;
tflag=1;
}
Donde pone mil, he puesto 16000 y ahora si que tiene más sensibilidad.antes no me detectaba algunas tuberías de mi casa y ahora las detecta a una cuarta del suelo.
Un saludo.
 

Temas similares

Arriba