- Código para que el Arduino se comporte como un frecuencímetro. Observaremos el resultado en el Monitor Serie.
- Medirá desde unos 50 Hz hasta unos 30 kHz con un error de un 2 % aproximadamente.
- Conectamos un generador a la entrada 12 del Arduino y observamos su frecuencia en el Monitor Serie.
- La señal de entrada debe tener niveles entre 1 V y 4 V, aproximadamente, para poder ser medida.
- Aunque puede medir señales sinusoidales, mide mejor señales cuadradas.
frecuencimetro.ino
// Frecuencímetro
// kio4.com
int input=12;
int high_time;
int low_time;
float time_period;
float frequency;
void setup()
{
Serial.begin(9600);
pinMode(input,INPUT);
}
void loop(){
high_time=pulseIn(input,HIGH);
low_time=pulseIn(input,LOW);
time_period=high_time+low_time;
time_period=time_period/1000;
frequency=1000/time_period;
Serial.println(frequency);
delay(1000);
}
- Utiliza un Arduino para crear un PWM y otro Arduino para medir su frecuencia.
____________________________________
- Amplificador Emisor Común con saturación y corte.
- Supongamos que queremos medir señales pequeñas, por ejemplo de 30 mV, esta señal no activará alternadamente los estados ALTO y BAJOS del terminal de entrada del Arduino, ya que es demasiado pequeña.
- Podemos convertir esa señal a otra de mayor nivel, entre 1 V y 4 V, aproximadamente mediante un amplificador.
- Observa el amplificador, se suministramos una señal sinusoidal de 30 mVp y obtenemos una señal entre 4,5 V y 0,9 V
- Si en vez de introducir una señal de 30 mVp, introducimos otra de 300 mVp, el transistor funcionará en corte-saturación y obtendremos la señal siguiente.
- Nos servirá esta señal, ya que queremos obtener señales grandes, no nos importa que la señal haya sido distorsionada a cuadrada como indica la imagen.
- El máximo nivel de audio de los móviles, es de unos 200 mV.
____________________________________
- Construcción de la placa del circuito impreso con PCBWizard.
- Lado de los componentes. No está a escala. He añadido un condensador electrolítico en la salida.
____________________________________
- Conexión al Arduino.
- Conectamos al conector del auricular mediante un jack de 3,5 mm
____________________________________
- Conexión al Arduino con el módulo del LM386.
- Si no queremos construir el amplificador anterior, compramos este módulo con el amplificador LM386, tiene un precio inferior a 1 €.
- Por su facilidad, esta es la mejor propuesta:
_________________________________________________
- Vamos a crear nuestro propio generador de tonos:
____________________________________
- Generador de tonos con JavaScript.
- Vamos a ver un par de ejemplos de un generador de tonos mediante JavaScript.
- En este caso tenemos una frecuencia de 1000 Hz, según entre un 1 o un 0, el tiempo entre los datos será el que indique cada sleep.
sonido3.html
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"></head><body>
<body>
<button onclick='play();'>Play</button>
<script>
var frequency = 1000;
var data = {
1: {duration:500, sleep:1000},
0: {duration:500, sleep:500}
}
var audio = new(window.AudioContext || window.webkitAudioContext)();
//function creates an Oscillator. In this code we are creating an Oscillator for every tune, which help you control the gain.
//If you want, you can try creating the Oscillator once and stopping/starting it as you wish.
function createOscillator(freq, duration) {
var attack = 10, //duration it will take to increase volume full sound volume, makes it more natural
gain = audio.createGain(),
osc = audio.createOscillator();
gain.connect(audio.destination);
// gain.gain.setValueAtTime(0, audio.currentTime); //change to "1" if you're not fadding in/out
// gain.gain.linearRampToValueAtTime(1, audio.currentTime + attack / 1000); //remove if you don't want to fade in
// gain.gain.linearRampToValueAtTime(0, audio.currentTime + duration / 1000); //remove if you don't want to fade out
gain.gain.value = 4;
osc.frequency.value = freq;
osc.type = "sine";
osc.connect(gain);
osc.start(0);
setTimeout(function() {
osc.stop(0);
osc.disconnect(gain);
gain.disconnect(audio.destination);
}, duration)
}
function play() {
//your pattern
var song = [1,0,0,0,0];
timeForNext = 0;
for (i=0;i<song.length;i++){
duration = data[song[i]].duration;
//use timeout to delay next tune sound
window.setTimeout(function(){
createOscillator(frequency, duration);
},timeForNext);
timeForNext+=data[song[i]].sleep;
}
}
//play the music
play();
</script>
</body>
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto Más información