Salve a tutti,
ho iniziato da poco a lavorare con Arduino UNO.
Il problema lo riscontro al momento dell'acquisizione della posizione. Il sensore infatti dovrebbe restituire contemporaneamente la forza e la posizione in cui è stata applicata.
Quando configuro il sensore solo per acquisire la posizione, il sensore satura alla fine del primo blocco della striscia. Mentre quando lo configuro per leggere contemporaneamente posizione e forza, la posizione satura al valore 1024 sull'intera striscia.
Ho provato a scrivere il codice per l'acquisizione contemporanea di forza e posizione, settandolo come da datasheet.
(ecco il datasheet: https://www.pololu.com/file/0J750/FSLP-Integration-Guide-13.pdf)
Il codice che ho scritto:
#define pin_R0 2
#define pin_SL_T3 A0
#define pin_Alim_Relé 7
#define pin_Analogico A3
#define pin_Digitale 4
#define SERIAL_BAUD_RATE 4800//numero di elementi scambiati durante la comunicazione seriale
#define PER_CYCLE_DELAY 25 //tempo di ritardo per ogni ciclo 25ms
#define TOUCH_THRESH 0.2 //soglia per il tocco
void setup() {
Serial.begin(SERIAL_BAUD_RATE); //inzia la comunicazione arduino-PC
// Step 1 - Scarico la carica dal sensore
pinMode(pin_R0, OUTPUT);
digitalWrite(pin_R0, LOW);
pinMode(pin_SL_T3 , OUTPUT);
digitalWrite(pin_SL_T3 , LOW);
// Step 2 - Set up del Relé
pinMode(pin_Alim_Relé, OUTPUT);
pinMode(pin_SL_T3,INPUT); //perchè devo acquisire il segnale
}
void loop() {
//Acquisisco la posizione
digitalWrite(pin_Alim_Relé, LOW); //decide se collegare D2 a massa o al pin di ingresso
delay(500);
pinMode(pin_Digitale, OUTPUT);
digitalWrite(pin_Digitale, LOW);
pinMode(pin_R0,INPUT);
int posizione = analogRead(pin_SL_T3);
// Acquisisco la forza
digitalWrite(pin_Alim_Relé, HIGH);
delay(500);
pinMode(pin_R0, OUTPUT);
digitalWrite(pin_R0, LOW);
/*** Vado a leggere la forza sul sensore***/
float a = 5;
float b= 1024;
float livello_tensione = a/b;
int V1 = analogRead(pin_Analogico);
int V2 = analogRead(pin_SL_T3);
float V1_ten = livello_tensione*V1;
float V2_ten = livello_tensione*V2;
float force = (2.5*V2_ten)/(V1_ten-V2_ten); //acquisisco la forza in N e non in livelli
if (force>=TOUCH_THRESH){
Serial.print(" Position: ");
Serial.print(posizione);
Serial.print(" Force: ");
Serial.println(force);
}
delay(PER_CYCLE_DELAY);
}
Quale potrebbe essere il problema?
Vi ringrazio per l'attenzione.
In allegato, vi giro uno schema della configurazione del sensore con arduino.
schema_FSLP_10cm.pdf (34.7 KB)