In questo tutorial svilupperemo un circuito utilizzando il sensore FLEX, Arduino Uno e un servomotore. Questo progetto è un sistema di servocontrollo in cui la posizione del servo albero è determinata dalla flessione o piegatura o deviazione del sensore FLEX.
Parliamo prima un po 'dei servomotori. I servomotori vengono utilizzati laddove è necessario un movimento o una posizione precisa dell'albero. Questi non sono proposti per applicazioni ad alta velocità. Questi sono proposti per applicazioni a bassa velocità, coppia media e posizione precisa. Questi motori sono utilizzati in macchine a braccio robotico, controlli di volo e sistemi di controllo. I servomotori sono utilizzati in sistemi embedded come distributori automatici ecc.
I servomotori sono disponibili in diverse forme e dimensioni. Un servomotore avrà principalmente fili lì, uno è per la tensione positiva, un altro è per la massa e l'ultimo è per l'impostazione della posizione. Il filo ROSSO è collegato all'alimentazione, il filo nero è collegato a terra e il filo GIALLO è collegato al segnale.
Un servomotore è una combinazione di motore CC, sistema di controllo della posizione, ingranaggi. La posizione dell'albero del motore DC è regolata dall'elettronica di controllo nel servo, in base al rapporto di lavoro del segnale PWM sul pin SIGNAL.
In parole semplici, l'elettronica di controllo regola la posizione dell'albero controllando il motore CC. Questi dati relativi alla posizione dell'albero vengono inviati tramite il pin SIGNAL. I dati di posizione al controllo devono essere inviati sotto forma di segnale PWM attraverso il pin di segnale del servomotore.
La frequenza del segnale PWM (Pulse Width Modulated) può variare in base al tipo di servomotore. La cosa importante qui è il DUTY RATIO del segnale PWM. In base a questo DUTY RATION l'elettronica di controllo regola l'albero. Affinché l'albero possa essere spostato a 9o, la RAZIONE DI ACCENSIONE deve essere 1 / 18.ie. 1 milli secondo di "tempo ON" e 17 milli secondi di "tempo OFF" in un segnale di 18 ms.
Affinché l'albero possa essere spostato a 12o, il tempo di attivazione del segnale deve essere di 1,5 ms e il tempo di disattivazione deve essere di 16,5 ms. Questo rapporto viene decodificato dal sistema di controllo in servo e regola la posizione in base ad esso.
Questo PWM qui è generato utilizzando ARDUINO UNO. Quindi per ora sappiamo che possiamo controllare l'albero del servomotore variando il rapporto di lavoro del segnale PWM generato da Arduino Uno. L'UNO ha una funzione speciale che ci consente di fornire la posizione del SERVO senza disturbare il segnale PWM. Tuttavia è importante conoscere il rapporto di servizio PWM - relazione posizione servo. Ne parleremo di più nella descrizione.
Ora parliamo di FLEX SENSOR. Per interfacciare un sensore FLEX con ARDUINO UNO, utilizzeremo la funzione ADC (conversione da analogico a digitale) a 8 bit per eseguire il lavoro. Un sensore FLEX è un trasduttore che cambia la sua resistenza quando cambia la sua forma. Un sensore FLEX è lungo 2,2 pollici o lungo un dito. È mostrato in figura.
Il sensore Flex è un trasduttore che cambia la sua resistenza quando la superficie lineare viene piegata. Da qui il nome sensore di flessione. In parole semplici, la resistenza del terminale del sensore aumenta quando è piegato. Questo è mostrato nella figura sottostante.
Questo cambiamento nella resistenza non può fare bene a meno che non possiamo leggerli. Il controller a portata di mano può solo leggere le possibilità in tensione e niente di meno, per questo useremo il circuito del divisore di tensione, con questo possiamo derivare la variazione di resistenza come variazione di tensione.
Il partitore di tensione è un circuito resistivo ed è mostrato in figura. In questa rete resistiva abbiamo una resistenza costante e l'altra resistenza variabile. Come mostrato in figura, R1 qui è una resistenza costante e R2 è un sensore FLEX che funge da resistenza.
Il punto medio del ramo viene preso per la misurazione. Con la modifica di R2, abbiamo la modifica a Vout. Quindi con questo abbiamo una tensione che cambia con il peso.
La cosa importante da notare qui è che l'input preso dal controller per la conversione ADC è di appena 50µAmp. Questo effetto di carico del partitore di tensione basato sulla resistenza è importante poiché la corrente assorbita da Vout del partitore di tensione aumenta la percentuale di errore aumenta, per ora non dobbiamo preoccuparci dell'effetto di carico.
FLEX SENSOR quando piegato la sua resistenza cambia. Con questo trasduttore collegato a un circuito partitore di tensione, avremo una tensione variabile con FLEX sul trasduttore. Questa tensione variabile è FED su uno dei canali ADC, avremo un valore digitale relativo a FLEX.
Abbineremo questo valore digitale alla posizione del servo, con questo avremo il controllo del servo tramite flex.
Componenti
Hardware: Arduino Uno , alimentatore (5v), condensatore da 1000 uF, condensatore da 100nF (3 pezzi), resistenza da 100KΩ, SERVOMOTORE (SG 90), resistenza da 220Ω, sensore FLEX.
Software: Atmel studio 6.2 o Aurdino notturno.
Schema del circuito e spiegazione
Lo schema del circuito per il controllo del servomotore tramite sensore FLEX è mostrato nella figura sottostante.
La tensione ai capi del sensore non è completamente lineare; sarà rumoroso. Per filtrare il rumore, i condensatori sono posizionati su ciascun resistore nel circuito del divisore come mostrato in figura.
Qui prenderemo la tensione fornita dal divisore (tensione che rappresenta il peso in modo lineare) e la inseriremo in uno dei canali ADC di Arduino UNO. Useremo A0 per questo. Dopo l'inizializzazione dell'ADC, avremo il valore digitale che rappresenta il sensore piegato. Prenderemo questo valore e lo abbineremo alla posizione del servo.
Affinché ciò avvenga occorre stabilire alcune istruzioni in programma e ne parleremo in dettaglio di seguito.
ARDUINO ha sei canali ADC, come mostrato in figura. In questi uno o tutti possono essere utilizzati come ingressi per la tensione analogica. L'ADC UNO ha una risoluzione di 10 bit (quindi i valori interi da (0- (2 ^ 10) 1023)). Ciò significa che mapperà le tensioni di ingresso tra 0 e 5 volt in valori interi compresi tra 0 e 1023. Quindi per ogni (5/1024 = 4,9 mV) per unità.
Qui useremo A0 di UNO.
Dobbiamo sapere alcune cose.
|
Prima di tutto i canali UNO ADC hanno un valore di riferimento predefinito di 5V. Ciò significa che possiamo fornire una tensione di ingresso massima di 5 V per la conversione ADC su qualsiasi canale di ingresso. Poiché alcuni sensori forniscono tensioni da 0-2,5 V, con un riferimento di 5 V otteniamo una minore precisione, quindi abbiamo un'istruzione che ci consente di modificare questo valore di riferimento. Quindi per cambiare il valore di riferimento abbiamo (“analogReference ();”) Per ora lo lasciamo come.
Come impostazione predefinita, otteniamo la massima risoluzione dell'ADC della scheda che è 10 bit, questa risoluzione può essere modificata utilizzando l'istruzione ("analogReadResolution (bits);"). Questa modifica alla risoluzione può tornare utile in alcuni casi. Per ora lo lasciamo come.
Ora se le condizioni di cui sopra sono impostate come predefinite, possiamo leggere il valore dall'ADC del canale '0' chiamando direttamente la funzione "analogRead (pin);", qui "pin" rappresenta il pin dove abbiamo collegato il segnale analogico, in questo caso esso sarebbe "A0".
Il valore di ADC può essere preso come intero come “int SENSORVALUE = analogRead (A0); ", Con questa istruzione il valore dopo l'ADC viene memorizzato nell'intero" SENSORVALUE ".
Ora parliamo del SERVO, l'UNO ha una caratteristica che ci permette di controllare la posizione del servo semplicemente fornendo il valore dei gradi. Diciamo che se vogliamo che il servo sia a 30, possiamo rappresentare direttamente il valore nel programma. Il file di intestazione SERVO si occupa internamente di tutti i calcoli del rapporto di servizio.
#includere
Servo servo; servo.attach (3); servo.write (gradi); |
La prima istruzione rappresenta il file di intestazione per il controllo del SERVOMOTORE.
La seconda affermazione sta nominando il servo; lo lasciamo come servo stesso.
La terza istruzione indica dove è collegato il pin del segnale del servo; questo deve essere un pin PWM. Qui stiamo usando PIN3.
La quarta istruzione fornisce i comandi per il posizionamento del servomotore ed è in gradi. Se viene fornito 30, il servomotore ruota di 30 gradi.
Ora l'SG90 può spostarsi da 0-180 gradi, abbiamo risultato ADC 0-1024
Quindi ADC è circa sei volte la POSIZIONE SERVO. Quindi diviso il risultato dell'ADC per 6 otterremo la posizione approssimativa della lancetta SERVO.
Con questo avremo il valore di posizione del servo alimentato al servomotore, che è proporzionale alla flessione o piegatura. Quando questo sensore di flessione è montato sul guanto, possiamo controllare la posizione del servo con il movimento della mano.