Generatore di onda quadra a frequenza variabile


Proveremo questa volta ad utilizzare arduino per generare un segnale a frequenza variabile. Esattamente, cercheremo di generare un'onda quadra, sfruttando come uscita uno dei pin digitali.
La variazione della frequenza si ottiene ruotando un potenziometro collegato al pin A2. Per chi non avesse dimestichezza con i componenti elettronici, ricordiamo che un potenziometro Ŕ una resistenza variabile, dotata di tre contatti o terminali: due terminali fanno capo agli estremi della resistenza, mentre il terzo terminale (in genere il centrale) corrisponde ad un contatto strisciante (detto cursore) che scorre lungo la resistenza, permettendo di ottenere valori intermedi variabili a piacere.

La realizzazione Ŕ piuttosto semplice: basta inviare al pin scelto come uscita una serie di istruzioni che lo settano alternativamente a livello alto ed a livello basso; l'intervallo di tempo che intercorre tra un passaggio di livello e l'altro, determina la frequenza del segnale.
potenziometri Per inserire nel codice il ritardo desiderato, si usa l'istruzione "delayMicroseconds(valore)" sostituendo, al posto di "valore", un tempo in microsecondi (ricordiamo che 1 millisecondo equivale a 1000 microsecondi)
Il valore che viene utilizzato come ritardo Ŕ quello letto dall'ingresso analogico (pin A2), dove risulta collegato il cursore del potenziometro.
Ruotando il potenziometro, varierÓ la resistenza compresa fra il cursore e ciascuna delle estremitÓ; di conseguenza varierÓ il valore di tensione letto dal pin A2.
L'uscita dell'onda quadra risulta disponibile fra i pin 12 e ground, dove Ŕ stata inserita come carico una resistenza Ru da 10 kohm.
Dalle prove che ho fatto ho visto che si possono ottenere frequenze da 500 a 5000 Hz.

Ecco lo schema dei collegamenti da realizzare ed il codice da caricare in memoria:

collegamento di potenziometro a scheda arduino // generatore di onda quadra

#define potpos 2    // definisce il Pin di ingresso per il potenziometro
int potR = 0;    // variabile che memorizza la tensione letta dal potenziometro

void setup()
{
pinMode(12, OUTPUT);    // dichiara il Pin 12 come OUTPUT
}

void loop()
{
potR = analogRead(potpos);    // Legge la tensione (ovvero la posizione) del potenziometro
digitalWrite(12, HIGH);    // mette il pin 12 in stato High
delayMicroseconds(potR);    // inserisce un ritardo dipendente dalla posizione del potenziometro
digitalWrite(12, LOW);    // mette il pin 12 in stato LOW
delayMicroseconds(potR);    // inserisce un ritardo dipendente dalla posizione del potenziometro
}





ebook "Introduzione all'elettronica"


Ritorna all'indice generale