ITIS “F.GIORDANI” Caserta
A.S. 2017/18
classe: 4D informatica
indirizzo di studio: Informatica e Telecomunicazione – articolazione Informatica
Materia: Informatica
Programmatore: Soreca Giovanni.
Documentatore: Di Giorgio Antonio.
Sistema Operativo: Windows 10
Linguaggio: Arduino

Sensore di prossimità

Il sensore di prossimità è il sensore che ci permette di rilevare la presenza di oggetti nelle vicinanze, senza che ci sia un contatto. Ovviamente abbiamo una distanza massima per rilevare un oggetto, questa è chiamata portata vedente. Questi sesnsori hanno un’affidibalità elevata, visto che non sono sottopisti a contatti fisici.

Il sensore di prossimità quindi è capace di rilevare oggetti nella sua portata vedente.

Di conseguenza il segnale elettrico d’uscita sarà di tipo on o off in quanto deve rappresentare solo gli stati assenza o presenza. Il circuito che genera il segnale d’uscita può essere realizzato seguendo degli standard:

  • come contatto puro, del tipo di quello che si presenta ai capi di un interruttore chiuso;
  • tipo PNP, dove viene generato un segnale in tensione in grado di alimentare piccoli carichi;
  • tipo NPN, dove l’uscita viene portata a massa, dando la possibilità di chiudere un circuito esterno.

Gli ultimi due sensori hanno spesso dei circuiti di protezione per evitare che si danneggino. L’uscita viene progettata normalmente per trattare segnali con basse tensioni e basse correnti.

Abbiamo 5 tipi di sensori di prossimità: induttivi, capacitivi, magnetici, ottici ed ad ultrasuoni.

I sensori di prossimità induttivi

I sensori di prossimità induttivi si basano sul principio della variazione di riluttanza, ovvero l’opposizione di un materiale al passaggio di un flusso magnetico. Quando nelle vicinanze si presenta un oggetto realizzato in materiale ferromagnetico, la comparsa di materiale ferromagnetico all’interno del campo magnetico, fa sì che il campo stesso si chiuda meglio, con conseguente abbassamento della riluttanza. I circuiti interni del sensore rilevano la variazione di riluttanza, e superata una certa soglia, fanno cambiare il segnale d’uscita. Pertanto questi sensori di prossimità possono rilevare solo la presenza d’oggetti realizzati in materiale ferromagnetico e la loro portata è spesso molto bassa, varia da 1 a 10 millimetri. Questi sensori possono cambiare il loro stato a frequenze molto elevate, quindi sono adatti a rilevare oggetti in rapido movimento.  Essi inoltre sono i più economici.

 

I sensori di prossimità capacitivi

I sensori capacitivi si basano sul principio della rilevazione della capacità elettrica di un condensatore, ovvero un componente elttrico capace di mantenere l’energia in un campo di forze. Essi sensori capacitivi oltre agli oggetti metallici hanno la capacità di riconoscere quasi tutti I materiale e vengono utilizzati in diverse applicazioni, per esempio per il monitoraggio del flusso di passaggio. I sensori capacitivi sono immuni a disturbi elettromagnetici e hanno la portata più elevata, ovvero di 20 millimetri.

 

I sensori di prossimità magnetici

I sensori di prossimità magnetici funzionano rilevando il campo magnetico generato da un magnete permanente montato appositamente sull’oggetto da rilevare. Una particolarità di questi sensori è che le portate nominali dipendono dalla potenza del campo generato dal magnete, più che dalle caratteristiche del sensore, e pertanto, usando un grosso magnete, possono essere elevate, fino a 100 millimetri. Di contro l’oggetto da rilevare deve essere preparato con l’opportuno magnete permanente. Per ovvi motivi questi sensori non possono essere utilizzati in prossimità di grosse fonti.

I sensori di prossimità ottici

I sensori di prossimità ottici si basano sulla rilevazione della riflessione di un fascio luminoso da parte dell’oggetto rilevato. Normalmente viene usato un fascio di raggi infrarossi, in quanto difficilmente si confonde con i disturbi generati da fonti luminose di tipo ambientale. Essi sono molto economici. Nell’uso più banale, la luce viene riflessa dalla superficie stessa dell’oggetto rilevato, nello stesso modo in cui la luce visibile può essere riflessa e percepita dai nostri occhi. Il campo sensibile di questi sensori di prossimità dipende sostanzialmente dalla natura della superficie dell’oggetto da rilevare. Va comunque posta attenzione al posizionamento di fonti di luce artificiale: la proiezione di una forte luce su questi sensori ne può provocare l’accecamento.

I sensori di prossimità ad ultrasuoni 

I sensori di prossimità ad ultrasuoni funzionano sul principio del Sonar: emettono impulsi sonori ultrasonici, e rilevano un’eventuale eco di ritorno generata dalla presenza di un oggetto all’interno della portata nominale. Vista la complessità, questi sensori sono costosi, ma dispongono spesso di funzioni evolute come il settaggio della distanza di commutazione, del campo sensibile; e programmazione software dei settaggi dello strumento. La velocità di commutazione di questi sensori di prossimità è bassa, ma in compenso presentano dei significativi vantaggi: portate molto elevate(fino a 10 metri); sono immuni a disturbi elettromagnetici; possono rilevare oggetti di qualsiasi materiale (tranne materiali fonoassorbenti); possono rilevare oggetti senza che questi siano stati preventivamente preparati. Questo sensore viene utilizzato nel progetto Roby.

Elenco attrezzature e materiali:

  1. Scheda arduino.
  2.  x2 LED (Rosso e Verde).
  3.  x2 resistori di 220 oHm.
  4. x12 cavi di collegamento.
  5. Breadboard.
  6. Cavo usb per collegare Arduino.
  7. Sensore di prossimità ad altrusuoni.

Foto sistema:

Codice Arduino (versione 1.0):

int triggerPort = 13;
int echoPort = 12;
int verde = 10;
int rosso = 11;

void setup() {

pinMode( triggerPort, OUTPUT );
pinMode( echoPort, INPUT );
pinMode( rosso, OUTPUT );
pinMode( verde, OUTPUT );
Serial.begin( 9600 ); //tramite questa istruzione prepariamo Arduino a ricevere dati tramite porta seriale. POtremmo usare generalmente 9600 bits per secondo
}

void loop() {
//porta bassa l’uscita del trigger
digitalWrite( triggerPort, LOW );
digitalWrite( triggerPort, HIGH );
delayMicroseconds( 10 ); //invia un impulso di 10 microsecondi su trigger
digitalWrite( triggerPort, LOW );

long t = pulseIn( echoPort, HIGH ); //pulseIn restituisce la lunghezza dell’impulso che passa da high a low in microsecondi

long r = 0.034 * t / 2; //0.034 Ë l’approssimazione di 343,4m/s, ovvero la velocit‡ del suono in una temperatura media di 20∞; quindi a noi ci serve in cm/microsecondi e lo approssimiamo
//la formula dello spazio Ë s=v*t (0.034*t); ma noi dividiamo per due perchÈ il suono percorre due volte la distanza da misurare(giunge all’oggetto e ritorna indietro)
if( r <= 5)
{
digitalWrite(verde, HIGH);
digitalWrite(rosso, LOW);
}
else
{
digitalWrite(rosso, HIGH);
digitalWrite(verde, LOW);
}
}

Codice Arduino (versione 2.0):

class classSensoreProssimita // inizio classe sensore di prossimità
{
private:
int pinEcho; // pin di output
int pinTrigger; // pin di input
static const float v=0.034; // velocità del suono in una temperatura media di 20∞ cm/s
public:
classSensoreProssimita()
{
// configurazione di default
pinEcho=2;
pinTrigger=3;
pinMode( pinEcho, INPUT );
pinMode( pinTrigger, OUTPUT );
}
classSensoreProssimita(int pinEcho,int pinTrigger)
{
// configurazione con parametri
this->pinEcho=pinEcho;
this->pinTrigger=pinTrigger;
pinMode( pinTrigger, OUTPUT );
pinMode( pinEcho, INPUT );
}
long getDistanzaLetta() // Ritorna la distanza letta in cm
{
digitalWrite( pinTrigger, LOW );
digitalWrite( pinTrigger, HIGH );
delayMicroseconds( 10 );
digitalWrite( pinTrigger, LOW );
long t = pulseIn( pinEcho, HIGH );
long s = v * t / 2;
return s;
}
};

const int ledVerde = 10;
const int ledRosso = 11;
const int pinEcho = 12;
const int pinTrigger = 13;
classSensoreProssimita sensProssObj(pinEcho,pinTrigger);
// instanzio un oggetto della classe sensore di prossimit‡ e gli passo come parametri i pin a cui Ë collegato
void setup()
{
pinMode( ledRosso, OUTPUT );
pinMode( ledVerde, OUTPUT );
}
void loop()
{
long dist=sensProssObj.getDistanzaLetta(); // leggo una nuova distanza
if( dist <= 5) // se c’Ë un ostacolo nel range di 5 cm accendi il led verde
{
digitalWrite(ledVerde, HIGH);
digitalWrite(ledRosso, LOW);
}
else // altrimenti accendi il led rosso
{
digitalWrite(ledRosso, HIGH);
digitalWrite(ledVerde, LOW);
}
delay(10); // faccio respirare un pÚ il ciclo
}

Foto circuito:

Descrizione top-down dei passi realizzativi:

  1. Realizzare il circuito
  2. Scrivere il codice arduino
  3. Collegare la scheda arduino al pc tramite il cavo usb
  4. Caricare il programma cliccando sul pulsante “carica” dell‘ambiente software arduino

Test finale:
Osservare il funzionamento del sensore di prossimità.