Buongiorno,
ho un problema con il sensore di qualità dell'aria Grove Air Quality Sensor V1.3
nel senso che non riesco a leggere i valori rilevati dal sensore in modo corretto, ovvero i valori rilevati sono molto instabili, e quando collego il connettore GND del sensore al GND di arduino, il sistema va in corto circuito.
Il collegamento che ho fatto è il seguente:
il connettore +Vcc del sensore al Pin +5V di Arduino Uno;
il connettore Signal del sensore all'ingresso A0 di Arduinio Uno;
il connettore GND del sensore al PIN GND di Arduino Uno, ed è proprio con questo collegamento che il sistema va in corto circuito. Ho provato anche ad inserire una resistenza da 1 kOhm tra il GND del sensore e il GND di Arduino, il sistema non va più in corto circuito ma i valori rilevati non sono attendibili, da valori di 0 a valori di 900 nel giro di 2 secondi.
Vi chiedo se a qualcuno è capitato lo stesso problema e come avete risolto.
Grazie anticipatamente.
Il progetto è quello di comandare un motore con quattro velocità, tramite 4 relè, a seconda del livello di saturazione dell'aria rilevata dal sensore di qualità dell'aria.
Di seguito lo sketch adoperato:
#include "AirQuality.h"
AirQuality airqualitysensor;
int current_quality =-1;
int relePin2= 2; //relè velocità 1
int relePin3= 3; //relè velocità 2
int relePin4= 4; //relè velocità 3
int relePin5= 5; //relè velocità 4
int ledPin1= 5; //ROSSO VELOCITA' 1
int ledPin2= 6; //ROSSO VELOCITA' 2
int ledPin3= 7; //ROSSO VELOCITA' 3
int ledPin4= 8; //ROSSO VELOCITA' 4
int ledPin5= 9; //VERDE SPENTO
void setup(){
pinMode(relePin2, OUTPUT); //relè velocità 1
pinMode(relePin3, OUTPUT); //relè velocità 2
pinMode(relePin4, OUTPUT); //relè velocità 3
pinMode(relePin5, OUTPUT); //relè velocità 4
pinMode(ledPin1, OUTPUT); //ROSSO VELOCITA' 1
pinMode(ledPin2, OUTPUT); //ROSSO VELOCITA' 2
pinMode(ledPin3, OUTPUT); //ROSSO VELOCITA' 3
pinMode(ledPin4, OUTPUT); //ROSSO VELOCITA' 4
pinMode(ledPin5, OUTPUT); //VERDE SPENTO
Serial.begin(9600);
airqualitysensor.init(14);
}
void loop()
{
current_quality=airqualitysensor.slope();
if (current_quality >= 0)// if a valid data returned.
{
if (current_quality==4)
{
digitalWrite(5,HIGH); //relè velocità 4
digitalWrite(4,LOW); //relè velocità 3
digitalWrite(3,LOW); //relè velocità 2
digitalWrite(2,LOW); //relè velocità 1
digitalWrite(8,HIGH); //led rosso velocità 4
digitalWrite(7,LOW); //led rosso velocità 3
digitalWrite(6,LOW); //led rosso velocità 2
digitalWrite(5,LOW); //led rosso velocità 1
digitalWrite(9,LOW); //led verde
}
if (current_quality==3)
{
digitalWrite(5,LOW); //relè velocità 4
digitalWrite(4,HIGH); //relè velocità 3
digitalWrite(3,LOW); //relè velocità 2
digitalWrite(2,LOW); //relè velocità 1
digitalWrite(8,LOW); //led rosso velocità 4
digitalWrite(7,HIGH); //led rosso velocità 3
digitalWrite(6,LOW); //led rosso velocità 2
digitalWrite(5,LOW); //led rosso velocità 1
digitalWrite(9,LOW); //led verde
}
if (current_quality==2)
{
digitalWrite(5,LOW); //relè velocità 4
digitalWrite(4,LOW); //relè velocità 3
digitalWrite(3,HIGH); //relè velocità 2
digitalWrite(2,LOW); //relè velocità 1
digitalWrite(8,LOW); //led rosso velocità 4
digitalWrite(7,LOW); //led rosso velocità 3
digitalWrite(6,HIGH); //led rosso velocità 2
digitalWrite(5,LOW); //led rosso velocità 1
digitalWrite(9,LOW); //led verde
}
if (current_quality ==1)
{
digitalWrite(5,LOW); //relè velocità 4
digitalWrite(4,LOW); //relè velocità 3
digitalWrite(3,LOW); //relè velocità 2
digitalWrite(2,HIGH); //relè velocità 1
digitalWrite(8,LOW); //led rosso velocità 4
digitalWrite(7,LOW); //led rosso velocità 3
digitalWrite(6,LOW); //led rosso velocità 2
digitalWrite(5,HIGH); //led rosso velocità 1
digitalWrite(9,LOW); //led verde
}
if (current_quality ==0)
{
digitalWrite(5,LOW); //relè velocità 4
digitalWrite(4,LOW); //relè velocità 3
digitalWrite(3,LOW); //relè velocità 2
digitalWrite(2,LOW); //relè velocità 1
digitalWrite(8,LOW); //led rosso velocità 4
digitalWrite(7,LOW); //led rosso velocità 3
digitalWrite(6,LOW); //led rosso velocità 2
digitalWrite(5,LOW); //led rosso velocità 1
digitalWrite(9,HIGH); //led verde
}
}
}
ISR(TIMER2_OVF_vect)
{
if(airqualitysensor.counter==150)//set 30 seconds as a detected duty
{
airqualitysensor.last_vol=airqualitysensor.first_vol;
airqualitysensor.first_vol=analogRead(A0);
airqualitysensor.counter=0;
airqualitysensor.timer_index=1;
PORTB=PORTB^0x20;
}
else
{
airqualitysensor.counter++;
}
}