Arduino Forum

International => Italiano => Generale => Topic started by: megaciro on Apr 08, 2019, 09:18 pm

Title: Sensore co2 mh-z14a
Post by: megaciro on Apr 08, 2019, 09:18 pm
Buonasera a tutti
Premetto che sono alle primissime armi... quindi abbiate pietà!
Sto provando a far funzionare questo sensore per rilevare la co2 in una camera, in rete ho trovato degli esempi ma non vanno a buon fine: qualcuno ha qualcosa da darmi su cui posso iniziare?!
Grazie per la disponibilità.
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 08, 2019, 09:26 pm
PS. Sto provando solo con l'uscita per e da valore fisso... devo provare con rx tx? Ho bisogno di un convertitore  di  livello?
Title: Re: Sensore co2 mh-z14a
Post by: maubarzi on Apr 08, 2019, 10:00 pm
Ciao,
in qualità di temporaneo e parziale sostituto, senza portafoglio, del "Sommo moderatore" che si è concesso un po' di svago e di pazza gioia ;)

come prima cosa ti do il benvenuto e poi ti devo chiedere di espletare una piccola formalità che aiuterà tutti i volenterosi che vorranno rispondere al tuo quesito, di farlo nel migliore dei modi.

Lo faccio citando le sue parole:
Quote
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (http://forum.arduino.cc/index.php?topic=113640.0) (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO (http://forum.arduino.cc/index.php?topic=149082.0) ... Grazie. :)
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 08, 2019, 10:27 pm
Ciao,
in qualità di temporaneo e parziale sostituto, senza portafoglio, del "Sommo moderatore" che si è concesso un po' di svago e di pazza gioia ;)

come prima cosa ti do il benvenuto e poi ti devo chiedere di espletare una piccola formalità che aiuterà tutti i volenterosi che vorranno rispondere al tuo quesito, di farlo nel migliore dei modi.

Lo faccio citando le sue parole:
Carissimo ti ringrazio dell'attenzione,  sono felice per il moderatore, già ho provveduto oggi a fare la presentazione ed ho letto come funziona il foro.
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 08, 2019, 10:37 pm
Ho dato uno sguardo  alle presentazioni ed effettivamente  il mio post  non  c'è... provvederò immediatamente
Title: Re: Sensore co2 mh-z14a
Post by: maubarzi on Apr 08, 2019, 11:19 pm
Grazie, in questo modo aiuti chi ti risponderà a tarare la risposta in modo da renderla a te più comprensibile e magari anche più mirata.
Io non ho ancora mai lavorato con questo tipo di sensori per cui lascio la parola a chi ha più esperienza.
Title: Re: Sensore co2 mh-z14a
Post by: uwefed on Apr 09, 2019, 01:09 am
Dacci il link al sensore che usi.

L' aria ambientale contiene ca 0,04% di CO2. L' aria espirata fino a 5%.

Normalmente l' ambienti non sono cosí stagni da riuscire a modificare la composizione dell aria in modo significativo.

Ciao Uwe
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 09, 2019, 07:50 am
Dacci il link al sensore che usi.

L' aria ambientale contiene ca 0,04% di CO2. L' aria espirata fino a 5%.

Normalmente l' ambienti non sono cosí stagni da riuscire a modificare la composizione dell aria in modo significativo.

Ciao Uwe
Buongiorno  Uwe e grazie per l'interesse,


https://www.google.com/url?sa=t&source=web&rct=j&url=https://www.winsen-sensor.com/d/files/infrared-gas-sensor/mh-z14a_co2-manual-v1_01.pdf&ved=2ahUKEwjCvrGcp8LhAhVH_qQKHeFkAfkQFjACegQIARAB&usg=AOvVaw19oUenpu0oefN36FwU7n_L


Questo  dovrebbe essere il link della scheda del sensore.
Scusa per il disagio
Title: Re: Sensore co2 mh-z14a
Post by: maubarzi on Apr 09, 2019, 08:53 am
Hai già provato questo (https://github.com/empierre/arduino/blob/master/AirQuality-CO2-MH-Z14.ino) esempio? Quì (https://forum.mysensors.org/topic/4355/mh-z14a-co2-sensor/6) una spiegazione più dettagliata dei collegamenti.
Quì (http://www.doctormonk.com/2018/03/review-and-test-of-mh-z14a-ndir-co2.html) invece non usano una libreria specifica e nemmeno quì (http://domoticx.com/arduino-co2-sensor-mh-z14/).
Quì (https://www.arduinolibraries.info/libraries/mh-z-co2-sensors) una libreria differente.
Io non ho mai usato questo sensore, ma da qualche parte si deve pur partire.
Domande generiche chiamano risposte generiche, magari se ci si concentra su un esempio e/o una libreria specifica, qualcosa se ne cava fuori.
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 09, 2019, 10:55 am
Grazie maubarzi,  appena rientro ti faccio vedere quali esempi e librerie ho usato. Nel frattempo proverò le prime che mi hai linkato,  le ultime già fatte.
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on Apr 09, 2019, 04:11 pm
Normalmente l' ambienti non sono cosí stagni da riuscire a modificare la composizione dell aria in modo significativo.
In ambienti con finestre chiuse (quelle moderne con guarnizioni) e persone dentro si arriva facilmente a 800ppm ed oltre. Musure effettuate da me sia con sensori come questo che con quelli un po' più costosi. Capita anche se le finestre non sono proprio stagne ma ci sono molte persone. Basta aprire la finestra per ritornare a valori normali. Non me lo aspettavo, anche io credevo che fosse difficile alterare la composizione dell'aria in questo modo.


@megaciro,
non ho quel sensore ma ha una uscita seriale. Ti basta catturare quella.
https://www.openhacks.com/uploadsproductos/mh-z14_co2.pdf (https://www.openhacks.com/uploadsproductos/mh-z14_co2.pdf)
Sembra che la seriale vada a 3.3V per cui ci vuole un convertitore o una scheda che vada a 3.3V

Questo sensore deve essere ricalibrato in aria libera (a 400 ppm) frequentemente per avere valori che abbiano un significato perché non ha la cella di calibrazione interna. Per questo costa poco.
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 09, 2019, 11:20 pm
@megaciro,
non ho quel sensore ma ha una uscita seriale. Ti basta catturare quella.
https://www.openhacks.com/uploadsproductos/mh-z14_co2.pdf (https://www.openhacks.com/uploadsproductos/mh-z14_co2.pdf)
Sembra che la seriale vada a 3.3V per cui ci vuole un convertitore o una scheda che vada a 3.3V

Questo sensore deve essere ricalibrato in aria libera (a 400 ppm) frequentemente per avere valori che abbiano un significato perché non ha la cella di calibrazione interna. Per questo costa poco.
Grazie carissimo, mi hai anticipato... vedevo che tanti progetti trovati usano rx e tx, ma collegati direttamente a rx e tx  Arduino  che danno e ricevono  5v mentre il sensore vuole 3.3v. Quindi prendo un convertitore  logico e riprovo.
La libreria Mysenor anche se scaricata con i canali dell' IDe non viene riconosciuta...qualcuno  sa dirmi come mai?
Title: Re: Sensore co2 mh-z14a
Post by: maubarzi on Apr 10, 2019, 09:29 am
La libreria Mysenor anche se scaricata con i canali dell' IDe non viene riconosciuta...qualcuno  sa dirmi come mai?
Forse ha qualche dipendenza aggiuntiva da installare, che errori da?
Sui messaggi di errore, in genere, dice anche il motivo.
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on Apr 10, 2019, 10:37 am
Puoi usare benissino una seriale software, visto che la comunicazione è a 9600, e lasciare quella hardware per il debug.
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 10, 2019, 12:21 pm
Forse ha qualche dipendenza aggiuntiva da installare, che errori da?
Sui messaggi di errore, in genere, dice anche il motivo.
Stasera se rientro in tempo riprovo e ti faccio sapere..
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 10, 2019, 12:26 pm
Puoi usare benissino una seriale software, visto che la comunicazione è a 9600, e lasciare quella hardware per il debug.
Grazie carissimo per l'aiuto,  potresti farmi un esempio in modo da capire... scusa la ciucciaggine..
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on Apr 10, 2019, 12:48 pm
Basta guardare l'esempio SoftwareSerialExample cambiando 
Code: [Select]
mySerial.begin(4800);
in
Code: [Select]
mySerial.begin(9600);

Puoi anche cambiare
Code: [Select]
Serial.begin(57600);
a seconda delle tue esigenze.

I pin da usare nell'esempio sono 10 per RX e 11 per TX che andranno collegati rispettivamente ai pin TX e RX del modulo CO2 (RX e TX vanno incrociati).

L'esempio non fa altro che prendere ciò che arriva da una seriale e stamparlo sull'altra. Si usa esattamente come serial con alcune limitazioni descritte qui
https://www.arduino.cc/en/Reference/softwareSerial (https://www.arduino.cc/en/Reference/softwareSerial)
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 10, 2019, 02:07 pm
I pin da usare nell'esempio sono 10 per RX e 11 per TX che andranno collegati rispettivamente ai pin TX e RX del modulo CO2
Sempre tramite convertitore logico? Il sensore accetta 3.3v
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on Apr 10, 2019, 02:41 pm
Si, a meno che usi una scheda a 3.3V.
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 10, 2019, 09:35 pm
Mi sono accorto mentre testavo diversi codici anche suggeriti  da  voi che il sensore di co2 ha qualcosa che non va... si surriscalda e fa andare in blocco sia Arduino che il modulo di alimentazione...
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on Apr 11, 2019, 08:23 am
Succede anche se lo alimenti e basta? non è che hai sbagliato piedini di alimentazione? Oppure la tensione è superiore ai 5V?
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 11, 2019, 10:41 am
Succede anche se lo alimenti e basta? non è che hai sbagliato piedini di alimentazione? Oppure la tensione è superiore ai 5V?
Anche se lo alimento solo...ho provato da Arduino e con alimentatore esterno tramite modulo.. adesso mi sono arrivati i commutatore logici per tx rx...
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 12, 2019, 08:01 pm
ho restituito il sensore mh-z14 ed ho ordinato mh-z19.
appena arriva procediamo.
grazie
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 13, 2019, 10:47 pm
Code: [Select]

#include <LiquidCrystal.h> //LIBRERIA PER UTILIZZO LCD
#define BACKLIGHT 10 //PIN DIGITALE PER CONTROLLO RETROILLUMINAZIONE
 
int BUTTON; //VARIABILE DI GESTIONE DEI PULSANTI
int CLICK; //VARIABILE DI GESTIONE DEI PULSANTI
unsigned long STARTINGTIMELCD; //GESTIONE TIMEOUT LCD
const unsigned long TIMEOUTLCD = 2000; //GESTIONE TIMEOUT LCD (2000Ms = 2 Sec)
 
// INIZIALIZZO LA LIBRERIA CON I RELATIVI PIN
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
 
void setup() {
  //---------------------------------------------------------------
  // IMPOSTAZIONI DI STARTUP DEL KEYPAD LCD
  //---------------------------------------------------------------
  pinMode(BACKLIGHT, OUTPUT);//SET DEL PIN DELLA RETRIULLUMINAZIONE
  digitalWrite(BACKLIGHT, LOW); //SPENGO RETROILLUMINAZIONE
  lcd.begin(16, 2);//INIZIALIZZO LCD, 16 (DA 0 A 15) CARATTERI PER 2 RIGHE (0 e 1)
  lcd.setCursor(0, 0);//MI POSIZIONE SUL DISPLAY
  lcd.print("mistaloba");//SCRIVO UN MESSAGGIO
  lcd.noDisplay(); //SPENGO LCD
}
 
void loop() {
  //---------------------------------------------------------------
  //GESTIONE TIMEOUT: DOPO 2 SECONDI DALL' ACCENSIONE SPENGO LCD
  //---------------------------------------------------------------
  if ((millis() - STARTINGTIMELCD) > TIMEOUTLCD) {
    digitalWrite(BACKLIGHT, LOW); //SPENGO LA RETROILLUMINAZIONE
    lcd.noDisplay(); //SPENGO LCD
  }
 
  //---------------------------------------------------------------
  //GESTIONE AZIONI A SEGUITO PRESSIONE DEI PULSANTI
  //---------------------------------------------------------------
  BUTTON = ctrlButton(CLICK); //ASSEGNO ALLA VARIABILE BUTTON IL VALORE PASSATO DALLA ROUTINE
  lcd.setCursor(0, 1); //INDICO DI INIZIARE A SCRIVERE AL CARATTERE 0 DELLA RIGA 1
 
  if (BUTTON != 0) {//VERIFICO SE E' STATO PREMUTO UN PULSANTE
    STARTINGTIMELCD = millis(); //IMPOSTO IL CLOCK PER IL TIMEOUT
  }
  switch (BUTTON) {
    case 1:
      lcd.print("HAI PREMUTO Dx  ");//SCRIVO SU LCD
      break;
    case 2:
      lcd.print("HAI PREMUTO Su  ");//SCRIVO SU LCD
      break;
    case 3:
      lcd.print("HAI PREMUTO Giu' ");//SCRIVO SU LCD
      break;
    case 4:
      lcd.print("HAI PREMUTO Sx  ");//SCRIVO SU LCD
      break;
    case 5:
      lcd.print("HAI PREMUTO Slct");//SCRIVO SU LCD
      break;
  }
 
  //---------------------------------------------------------------
  //SE E' STATO PREMUTO UN PULSANTE ACCENDO RETROILLUMINZIONE E LCD
  //---------------------------------------------------------------
  if (BUTTON != 0) { //VERIFICO SE E' STATO PREMUTO UN PULSANTE
    digitalWrite(BACKLIGHT, HIGH); //ACCENDO LA RETROILLUMINAZIONE
    lcd.display();//ACCENDO LCD
    STARTINGTIMELCD = millis(); //INIZIO TIMEOUT PER RETROILLUMINAZIONE
  }
}
//---------------------------------------------------------------
// ROUTINE DI CONTROLLO PRESSIONE PULSANTI
//---------------------------------------------------------------
int ctrlButton(int CLICK) {
  int x;
  x = analogRead (0); //leggo il valore del pin analogico 0
  if (x < 60) {
    return 1;
  }
  else if (x < 200) {
    return 2;
  }
  else if (x < 400) {
    return 3;
  }
  else if (x < 600) {
    return 4;
  }
  else if (x < 800) {
    return 5;
  }
  return 0;
}

salve ragazzi, nel frattempo che arrivi il sensore di co2 stravo giocherellando con lcd keypad.
questo è il codice iniziale con cui sto sperimentando le varie funzioni. la mia domanda è questa:come faccio ad assegnare un comando ad un pulsante?
mi spiego: voglio comandare la retro illuminazione del display con un pulsante, andando nei vari case ed aggiungendo il comando digitalwrite riesco a farlo, ma se volessi farlo in pwm con analogwrite? come riesco a richiamare quel pulsante?
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on Apr 15, 2019, 09:08 am
Immagino che tu voglia controllare il livello di retroilluminazione.

In questo caso avrai una variabile, diciamo Level, intera ad 8 bit senza segno.
uint8_t Level;
Quindi scegli due pulsanti e la loro unica azione sarà incrementare o decrementare la variabile.
Nel loop invece assegnerai continuamente il valore con analogWrite.

Tieni conto che ancora non ho preso un caffè!
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 23, 2019, 07:15 pm
salve a tutti, mi è arrivato il sensore co2 mh-z19b.

ho iniziato con questo... ma mi da valori inverosimili..

Code: [Select]

#include "MHZ.h"

// pin for uart reading
#define CO2_IN 10

// pin for pwm reading
#define MH_Z19_RX A0  // D7
#define MH_Z19_TX  A1 // D6

MHZ co2(MH_Z19_RX, MH_Z19_TX, CO2_IN, MHZ19B);

void setup() {
  Serial.begin(9600);
  pinMode(CO2_IN, INPUT);
  delay(100);
  Serial.println("MHZ 19B");

  // enable debug to get addition information
   co2.setDebug(true);

 
}

void loop() {
  Serial.print("\n----- Time from start: ");
  Serial.print(millis() / 1000);
  Serial.println(" s");

  int ppm_uart = co2.readCO2UART();
  if (ppm_uart > 0) {
    Serial.print("PPMuart: ");
    Serial.print(ppm_uart);
  }

  int ppm_pwm = co2.readCO2PWM();
  Serial.print(", PPMpwm: ");
  Serial.print(ppm_pwm);

  int temperature = co2.getLastTemperature();
  if (temperature > 0) {
    Serial.print(", Temperature: ");
    Serial.println(temperature);
  }

  Serial.println("\n------------------------------");
  delay(5000);
}
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 23, 2019, 07:27 pm
poi ho provato questo
Code: [Select]

void setup() {
  Serial.begin(9600);
  // initialize the sensor pin as an input
  pinMode(sensorPin, INPUT);
  // Read starting value for millis... (just some value)
while(digitalRead(sensorPin) == LOW) {;}
  hoog = millis();
}
 
void loop(){
  // Check for high and low timing - low time * 2 = PPM
  while(digitalRead(sensorPin) == HIGH) {;}
  laag = millis();
  hoogTijd = laag - hoog;
  
  while(digitalRead(sensorPin) == LOW) {;}
  hoog = millis();
  laagTijd = hoog - laag;
 
  // Validity check high+low = 1004 (small margin or error allowed -> 990)
  if(laagTijd + hoogTijd > 990)
  {
    Serial.print("H: ");
    Serial.println(hoogTijd,DEC);
    Serial.print("L: ");
    Serial.println(laagTijd,DEC);
    Serial.print("CO2  -  ");
    Serial.print(laagTijd * 2,DEC);
    Serial.println(" ppm");    
  } else {
    // Output in case of invalid check: value instead of 1004 ms
    Serial.print("-- CK:");
    Serial.println(laagTijd+hoogTijd, DEC);
  }
}


ancora peggio...
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 23, 2019, 08:55 pm
sarò io difettoso.... o sfortunato con i sensori...
ho provato con questo codice che è la base..
Code: [Select]
#include <SoftwareSerial.h>

#define MH_Z19_RX 7
#define MH_Z19_TX 6

SoftwareSerial sensorSerial(MH_Z19_RX, MH_Z19_TX);

void setup() {
  Serial.begin(9600);
  sensorSerial.begin(9600);

  Serial.println("Welcome to Hello MH-Z19 CO2 reading application.");
}

void loop() {
  Serial.println(readCO2());
  delay(1000);
}

int readCO2() {

  byte cmd[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};

  byte response[9];

  sensorSerial.write(cmd, 9);
  sensorSerial.readBytes(response, 9);

//  for (int i = 0; i < 9; i++) {
//    Serial.print(response[i], HEX);
//  }
// 
 
  if (response[0] != 0xFF) {
    Serial.print("Wrong starting byte from co2 sensor, got: ");   
    Serial.println(response[0], HEX);
    return -1;
  }

  if (response[1] != 0x86) {
    Serial.println("Wrong command from co2 sensor!");
    return -1;
  }

  int responseHigh = (int) response[2];
  int responseLow = (int) response[3];
  int ppm = (256 * responseHigh) + responseLow;
  return ppm;
}

la risposta è:

-1
Wrong command from co2 sensor!
-1
Wrong command from co2 sensor!
-1
Wrong command from co2 sensor!
-1
Wrong command from co2 sensor!
-1
Wrong command from co2 sensor!
-1
Wrong command from co2 sensor!
-1
Wrong command from co2 sensor!
-1
Wrong command from co2 sensor!
-1
 


non so più che fare... :'(  :'(  :'(  :'(  :'(  :'(
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on Apr 24, 2019, 08:13 pm
Il primo sketch usa una libreria che non conosco.
Il secondo credo che cerchi di interpretare il segnale PWM che questo sensore emette su un piedino.
Il terzo scrive direttamente il comando sulla seriale.
Leggendo il PDF
https://www.winsen-sensor.com/d/files/infrared-gas-sensor/mh-z19b-co2-ver1_0.pdf (https://www.winsen-sensor.com/d/files/infrared-gas-sensor/mh-z19b-co2-ver1_0.pdf)

leggo che il comando per avere la concentrazione è prorio quello usato.

Magari prova a decommentare le righe
Code: [Select]
//  for (int i = 0; i < 9; i++) {
//    Serial.print(response[i], HEX);
//  }
//

e vedi cosa effettivamente risponde il sensore. Già sappiamo che il primo byte della risposta è FF altrimenti avremmo un errore diverso ma sospetto che possano essere tutti FF.


Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 25, 2019, 12:48 pm
amici,
ho risolto... il difetto era dovuto ad un errore di collegamento... non avevo messo in comune i gnd di arduino, sensore, modulo di alimentazione.
me asino ahahahah
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on Apr 25, 2019, 10:33 pm
 :o Meno male!
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 27, 2019, 12:15 am
amicissimi, di seguito trovate il codice con cui sto giocando; date un occhiata alla parte dei comandi affidati ai pulsanti perchè anche se funzionano non sono reattivi, cioe il set poin varia ma devo tenere premuto, stessa cosa la retroilluminazione; pensavo ad un antirimbalzo ma come si fa con un lcd keypad?
Code: [Select]
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>

#define pwmPin 11// pin pwm sensore



SoftwareSerial mySerial(A2, A1); // RX, TX

LiquidCrystal lcd(8, 9, 4, 5, 6,7);


byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
unsigned char response[9];
unsigned long th, tl,ppm, ppm2, ppm3 = 0;
const int RELAY=12; //Lock Relay or motor


int SetPoint=1000;
int luce=10;//luce display
int analogPin = A0;// pin dei pulsanti


int lcd_key     = 0;
int adc_key_in  = 0;

#define dx  0
#define su   1
#define giu   2
#define sx   3
#define SELECT 4
#define btnNONE   5


int read_buttons() {
 
 int adc_key_in = analogRead(0);
 
 if (adc_key_in > 1000) return btnNONE;
 if (adc_key_in < 50)   return dx; 
 if (adc_key_in < 195)  return su;
 if (adc_key_in < 380)  return giu;
 if (adc_key_in < 555)  return sx;
 if (adc_key_in < 790)  return SELECT;   
}






void setup() {

  lcd.begin(16,2);
  Serial.begin(9600);
  mySerial.begin(9600);
  pinMode(pwmPin, INPUT);
  pinMode(luce,OUTPUT);
  pinMode(RELAY,OUTPUT);
  //digitalWrite(su,HIGH);
  //digitalWrite(giu,HIGH);
 
  digitalWrite(RELAY,LOW);   
 
}

void loop() {


  mySerial.write(cmd,9);
  mySerial.readBytes(response, 9);
  unsigned int responseHigh = (unsigned int) response[2];
  unsigned int responseLow = (unsigned int) response[3];
  ppm = (256*responseHigh)+responseLow;


  //CO2 via pwm
  do {
    th = pulseIn(pwmPin, HIGH, 1004000) / 1000;
    tl = 1004 - th;
    ppm2 = 2000 * (th-2)/(th+tl-4);
    ppm3 = 5000 * (th-2)/(th+tl-4);
  } while (th == 0);

 
  lcd.setCursor(0,0);
  lcd.print("CO2:");    //Do not display entered keys
  lcd.print(ppm);
 
  int buttons = read_buttons();

  if(buttons==giu)
 
  {
    if(SetPoint>0)
    {
      SetPoint--;   
    }
  }
  if(buttons==su)
  {
    if(SetPoint<2000)
    {
      SetPoint++;
    }
  }
 
//Display Set point on LCD
  lcd.setCursor(0,1);
  lcd.print("Set Point:");
  lcd.print(SetPoint);
  lcd.print("ppm   ");
 
 
 
 
  if(ppm > SetPoint) digitalWrite(RELAY,LOW);    //Turn off heat


     

else digitalWrite(RELAY,HIGH);    //Turn on heater
   

 
 
 
 
 
 
 
 
 
  Serial.println(ppm);

 
  Serial.println(th);
  Serial.println(ppm2);
  Serial.println(ppm3);
 
 
 if(buttons == dx)   digitalWrite(luce,LOW);
 


 
 else if(buttons == sx)  digitalWrite(luce,HIGH);
 
   
 

delay(100); //Update at every 100mSeconds

 
}


 


 ;)
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on Apr 27, 2019, 11:26 am
Per quello shield ci sono delle librerie apposite che gestiscono anche la pulsanteria.
Puoi usarle oppure vedere come agiscono.
Ad esempio
https://github.com/dzindra/LCDKeypad (https://github.com/dzindra/LCDKeypad)
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 27, 2019, 03:30 pm
ho provato ad inserire questo:
Code: [Select]
int buttons = read_buttons();
  if (buttons != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer than the debounce
    // delay, so take it as the actual current state:

    // if the button state has changed:
    lastButtonState=buttons;

ma è peggio...
devo tenere premuto a lungo per far variare il valore.... come se ci fosse un ritardo alla lettura del pulsante o un ritardo ad eseguire il comando dopo aver premuto il pulsante....
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 27, 2019, 04:12 pm
ho provato ad inserire un pulsante estero per comandare il set point, giusto per capire se fosse il lcd keypad a rompere ... ma fa lo stesso: a momente devo tenerlo premuto per 3 secondi prica che il valore cambi...
cosa può essere??
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 27, 2019, 10:56 pm
ho provato anche questo codice
Code: [Select]

int button;   // Declares a fresh button variable
button = evaluateButton(readKey);

readKey = analogRead(0);            // Reads the analog signal from A0 and saves it to readKey
//if (readKey < 790) {                // If the signal drops below 790 that means a button was
                                    // pressed. The if statement delays the program for 100 microseconds
                                    // to debounce the button press and let voltage stabilize
  //delay(10);
  //readKey = analogRead(0);          // Once the voltage has stabilized read the signal again
//}
switch (button) {
      case 4:  // When button returns as 0
       digitalWrite(luce,LOW);
       
        break;
      case 1:  // When button returns as 1
        digitalWrite(luce,HIGH);
        break;     
      case 2:  // When button returns as 2
         if(SetPoint<2000){
      SetPoint++;}
       
        break;
      case 3:  // When button returns as 3
   if(SetPoint>0) {
      SetPoint--; };
       
        break;
 


funziona, come gli altri, ma il valore cambia dopo circa 1 secondo che ho premuto il pulsante.. :smiley-confuse:  :smiley-confuse:  :smiley-confuse:  :smiley-confuse:
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 28, 2019, 12:21 am
tutti i codici prova che inserisco sono reattivi, provo a modificarli mettendo quello che mi serve e ridiventa lento...
Title: Re: Sensore co2 mh-z14a
Post by: Standardoil on Apr 28, 2019, 08:16 am
hai guardato sul datasheet del sensore quando tempo richiede una lettura?
che lettura fai in pwm?
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 28, 2019, 11:14 am
hai guardato sul datasheet del sensore quando tempo richiede una lettura?
che lettura fai in pwm?

Buongiorno  carissimo, grazie per l'interesse,  la lettura  la faccio sia in pwm che uart.
Dici che in pwm richiede più tempo per fare il calcolo perciò risponde piano... provo a togliere dal codice.
Title: Re: Sensore co2 mh-z14a
Post by: maubarzi on Apr 28, 2019, 04:51 pm
come si fa una lettura in pwm?
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Apr 28, 2019, 08:04 pm
carissimi compagni di codice è con immenso piacere e smisurata soddisfazione che vi comunico l'esito positivo!!!
ebbene si tutto funziona come si deve!!
grazie al buon Standardoil che mi ha illuminato!!
hai guardato sul datasheet del sensore quando tempo richiede una lettura?
che lettura fai in pwm?

come si fa una lettura in pwm?
carissimo mauro nei codici che ho inoltrato trovi la lettura con pwm...
cmq è questa:
Code: [Select]
//CO2 via pwm
  do {
    th = pulseIn(pwmPin, HIGH, 1004000) / 1000;
    tl = 1004 - th;
    ppm2 = 2000 * (th-2)/(th+tl-4);
    ppm3 = 5000 * (th-2)/(th+tl-4);
  } while (th == 0);
Title: Re: Sensore co2 mh-z14a
Post by: maubarzi on Apr 29, 2019, 11:32 am
denghio (alla Biscardi) ;)
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 01, 2019, 06:09 pm
Code: [Select]


String Str1[]={"ON"};
String Str2[]= {"OFF"};


statorele=digitalRead(RELAY);
if(statorele==1)statorele=Str1;
else statorele=Str2;

   lcd.print (" Stato Rele"); lcd.print("   "); lcd.print(statorele);lcd.print("  ");




ho riassunto un pochino il codice...
volevo chiedere come mai sul dispay lcd mi compare il numero anziche la scritta in base allo stato del relè??
ho provato pure con char...
Title: Re: Sensore co2 mh-z14a
Post by: Standardoil on May 01, 2019, 06:23 pm
non mi è chiaro come faccia ad andare, una cosa del genere
hai cgreato due variabili puntatore a stringa, inizializzato in una maniera fantasiosa, ma fantasiosa forte
ammenocche' non siano due array di Stringa, con un solo elemento, inizializzati a stringa costante
e le usi per assegnarle a una variabile che non sappiamo di che tipo sia, ma presumo bool o int
due domande:
ma compila, sta roba?
intendo sul serio, guarda bene cosa ti dice in compilazione, che magari imparo qualcosa di nuovo
comunque se compilasse e statorele fosse boolean forse qualcosa avviene, nel senso che Str1 ed Str2 sono nomi di array, quindi puntatori, che se non NULL, ovvero sono validi, vengono interpretati come true
quindi assegnano 1 alla variabile
dovrebbe uscirti sempre scritto "StatoRele   1"
ti torna?
metti il codcie completo, dai
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 01, 2019, 06:29 pm
dovrebbe uscirti sempre scritto "StatoRele   1"
ti torna?
questo mi tornava... ma poi invece di leggere 1 volevo leggere on..

non mi è chiaro come faccia ad andare, una cosa del genere
hai cgreato due variabili puntatore a stringa, inizializzato in una maniera fantasiosa, ma fantasiosa forte
ammenocche' non siano due array di Stringa, con un solo elemento, inizializzati a stringa costante
e le usi per assegnarle a una variabile che non sappiamo di che tipo sia, ma presumo bool o int
due domande:
ma compila, sta roba?
intendo sul serio, guarda bene cosa ti dice in compilazione, che magari imparo qualcosa di nuovo
comunque se compilasse e statorele fosse boolean forse qualcosa avviene, nel senso che Str1 ed Str2 sono nomi di array, quindi puntatori, che se non NULL, ovvero sono validi, vengono interpretati come true

avevo scritto che era un riassunto..

metti il codcie completo, dai
eccolo
Code: [Select]
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>

#define pwmPin 11// pin pwm sensore



SoftwareSerial mySerial(A2, A1); // RX, TX

LiquidCrystal lcd(8, 9, 4, 5, 6,7);
byte schermatainiziale = 0;



byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
unsigned char response[9];
unsigned long th, tl,ppm, ppm2, ppm3 = 0;
const int RELAY=12; //Lock Relay or motor

const int pulsante = 13 ;
int buttonState= LOW;            // the current reading from the input pin
int lastButtonState = 0;   // the previous reading from the input pin

boolean RS1 = false;
boolean RS2 = false;
boolean RSok = false;

long previousMillis = 0;
long interval = 6000;

unsigned long mymillis;
unsigned long lastDebounceTime = 0;  // the last time the output pin was toggled
unsigned long debounceDelay = 30;    // the debounce time; increase if the output flickers


int SetPoint=1000;
int luce=10;//luce display
int analogPin = A0;// pin dei pulsanti


int statorele     = 0;
int adc_key_in  = 0;

#define dx      0
#define su      1
#define giu     2
#define sx      3
#define SELECT  4
#define btnNONE 5
int val = 1;

int read_buttons() {
 
 int adc_key_in = analogRead(0);
 
 if (adc_key_in > 1000) return btnNONE;
 if (adc_key_in < 50)   return dx; 
 if (adc_key_in < 195)  return su;
 if (adc_key_in < 380)  return giu;
 if (adc_key_in < 555)  return sx;
 if (adc_key_in < 790)  return SELECT;   
}
char on[]= "ON" ;
char off[]= "OFF";


void setup() {
 Serial.begin(9600);

 

  // Initializes and clears the LCD screen
  lcd.begin(16, 2);
  lcd.clear();

  mySerial.begin(9600);
 
  pinMode(pwmPin, INPUT);
  pinMode(luce,OUTPUT);
  pinMode(RELAY,OUTPUT);
  pinMode (pulsante,INPUT);
 
  //digitalWrite(su,LOW);
  //digitalWrite(giu,LOW);
digitalWrite(RELAY,LOW);   
digitalWrite(luce,HIGH);

lcd.clear();
lcd.setCursor (0,0);
lcd.print( "CONTROLLORE CO2");
lcd.setCursor(0,1) ;
lcd.print( "CIRO MATACENA" );

delay(1000);

lcd.clear();
lcd.setCursor(0,0);
lcd.print("PRERISCALDAMENTO");
lcd.setCursor(0,1) ;
lcd.print( "SENSORE CO2");

delay(1000);
lcd.clear();

}


void loop() {
if (millis() - previousMillis > 30000 & schermatainiziale == 0) {lcd.clear(); lcd.home(); schermatainiziale = 1;}
statorele=digitalRead(RELAY);
if(statorele==1)statorele=on;
else statorele=off;

 
 
 
 
 
 if (millis()- previousMillis < interval){
  lcd.setCursor(0,0);
  lcd.print(" Inizializzazione "); // viene eseguita una sola volta
  lcd.setCursor(1,2);
  lcd.print("Elapse Time : ");
  lcd.print(millis()/1000.0);
 
  RS1 = true; // Suggerimento Orso2001 indispensabile per la commutazione
  delay(2000);
  }
 
lcd.setCursor(0,0);
lcd.print("CO2:");
lcd.print(ppm  );lcd.print(" ");
lcd.print("ppm");
lcd.setCursor(0,1);
lcd.print("SetPoint:");
lcd.print(SetPoint);
lcd.print("ppm   ");
  //**deve entrare in loop da questo punto commutando 2 e 3 schermata senza interferire a livello di delay
  //con la lettura di vari sensori presenti nel programma esteso, codice omesso per brevità.
 
  if (millis()- previousMillis >interval) {
   
     

  if (RS1 == true && RSok == false) {
    //disegna seconda schermata
     lcd.setCursor(0,1);
     lcd.print (" Stato Rele"); lcd.print("   "); lcd.print(statorele);lcd.print("  ");
delay(2000);
 
    RSok = true;
    mymillis = millis();
  }
 if (RS2 == true && RSok == false) {
    //disegna terza schermata
   

   
    RSok = true;
    mymillis = millis();
  } 
  if (millis() - mymillis >= 8000) { //ogni 4 secondi eseguo....
    RS1 = !RS1;
    RS2 = !RS2;
    RSok = false;
    }
}



 
 int buttons = read_buttons();
// buttonState= digitalRead(pulsante);

 /*if(Serial.available()){
    char comando = Serial.read();

   if(comando == 'a'){
      digitalWrite(RELAY, HIGH);
     Serial.println("LED acceso");
    }
    else if(comando == 's'){
      digitalWrite(RELAY, LOW);
      Serial.println("LED spento");
    }
    else{
   Serial.println("Comando non riconosciuto");
    }
 
  //delay(10);
}
/*

 /*if (buttons != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer than the debounce
    // delay, so take it as the actual current state:

    // if the button state has changed:
    lastButtonState=buttons;

    }*/
  mySerial.write(cmd,9);
  mySerial.readBytes(response, 9);
  unsigned int responseHigh = (unsigned int) response[2];
  unsigned int responseLow = (unsigned int) response[3];
  ppm = (256*responseHigh)+responseLow;


  //CO2 via pwm
//do {
  //  th = pulseIn(pwmPin, HIGH, 1004000) / 1000;
 //   tl = 1004 - th;
 //   ppm2 = 2000 * (th-2)/(th+tl-4);
  //  ppm3 = 5000 * (th-2)/(th+tl-4);
//  } while (th == 0);

 
 
 
 
 
if(ppm > SetPoint){
   digitalWrite(RELAY,LOW);
    }
else digitalWrite(RELAY,HIGH);    //Turn on heater
   

 
   
 
  if(buttons==giu)
  //if(buttonState==HIGH)
  {
    if(SetPoint>0)
    {
      SetPoint--;   
    }
  }
  if(buttons==su)
  {
    if(SetPoint<2000)
    {
      SetPoint= SetPoint+val;
    }
  }
 
 
 
 
 
 
 
 
  Serial.println(ppm);

 
  Serial.println(th);
  Serial.println(ppm2);
  Serial.println(ppm3);
 
 
 if(buttons == dx)   digitalWrite(luce,LOW);
 


 
 else if(buttons == sx)  digitalWrite(luce,HIGH);
 
   
 

delay(100); //Update at every 100mSeconds

 
}


 

 
Title: Re: Sensore co2 mh-z14a
Post by: Standardoil on May 01, 2019, 06:34 pm
Sì, ok lo sapevo che era un estratto, ma mi serviva per vedere un po' un'occhiata generale

ma fare una formattazione automatica ogni tanto no, non si fa?
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 01, 2019, 06:35 pm
ok!!!! attendo tue novelle ;)  ;)  ;)  ;)  ;)
Title: Re: Sensore co2 mh-z14a
Post by: Standardoil on May 01, 2019, 06:42 pm
Scrivo qui libero,mano a mano che vedo, porta pazienza, la soluzione arriverà quando ci arriverò
Code: [Select]

    statorele = digitalRead(RELAY);

    if (statorele == 1)statorele = on;
    else statorele = off;


cosa vuol dire?
statorele è int, e vale l'uscita della digitalread, che è già o zero o uno, non ti serve farti una pippa cogitativa come questa
così va bene da solo
Code: [Select]

    statorele = digitalRead(RELAY);


che strano, non vedo il pezzo di programma che avevi postato prima, sicuro di non aver fatto confusione con i programmi?


per i più esperti di me
non ho con me la fida UNO, non posso provare, che cosa significa che on ed off sono evidenziate dallo IDE?
non sono parole riservate del 'C', non sono in maiuscolo quindi non sono macro
il reference non ne parla, che cosa sono? della macro "timide" (nel senso che arrossiscono da sole) per 1 e 0?
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 01, 2019, 06:54 pm
Scrivo qui libero,mano a mano che vedo, porta pazienza, la soluzione arriverà quando ci arriverò
Code: [Select]

    statorele = digitalRead(RELAY);

    if (statorele == 1)statorele = on;
    else statorele = off;


cosa vuol dire?
statorele è int, e vale l'uscita della digitalread, che è già o zero o uno, non ti serve farti una pippa cogitativa come questa
così va bene da solo
Code: [Select]

    statorele = digitalRead(RELAY);


che strano, non vedo il pezzo di programma che avevi postato prima, sicuro di non aver fatto confusione con i programmi?


per i più esperti di me
non ho con me la fida UNO, non posso provare, che cosa significa che on ed off sono evidenziate dallo IDE?
non sono parole riservate del 'C', non sono in maiuscolo quindi non sono macro
il reference non ne parla, che cosa sono? della macro "timide" (nel senso che arrossiscono da sole) per 1 e 0?
char on[]= "ON" ;
char off[]= "OFF";

hai ragione ... nel frattempo ho cambiato Sting in char

Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 01, 2019, 07:00 pm

Code: [Select]

    statorele = digitalRead(RELAY);

questo mi dava 0 oppure 1, il discornso nasce proprio perchè invece di leggere 0 volevo leggere off e invece di 1 on

Title: Re: Sensore co2 mh-z14a
Post by: Standardoil on May 01, 2019, 07:15 pm
1) mai cambiare se non sai cosa stai facendo, nemmeno se non va: gli errori servono anche per imparare, se non li capisci non impari
2) "on" e "off" ti vengono segnati arnacio dallo IDE, non ti sei domandato cosa significa?
in 'C' NON, ripeto non, si usano nomi (identificatori) che sono riservati al linguaggio (e alle librerie, aggiungo io), per fortuna lo IDE li evidenzia, arancione in questo caso
NON, ripeto non, si devono usare come nomi di variabile e/o funzione, cosa servano esattamente "on" e "off" non è chiaro, visto che NON sono parole riservate ne del 'C' ne del C++, non sono macro, ho cercato in tutti i puntoacca e ho trovato "ON" o "OFF", ma non le versioni minuscole
cosa siano? mistero, ma non vanno usati come nome
3) adssso ho capito casa volevi fare: assegnare una stringa come valore a statorele, una stringa variabile, per l'esattezza

Non funziona, mi spiace, statorele è un intero (ti basterebbe un bool, ma intero va bene)
non conterrà mai il "testo" di una stringa, che sia oggetto String o array di char, non andrà mai
alla meglio gli viene scritto dentro il "valore" del puntatore, ma credo che vada castato apposta
messa così come la hai messa tu ci va solo 0 se il puntaore è invalido, o 1 se valido, dato che "comunque" le stringhe sono inizializzate sarà sempre 1
ti devi fare così
Code: [Select]

            //disegna seconda schermata
            lcd.setCursor(0, 1);
            lcd.print(" Stato Rele   ");
            if(statorele)
            {
                lcd.print("On");
             }
             else
            {
               lcd.print("Off");
            }
            lcd.print("  ");
            // non mettere più statement sulla stessa riga
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 01, 2019, 07:34 pm
grazie Standaroil per l'interesse e la cortesia.

ok!!
provo e ti faccio sapere!
ps: a me l'IDE non colora ne on ne off sia che scritto minuscolo che scritto maiuscolo
Title: Re: Sensore co2 mh-z14a
Post by: Standardoil on May 01, 2019, 07:43 pm
a me sì
come ho detto non capisco, ma comunque fai come ti ho indicato che va bene
oppure potresti provare l'operatore ternario, ma non ci guadagni in visibilità
Code: [Select]

lcd.print(statorele?"ON":"OFF");
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 01, 2019, 07:45 pm
quindi un intero non puo mai diventare un testo!?

la tua soluzione funge alla grande... le cose piu sempilci sono sempre le migliori
Title: Re: Sensore co2 mh-z14a
Post by: Standardoil on May 01, 2019, 07:59 pm
no, interi non diventano testo, la variabile che nasce intera muore intera
se ricordo bene in Vbasic, tanti tanti anni fa, la variabili potevano trans-formarsi da stringa in intero, da numero a carattere e cose così....
gli array si potavano allargare e stringere, c'era un operatore che ti diceva quanto erano grandi, partivano da 1, o anche da 10, se volevi
insomma il paese del bengodi, un vero paradiso
ma non credo che si possa fare su una MCU come arduino
una variabile intera conterrà sempre un intero, e guai a sbordare la sua dimensione, avvengono cose irripetibili, da raccontare la sera intorno al fuoco ai bambini per tenerli buoni, tragedie immani
scegliere il tipo di una variabile è operazione "delicata"
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 01, 2019, 08:02 pm
carissimo sapresti come posso scaricare dal IDE del pc il codice sul IDE del telefono!?
Title: Re: Sensore co2 mh-z14a
Post by: Standardoil on May 01, 2019, 09:00 pm
NO, mi spiace
non so proprio


EDIT
ma tu cosa intendi? spostare il file di programma dell'arduino? il sorgente che scrivi?
non credo che sia difficile, ma hai lo IDE sul telefonino? come ti trovi?


PS ricordati un Karma, grazie
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on May 02, 2019, 11:33 am
Esiste un IDE per Android provato diversi anni fa, in grado anche di programmare se hai la porta OTG che, credo, oggi hanno tutti.
Title: Re: Sensore co2 mh-z14a
Post by: Standardoil on May 02, 2019, 11:57 am
io lo lascierei stare
le librerie, la documentazione, devi spostare tutto
la semplicità di una tastiera fisica...
 
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 02, 2019, 09:18 pm
NO, mi spiace
non so proprio


EDIT
ma tu cosa intendi? spostare il file di programma dell'arduino? il sorgente che scrivi?
non credo che sia difficile, ma hai lo IDE sul telefonino? come ti trovi?


PS ricordati un Karma, grazie
si.. l'ho scaricato un po di tempo fa e devo dire che funge....
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 02, 2019, 09:31 pm
io lo lascierei stare
le librerie, la documentazione, devi spostare tutto
la semplicità di una tastiera fisica...
 
no..puoi scaricare direttamente tutto da li.. ci sono addirittura gli esempi
Esiste un IDE per Android provato diversi anni fa, in grado anche di programmare se hai la porta OTG che, credo, oggi hanno tutti.
sisi.. infatti vorrei scaricare il codice da pc a telefono per poterlo modificare quando ho tempo...
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on May 03, 2019, 08:37 am
Forse il metodo più veloce è quello di collegare il telefono via USB e copiare il file.
Oppure via bluetooth.
Oppure usando il WiFi e qualche app.
O altri metodi.
Title: Re: Sensore co2 mh-z14a
Post by: Standardoil on May 04, 2019, 05:43 pm
no..puoi scaricare direttamente tutto da li.. ci sono addirittura gli esempi
scaricare le librerie pubbliche di certo, quelle sviluppate da me...
in linea di principio sono contrario a tenere in giro copie dell'ambiente di lavoro, che poi non è mai aggiornato quando serve
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 18, 2019, 11:09 pm
Buonasera a tutti ragazzi!!!
Stavo completando il prototipo quando mi sono accorto che qualcosa non andava.... dopo varie prove, un regolatore di tensione bruciato, una scheda UNO fritta, un relè arrostito sono arrivato alla fine... C'è ancora un problemuccio... quando accendo la retroilluminazione  del display Lcd keypad l'alimentatore  scalda tantissimo, penso che sia stata questa la causa della frittura di UNO. durante la sperimentazione  quando tutto era collegato alla basetta non mi sembrava scaldare tanto... può darsi che si sia rotta la R interna al keypad?? Come posso ovviare?
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on May 19, 2019, 10:23 am
Controlla tutte le tensioni e controlla eventuali cortocircuiti.

Alcuni di questi shield LCD+Keypad hanno un baco hardware proprio sulla retroilluminazione

https://forum.arduino.cc/index.php?topic=96747.0 (https://forum.arduino.cc/index.php?topic=96747.0)
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 19, 2019, 11:09 am
Possibile che assorbe oltre 200mA?
Ma alimentando Arduino dal Pin 5V è possibile prendere i 3.3V?
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on May 19, 2019, 01:06 pm
Dal pin 3.3V puoi prendere massimo 50mA qualsiasi alimentazione usi.
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 19, 2019, 10:27 pm
A questo  punto penso che l' Lcd keypad  sia danneggiato... ho smontato tutto, controllato, messo una R da 330 in serie al led della retroilluminazione,  verificato il funzionamento, collegato tutto in modo volante e funzionava come doveva. Poi rismonto, metto tutto nel case, ricollego tutto, e di nuovo l'alimentatore scalda e il programma non è reattivo a differenza di prima  che quando  pigiavo  un pulsante il valore subito variava, adesso invece ci mette tempo.... alimentando da solo lo scudo l'alimentatore non scalda, quando collego Arduino inizia il programma quindi le scritte e inizia a scaldare, anche senza collegare il resto delle utenze...
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 19, 2019, 10:40 pm
A questo  punto penso che l' Lcd keypad  sia danneggiato... ho smontato tutto, controllato, messo una R da 330 in serie al led della retroilluminazione,  verificato il funzionamento, collegato tutto in modo volante e funzionava come doveva. Poi rismonto, metto tutto nel case, ricollego tutto, e di nuovo l'alimentatore scalda e il programma non è reattivo a differenza di prima  che quando  pigiavo  un pulsante il valore subito variava, adesso invece ci mette tempo.... alimentando da solo lo scudo l'alimentatore non scalda, quando collego Arduino inizia il programma quindi le scritte e inizia a scaldare, anche senza collegare il resto delle utenze...
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 21, 2019, 05:36 pm
Ho una domanda..
Ma Arduino si impalla se esegue il programma ma non ha collegato il sensore? Ho notato che provando  il codice senza aver collegato il sensore di co2 ma solo Lcd keypad Arduino non era reattivo. Poi commentando  la parte di codice che "legge"il sensore diventa di nuovo  reattivo... può essere?
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on May 21, 2019, 07:32 pm
Dipende dal codice, il tuo o quello della libreria. Se non sbaglio questo sensore dialoga via seriale. Se il codice che attende la risposta è bloccante allora il programma si bloccherà altrimenti no.
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 21, 2019, 09:48 pm
Dipende dal codice, il tuo o quello della libreria. Se non sbaglio questo sensore dialoga via seriale. Se il codice che attende la risposta è bloccante allora il programma si bloccherà altrimenti no.
Definisci bloccante...
Title: Re: Sensore co2 mh-z14a
Post by: gpb01 on May 21, 2019, 09:52 pm
Definisci bloccante...
es. una funzione che una volta chiamata NON ritorna al chiamante sino a quando non ha un valore da restituire. Se tale valore NON arriva, la funzione non torna mai al chiamante ed il codice resta "bloccato" in attesa del valore di ritono dalla funzione.

La funzione delay(), sempre ad esempio, è bloccante, perché, una volta chiamata il tuo programma si ferma e, sino a quando non è passato il tempo richiesto, la funzione delay() non torna al chiamante il quale resta fermo ad attendere.

Guglielmo
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on May 21, 2019, 09:59 pm
Nel caso di cui stiamo parlando la libreria o il codice aspetta all'infinito una risposta dal sensore senza un tempo massimo.
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 21, 2019, 10:08 pm
Mmmm... capisco...
La questione è che non resta bloccato, ma rallenta.. esempio se pigio il pulsante giu diminuisce il valore del set-point. Se commento la parte di codice che legge il sensore il valore del set point diminuisce  istantaneamente,  se il codice è tutto attivo il valore diminuisce molto lentamente tenendo  premuto il pulsante... come se ci fosse un ritardo.
Title: Re: Sensore co2 mh-z14a
Post by: gpb01 on May 21, 2019, 10:10 pm
... in tal caso, probabilmente, la funzione che chiami, ha comunque un "timeout" e, passato un certo tempo in cui sta ferma, comunque ritorna al chiamante (... forse restituendo un codice di errore).

Guglielmo
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 21, 2019, 10:13 pm
Grazie Guglielmo,  provo a collegare il sensore in modo "volante" e vedo che succede..
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 23, 2019, 11:01 am
Prova fatta.... effettivamente quando il sensore  non è collegato Arduino presenta un certo "ritardo ", collegando il sensore ritorna reattivo.
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 23, 2019, 11:11 am
Un altro fenomeno mi tormenta... alimentando solo il display keypad senza Arduino il regolatore di tensione dell'alimentatore non riscalda più di tanto, nonostante la retroilluminazione sia accesa, quando collego Arduino allo shield Lcd il regolatore si fa caldissimo ... non si riesce a tenere il dito sopra... anche se spengo la retroilluminazione o la attenuo con resistori, possibile  che quando parte il programma Arduino  succhi in modo da far scottare il regolatore?
Parliamo di un classico ams1117
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on May 23, 2019, 03:59 pm
Un ams1117 dovrebbe fornire 800mA, poco più di una USB2.0
Però non ho chiari i collegamenti che usi.

Nella mia mente ci dovrebbe essere un alimentatore a 9V che alimenta Arduino e lo shield, oppure anche uno a 5 ma bisogna cambiare l'ingresso. Lo stesso alimentatore dovrebbe andare ad uno stepdown a 3.3V per alimentare il sensore CO2.
Se non mi sono perso.
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 23, 2019, 10:00 pm
Allora ... uso un alimentatore 12v 2ª collegato ad uno step down  tipo quello delle basette 1000 fori, da cui prendo 5v per alimentare Arduino dal Pin 5v che a sua volta alimenta lo shield  Lcd keypad. Poi sempre dallo step down prendo altri 5v per il sensore ed il convertitore logico,  ed i 3.3v per l'altro lato del convertitore logico per la comunicazione UART.
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on May 24, 2019, 08:23 am
Quello che si scalda è lo step down? Se si, forse dovresti alimentarlo a 9V invece che a 12, l'ams1117 porta i 12 a 5V producendo calore. Oppure puoi montare un piccolo dissipatore. O usare uno step down buck con LM2596 o altro chip e un bel induttore.

Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 24, 2019, 08:29 am
Proverò ad alimentare con 9v per vedere se cambia la situazione, altrimenti metto un dissipatorino..
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on May 24, 2019, 08:25 pm
Effettivamente alimentando a 9v o meglio ancora a 7.5v il regolatore  non scalda tanto...
Assemblo tutto e vediamo che succede....
Title: Re: Sensore co2 mh-z14a
Post by: zoomx on May 25, 2019, 11:23 am
Io ho scritto 9V perché è una tensione comune ma 7.5 è meglio perché con gli LDO tutta la tensione in eccesso viene dissipata in calore, per cui non sono efficienti. In genere usi uno step down buck e poi eventualmente filtri la tensione.
Title: Re: Sensore co2 mh-z14a
Post by: megaciro on Jun 01, 2019, 08:07 pm
ciriciao amici,
ho aggiunto anche l'isteresi regolabile ....