problema LCD con sensore temperatura e piezo

Salve a tutti!

Venerdì pomeriggio ho inizato a “giocare” con lo starter kit di Arduino: dopo aver svolto da bravo scolaro tutti gli esempi riportati sulla guida, ho inizato a creare qualcosa di nuovo.

In partica ho creato un piccolo termostato ambienete che legge la temperatura tramite il TMP36, la scrive sia sul monitor seriale che sul dispaly LCD e se la temperatura supera alcune soglie accende in sequenza 3 led.
Fin qui tutto ok, anche perchè non è nulla di nuovo… Ho preso spunto da due esempi e fatto un po di collage!

Oggi ho provato a collegare anche il piezo per far emettere un suono a dati valori di temperatura e qui sono sorti i problemi.

In pratica quando si verifica la condizione che attiva il piezo, questo si attiva ed emette un suono ma sul display non appare più la temperatura ma caratteri non richiesti.

//include the libray lcd
#include <LiquidCrystal.h>

//inizzializzo la libreria con i numeri scelti ai pin
LiquidCrystal lcd(12,11,5,4,3,2);

//TMP36 Pin Variables
int temperaturePin = 0; //the analog pin the TMP36's Vout (sense) pin is connected to
                        //the resolution is 10 mV / degree centigrade
                        //(500 mV offset) to make negative temperatures an option

const float baselineTemp = 20.0;
/*



 * setup() - this function runs once when you turn your Arduino on
 * We initialize the serial connection with the computer
 */
void setup()
{
  Serial.begin(9600);  //Start the serial connection with the copmuter
                       //to view the result open the serial monitor
                       //last button beneath the file bar (looks like a box with an antenae)
lcd.begin(16,2);
lcd.print("TEMPERATURA - C");
  pinMode(10,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(8,OUTPUT);
}
 
 
 
void loop()                     // run over and over again
{
 float temperature = getVoltage(temperaturePin);  //getting the voltage reading from the temperature sensor
 temperature = (temperature - .5) * 100;          //converting from 10 mv per degree wit 500 mV offset
                                                  //to degrees ((volatge - 500mV) times 100)
 Serial.println(temperature);  

lcd.setCursor(0, 1);  
  // stampa il numero di secondi dall'ultimo reset  
 lcd.print(temperature);  

int pitch = (550, 100, 1000, 50, 4000);

 if(temperature < baselineTemp){
    digitalWrite(10, LOW);
    digitalWrite(9, LOW);
    digitalWrite(8, HIGH);
  } // if the temperature rises 2-4 degrees, turn an LED on 
  else if(temperature >= baselineTemp+2 && temperature < baselineTemp+4){
    digitalWrite(10, LOW);
    digitalWrite(9, HIGH);
    digitalWrite(8, LOW);
  } // if the temperature rises 4-6 degrees, turn a second LED on  
  else if(temperature >= baselineTemp+4 && temperature < baselineTemp+6){
    digitalWrite(10, HIGH);
    digitalWrite(9, LOW);
    digitalWrite(8, LOW);
    tone(7,pitch,20);
    
  } // if the temperature rises more than 6 degrees, turn all LEDs on
  else if(temperature >= baselineTemp+6){
    digitalWrite(10, HIGH);
    digitalWrite(9, HIGH);
    digitalWrite(8, HIGH);
  }

 delay(1000);                                     //waiting a second
}

/*
 * getVoltage() - returns the voltage on the analog input defined by
 * pin
 */
float getVoltage(int pin){
 return (analogRead(pin) * .004882814); //converting from a 0 to 1024 digital range
                                        // to 0 to 5 volts (each 1 reading equals ~ 5 millivolts
}

I collegamenti credo che si desumano banalmente dal codice…
In ogni caso:

TMP36: pin centrale su A0, sx su 5V e dx su GND
LED: + su 7 - 8 - 9 ; - su GND con 220ohm
LCD: collegamenti “standard” come da esempi
PIEZO: uno su GND ed uno su 7

Idee?

Dirrei che i LED sono sui pin 10, 9 e 8.

Succede la stessa cosa se scolleghi il piezo?. Se no prova di mettere in serie al piezo una resistenza da 220 Ohm per limitare la corrente.

Ciao Uwe

Si scusa è vero... I led sono 8 9 e 10!

Se scollegao il piezo senza modificare il programma non ho nessun errore sul display!

Comunque ho collegato una R da 220 ed ora è tutto ok!!

GENTILISSIMO!!

Un'ultima domanda: come mai accadeva il problema? il piezo generava un "distrubo" che attraverso il GND arrivava al LCD?

No, cedo che tirava troppa corrente e faceva abbassare la tensione di alimentazione / tenione su alcuni Pin dello stesso Port. Pin 7 é sullo stesso port come i PIn da 2 a 6.

Ciao Uwe