Archivi tag: tutorial

Risposta in frequenza di un amplificatore operazionale

In questo tutoria di elettronica utilizzeremo un amplificatore operazionale  in configurazione invertente misurandoci con l’ausilio di un oscilloscopio la frequenza e l’ampiezza del segnale d’uscita Vo variando la resistenza R2 da un valore ad un altro. Osserveremo la larghezza di banda di un amplificatore operazionale data dalla differenza tra la frequenza di taglio superiore ed inferiore(se esse sono molto vicine tra loro si avrà un amplificatore molto selettivo).

A.O(nella figura di sopra è rappresentata la banda passante di un amplificatore operazionale con dei condensatori all’uscita che filtrano la parte continua del segnale,ma nel nostro caso non ci sono perciò la banba inizia da VoutMAX)

Materiale da adoperare:

  • Generatore di frequenza, utilizzato per generare il segnale che entrava nell’ingresso invertente dell’operazionale Vi=+- 0,75V   F=1Khz
  • Oscilloscopio col quale abbiamo osservato Vi e Vo
  • Vari cavi coassiali con connettori o a banana o a coccodrillo
  • Logic lab sulla quale abbiamo montato ed alimentato il circuito dell’esperienza
  • 3 resistenze da ¼ di Watt ina da 1 Kohm   11,5 Kohm   3,3 Kohm
  • Un tester col quale abbiamo misurato in maniera soddisfacente le resistenze
  • Un amplificatore operazionale Ua741 in configurazione invertente.

aUna volta montato il circuito sulla breadboard misurate prima l’uscita dell’operazionale con R1=1Kohm ed R2=11,5Kohm ottenendo un amplificazione di

Vo= – (R2/R1)*Vi= – (11,5*1000/1*1000)*0,75 = 8,6V

Successivamente aumentate il valore della frequenza Fi da 1000hz (valore iniziale )fino a 100000hz.

risposta in frequenzatabella 1

Il guadagno G si calcola facendo 20LOG(Vo/Vi), dalle seguenti misure possiamo dedurre che all’ aumentare della frequenza d’ingresso l’ampiezza del segnale d’uscita diminuisce sempre di più fino ad arrivare quasi a 0 tutto ciò perché il nostro amplificatore operazionale ha una banda passante .Per trovare i valori della frequenza abbiamo utilizzato la formula inversa del periodo perciò F=1/T . All’uscita di questo circuito avevamo un segnale sinusoidale invertito di 180 gradi rispetto a quello iniziale. La nostra banda passante finirà quando il guadagno dell’amplificatore sarà uguale al guadagno iniziale 21,18-3=18,18 detto ciò possiamo dire che la nostra banda passante va dai 1000hz fino ai 29000hz. Nel secondo va messa una R2 più piccola rispetto alla prima, dopodichè  eseguito  nuove misurazioni.

Vo= – (R2/R1)*Vi = – (3,3*1000/1*1000)*0,75 = 2,5V

tabella 2

Da questi risultati osserviamo che con un amplificazione minore l’operazionale ha un guadagno minore ma una larghezza di banda maggiore infatti il guadagno scende sotto al valore 7,45 dopo aver superato i 150000hz. Da ciò possiamo dedurre che se si vuole far un amplificatore che abbia un elevata ampiezza ed un elevato guadagno bisognerà rinunciare ad una elevata larghezza di banda. Realmente si lha la banda passante massima quando si ha l’operazionale in configurazione ad anello aperto.

 

 

 

RADDRIZZATORI CON OPERAZIONALI

I raddrizzatori (o rettificatori) sono circuiti per la trasformazione di segnali bidirezionali in segnali unidirezionali. Se si utilizzano soltanto dei diodi per raddrizzare un segnale si ha lo svantaggio che la tensione di uscita sarà uguale alla tensione d’ingresso meno più o meno 0,7V cioè la tensione del diodo, perciò se volessimo raddrizzare un segnale di 0,7V in uscita al diodo avremmo 0V perché al segnale d’ingresso va sottratta la tensione del diodo. Per evitare questo inconveniente esistono circuiti raddrizzatori di precisione che possono raddrizzare segnali inferiori ai 0,7V.

In questo tutorial realizzerete due circuiti:

  1. il primo è un normale circuito raddrizzatore di precisione,mentre
  2. il secondo è un raddrizzatore di precisione a singola semionda.

Materiale e strumenti adoperati:

  • UA741 è l’operazionale che abbiamo adoperato per svolgere l’esperienza
  • Due diodi 1n4148 diodi ad alta frequenza
  • Logic lab sulla quale abbiamo montato ed alimentato il circuito.
  • Tre resistenze da 10Kohm ed 1/4 W
  • Un oscilloscopio col quale abbiamo misurato i segnali d’ingresso ed uscita del raddrizzatore
  • Un generatore di frequenza col quale abbiamo generato il segnale d’ingresso

Montate il raddrizzatore composto da:

  • Un operazionale utilizzato come inseguitore il cui vantaggio è quello di adattare l’impedenza
  • Un diodo polarizzato direttamente che fa passare soltanto la parte positiva del segnale entrante,fermando quella negativa
  • Un resistenza RL che è il nostro carico

Raddrizzatore

Il funzionamento di questo circuito è molto semplice perché il segnale entrante Vin rimane invariato e la caduta di tensione sul diodo viene annullata (per effetto della retroazione)dandoci in uscita un segnale unidirezionale (positivo). Bisogna fare attenzione però alla frequenza di lavoro del diodo,  perché se il diodo ha una frequenza di lavoro inferiore alla frequenza del segnale entrante ci saranno dei malfunzionamenti, se invece è superiore non ci cambia nulla, infatti, in questo tutorial la frequenza del segnale Vi è di 10000Hz questo valore rientra nella zona di lavoro del diodo. Il raddrizzatore di precisione nella configurazione di base non viene comunemente usato in quanto ha un problema: quando il segnale d’ingresso diventa (anche leggermente) negativo, l’amplificatore operazionale funziona in anello aperto. Questo porta facilmente l’uscita dell’amplificatore operazionale ad essere maggiore della tensione di alimentazione, inducendone così la saturazione. Quando l’entrata torna ad essere positiva, l’amplificatore deve uscire dalla saturazione per riattivarsi. Questo passaggio richiede un certo tempo, riducendo fortemente la risposta in frequenza del circuito.

 

Il secondo circuito realizzato è un raddrizzatore di precisione a singola semionda .

Raddrizzatore 2

Il circuito è composto da:

  • Un amplificatore operazionale in configurazione invertente
  • Tre resistenze da 10 Kohm R1 ed R2 servono a decidere di quanto deve amplificare l’amplificatore
  • Due diodi che ci permettono di far passare solo la semionda negativa del segnale

Il funzionamento di questo circuito è un po più complesso di quello precedente perché quando Vin è positiva il diodo D2 sarà in conduzione mentre D1 non lo sarà dando in uscita una tensione pari a 0 V. Quando invece abbiamo Vin negativa la musica cambia perché il diodo D2 non sarà in conduzione mentre il diodo D1 lo sarà, inoltre non va dimenticato che l’operazionale è in configurazione invertente, e ciò comporta ad un amplificazione pari ad 1 perché R1=R2 ed ad uno sfasamento del segnale d’uscita di 180 gradi rispetto a quello d’entrata. Detto ciò possiamo dedurre che in uscita avremo una tensione pari a 0V quando il segnale d ‘ingresso è positivo,ed avremo una tensione d’uscita uguale alla semionda negativa d’ingresso sfasata di 180 gradi quando in ingresso avremo la semionda negativa.

Oscillatore di Wien

Materiale utilizzato utilizzato:

  • Un amplificatore operazionale TL081 alimentato con tensione duale

Oscillatore wien

  • 4 resistenze da: 3,9Kohm x 2 18Kohm x 1 12Kohm x 1 ed un trimmer da 10Kohm
  • 2 condensatori da 10 nF.1 logic LAB con la quale abbiamo alimentato il circuito
  • 1 oscilloscopio col quale abbiamo visualizzato l’uscita dell’oscillatore
  • 1 breadboard sulla quale abbiamo montato il circuito

L’ obiettivo di quest’esperienza è quello di costruire un oscillatore di Wien e di visualizzare l’uscita ed analizzandolatramite un oscilloscopio. Il nostro oscillatore deve lavorare ad una frequenza di 4Khz.

Sapendo che:

TAU = R*C=1/(2*3,14*F0)=40 microsecondi dove F0 è la frequenza di oscillazione,

possiamo calcolarci i valori delle resistenze R dando a C un valore qualsiasi che nel nostro caso è 10nf , R = TAU/C=3,9Kohm.

Successivamente ci calcoliamo i valori delle resistenze R1 ed R2 che serviranno a far funzionare l’operazionale come un amplificatore non invertente, e per farlo utilizziamo le condizioni di BARKAUSEN le quali pongono: R2=2R1-(R3/2) dove R3 è il trimmer collegato in serie con la resistenza R2.

E detto ciò poniamo R1=12Kohm R3=10Kohm ed R2 =(12000*2)/(10000/2)=18Kohm

Fatto ciò abbiamo colleghiamo il piedino 3 dell’operazionale(Vout) all’ingresso del nostro oscilloscopio e vediamo come varia il segnale d’uscita in funzione del trimmer.

Effettuiamo 3 misurazioni:

  1. Una con R3 messo al valore massimo che idealmente era 10Kohm ma realmente era 11,11 Kohm.
  2. Una   con   R3 messo al valore   di 2,06 Kohm.
  3. Una   con   R3 messo al valore   inferiore a 2,06 Kohm.

Wien

Nel primo caso vediamo che il segnale d’uscita non assomiglia affatto ad un onda sinusoidale ma sembra un’onda quadra con un periodo T pari a 0,27 millisecondi e con frequenza pari a 3703 hz.(Divisione del periodo = 5,4 e Scala = 50 microsecondi)L’ampiezza era di +-11V(Divisione della tensione = 4,4 e Scala = 5Volt).

Nel secondo caso riusciremo a visualizzare sull’oscilloscopio una sinusoide quadra con un periodo T pari a 0,235 millisecondi e con frequenza pari a 4255 hz.(Divisione del periodo = 4,7 e Scala = 50 microsecondi)L’ampiezza era di +-10,5V(Divisione della tensione = 4,2 e Scala = 5Volt).

Nel terzo caso invece abbiamo una tensione di 0V.

Detto ciò possiamo dire che se aumentiamo la tensione di alimentazione del circuito l’oscillatore tenderà meno ad andare in saturazione.

Inoltre abbiamo scelto un trimmer invece di un potenziometro perché esso ci permette di variare il suo valore con molta precisione, permettendoci di vedere come il segnale d’uscita cambi in funzione del valore della serie tra R2 ed R3.

Multivibratore Astabile

Progettare con un A741, alimentatoa 12 V, un generatore di onda quadra con frequenza = 1 KHZ. Disegnare le forme d’onda significative. Ripetere l’esercizio con f = 10 KHZ. Riutilizzare il circuito per generare un onda triangolare e disegnarne l’uscita.

Lo schema del circuito che genera un’onda quadra e’ riportato qui di seguito. Si tratta di un multivibratore astabile.Esso è costituito da un operazionale, un circuito RC e un partitore sulla reazione che determina la frequenza di oscillazione. Il circuit è il seguente:

osc

(1 T e 2 T sono i semiperiodi rispettivamente della semionda negativa e della semionda positiva e concidono)

Scegliete i seguenti valori per i componenti:

  • R =10k
  • R1 = 10k
  • R2 = 47k
  • C  = 10nF

Come si può notare dalla figura sottostante la commutazione dell’operazionale (passaggio da semionda positiva a semionda negativa) avviene quando la tensione sul condensatore è  quasi a 6V,  a causa della ripartizione tra 1 R e 2 R , varia proprio tra  6V. Il circuito oscillante si basa sul fatto che il condensatore cerca di caricarsi, ipotizziamo alla tensione di +12V (in realtà bisognerebbe togliere almeno 1,5V per le cadute di tensione nell’operazionale), ma raggiunti i +6V l’operazionale commuta e costringe il condensatore a caricarsi a –12V sempre seguendo le curve esponenziali tipiche del fenomeno di carica-scarica di un condensatore. A questo punto il ciclo si ripete con un periodo dato da T .

gra

 

 

Python & Esempi

In questa guida troverete una serie di esercitazioni (con le rispettive soluzioni) che vi mostreranno le basi per poter programmare in Python( versione usata 3.4). Per poter iniziare è importante avere una conoscenza dell’informatica molto basilare, per esempio dovete sapere cosa sono:

  • Variabili
  • Funzioni
  • Librerie
  • Costanti
  • Cicli
  • If & Else
  • Manipolazione di file

Testi Consigliati per imparare la programmazione in Python

Esercizi del sito con soluzioni:

  1. Calcoli
  2. String
  3. While
  4. Functions
  5. Password Generator
  6. Creazione File
  7. Lettura File
  8. Statistiche di un Match
  9. Punteggio Squadre

Media Aritmetica

Con il metodo della media possiamo avere da un sensore poco preciso, delle letture migliori, ma richiede più tempo del previsto.

Ipotizziamo di voler leggere, con arduino, da un sensore ultrasuoni dei valori analogici, il modo più semplice è scrivere nel loop:

sensore = analogRead ( Ax)

Ax = pin analogico

Così facendo abbiamo una lettura immediata, ma se il nostro sensore ci da misure sballate come possiamo fare?

Qui entra in gioco la media delle letture, per realizzarla dovremmo semplicemente fare le seguenti cose:

byte misurazione[30]={};  create un Array nel quale metterete le letture che effettua il sensore( il numero compreso tra le parentesi quadre rappresenta il numero di letture della media).

int media,somma = 0;

byte contatore = 0;

– CALCOLO MEDIA

  1. void loop(void)
  2. {
  3. somma=0;
  4. media = 0
  5. for(c=0;c<=29;c++)//legge per 30 volte il sensore ad ultrasuoni
  6. {
  7. misurazione[c]=analogRead(A0);//leggo il valore dal piedino analogico A0
  8. somma=somma+misurazione[c];
  9. delay(1);
  10. }
  11. media = somma/30;
  12. Serial.println(sensore);
  13. delay(100);
  14. }

Per calcolare la media utilizziamo un ciclo for nel quale leggiamo per 30 volte il sensore e scriviamo per altre 30 volte il valore letto all’interno dell’array, una volta fatto ciò la media sarà uguale alla somma dei 30 valori diviso 30.

Arduino NOKIA LCD display

Questi piccoli display economici sono quelli utilizzati nel vecchio Nokia 5110, le loro dimensioni sono molto ridotte, appena 3×3 cm ed hanno una risoluzione di 84×48 pixel. Al loro interno troviamo il driver Philips PCD8544,che ci permetterà di poter comandare con il nostro microcotrollore arduino il display.

In questa pagina troverete come pilotare e collegare questo dispositivo .

Iniziamo dalla parte Hardware vedendo a cosa servono i pin:

  1. RST è il reset del dispositivo
  2. CE serve ad attivare il driver Philips
  3. DC ci permette di dire al driver di fare Write o Read
  4. Din è dove scorrono le informazioni
  5. CLK serve a sincronizzare i due dispositivi
  6. VCC alimentazione dello schermo
  7. BL accensione della retroilluminazione
  8. GND massa dello schermo

display connt comp
display basetta comp
All’interno del programma troverete dei define che vi indicheranno come collegare i PIN di arduino.

COLLEGAMENTI DA FARE:

NOKIA RESET     DC     CE     Din CLOCK    Vcc     BL   GND
ARDUINO      12     13     11     10      9    3,3V    3,3V   GND

All’interno del programma ci sono delle funzioni create dalla sparkfun che ci permetteranno di pilotare il display, e le principali sono:

  • gotoXY( ASSE X, ASSE Y)  :decidiamo in quale punto dello schermo scrivere ( valore MAX 84,84).
  • LcdClear() : cancella tutte le scritte sul display.
  • LcdString()  : ci permette di scrivere una parola o una frase sul display.
  • drawLine() : disegna una cornice.
  • SerialInitialise() : inizializza la seriale.
  • LcdInitialise() : inizializza LCD, questa funzione è molto importante, perchè ci permette di regolare il contrasto del display, il quale se troppo alto o troppo basso,  impedisce di osservare le scritte.

DOWNLOAD PROGRAMMA

download-icon

Arduino Matrice 4×4

Questa tastiera è composta da 16 pulsanti che possono essere letti in due modi:

  • -SINGOLARMENTE cioè utilizziamo 16 pin di arduino per leggere tutti i pulsanti.
  • -SISTEMA A MATRICE cioè utilizziamo un numero limitato di pin(nel nostro caso 8) per leggere sempre 16 pulsanti.

Per usare una tastiera 4×4 con arduino dovrete fare i seguenti collegamenti: keypadb

Le 8 resistenze devono avere tutte  lo stesso valore(nel nostro caso  1Kohm), il loro compito è quello di evitare cortocircuiti.

Il programma si può dividere in 3 parti:

  1. – lettura delle colonne valori: 0,1,2,3
  2. -lettura delle righe valori: 0,1,2,3
  3. – Calcolo del tasto = colonna + ( riga * 4 )

DOWNLOAD PROGRAMMA

download-icon

Arduino Display LCD 16×2

LCd

Questo LCD 16×2 retroilluminato è il display  utilizzato nell’ ArduFonino.

Ha 16 piedini:

  1. GND
  2. VCC
  3. V0 (Regolazione NERO delle lettere )
  4. RS register select
  5. Read / Write ( leggere o scrivere col microcontrollore )
  6. ENABLE  attivare o disattivare il display
  7. NON USATO
  8. NON USATO
  9. NON USATO
  10. NON USATO
  11. D4 pin di comunicazione
  12. D5 pin di comunicazione
  13. D6 pin di comunicazione
  14. D7 pin di comunicazione
  15. Retroilluminazione
  16. Retroilluminazione

LCD_bb

Comandi usati nell’ Ardufonino:

#include <LiquidCrystal.h>     Inseriamo la libreria arduino del display.

LiquidCrystal lcd(RS, EN, D4, D5 ,D6, D7);    va sempre messo in cima al programma, perchè serve a inizializzare i pin din arduino.

–   lcd.begin(Numero_colonne, Numero_righe);   va  messo nel setup.

lcd.print(numero);   scrivo una parola o una variabile.

lcd.setCursor(Asse_X, Asse_Y);    decido dove iniziare a scrivere.

lcd.clear();   cancello tutto.

lcd.createChar(0,ARRAY);   inserisco un Array 8×5 in una casella del display ( si usa pe fare dei simboli ).

 

 

Arduino CLOCK (Serial Monitor)

Questo è il modo più semplice per poter realizzare, con arduino , un orologio, senza l’utilizzo di componenti esterne.
Copiando questo Software nel vostro arduino, visualizzerete nel il serial monitor un orario (inizialmente impostato a 00:00:00) che cambierà ad ogni secondo.

00 (ORE):00 (MINUTI):00 (SECONDI)

Per impostare l’orario esatto vi basterà cambiare i valori delle sei variabili:

– secondi_unita
– secondi_decine
– minuti_unita
– minuti_decine
– ore_unita
– ore_decine

Se invece volete velocizzare il vostro conteggio vi basterà modificare il valore di #define CLOCK

 #define CLOCK 1000 //con questo define decidiamo il Clock del nostro orologio che normalmente è 1 Secondo
 // VARIANDO QUESTE 6 VARIABILI DECIDIAMO L'ORARIO INIZIALE DEL NOSTRO OROLOGIO
 byte secondi_unita=0;
  byte secondi_decine=0;
  byte minuti_unita=0;
  byte minuti_decine=0;
  byte ore_unita=0;
  byte ore_decine=0;
 void setup (void)
  {
  Serial.begin(57600);
  }
  void loop (void)
  {
  secondi_unita=secondi_unita+1;
  delay(CLOCK);
  if(secondi_unita>9)
  {
  secondi_unita=0;
  secondi_decine=secondi_decine+1;
  }
  if(secondi_decine>=6)
  {
  secondi_decine=0;
  minuti_unita=minuti_unita+1;
  }
  if(minuti_unita>9)
  {
  minuti_unita=0;
  minuti_decine=minuti_decine+1;
  }
  if(minuti_decine>=6)
  {
  minuti_decine=0;
  ore_unita=ore_unita+1;
  }
  if(ore_unita>9)
  {
  ore_unita=0;
  ore_decine=ore_decine+1;
  }
  if((ore_decine>=2)&&(ore_unita==4))
  {
  secondi_unita=0;
  secondi_decine=0;
  minuti_unita=0;
  minuti_decine=0;
  ore_unita=0;
  ore_decine=0;
  }
 Serial.print("                                                          ");
  Serial.print(ore_decine);
  Serial.print(ore_unita);
  Serial.print(":");
  Serial.print(minuti_decine);
  Serial.print(minuti_unita);
  Serial.print(":");
  Serial.print(secondi_decine);
  Serial.println(secondi_unita);
  }