Monitor LCD per alimentatore, NTC LM35 RPM

Salve,

avrei bisogno di una mano per combinare due sketches in uno.
Ho acquistato un alimentatore per server 48V/40A che usero’ per ricaricare batterie LiPo, poiche’ questo alimentatore e’ molto rumoroso perche’ mantiene la sua megaventola 12V/1A sempre al massimo dato che per il suo uso da server si presuppone un uso costante con elevati output di corrente.
Dal momento che per l’uso che ne faro’ io, raramente utilizzero’ tutti i 2000W di potenza, ho costruito senza l’ausilio di Arduino, un regolatore automatico della velocita’ della ventola in base alla temperatura utilizzando due LM317 ed un termistore NTC. Il sistema funziona, pero’ vorrei ottimizzarlo trovando la sezione dell’alimentatore (dissipatore) che scalda di piu’ all’aumentare della corrente di output.

Per questo scopo ho progettato un modulo composto da Arduino nano, Display LCD 16x2, un sensore di temperatura LM35, due sensori di temperatura NTC da 47k e un input per misurare la volocita’ di rotazione della ventola.

Ho adattato due sketches che fanno al mio caso.

Sketch per i sensori di temperatura:

#include <math.h>
#include "thermistor.h"
#include "LiquidCrystal.h"

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int tempLM35 = 0;
const int LM35Pin = A0;

// Pin analogici per leggere i sensori NTC
#define NTC_PIN1              A1
#define NTC_PIN2              A2


// Oggetto Termistore1
THERMISTOR thermistor1(NTC_PIN1,       // Analog pin
                      47000,          // Nominal resistance at 25 ºC
                      3990,           // thermistor's beta coefficient
                      47700);         // Value of the series resistor

// Lettura temperatura Termistore1
uint16_t tempNTC1;


// Oggetto Termistore2
THERMISTOR thermistor2(NTC_PIN2,      // Analog pin
                      47000,          // Nominal resistance at 25 ºC
                      3990,           // thermistor's beta coefficient
                      47300);         // Value of the series resistor


// // Lettura temperatura Termistore2
uint16_t tempNTC2;

 
//.............................................//

void setup() {
 lcd.begin(16,2);
 lcd.clear();
}

//.............................................//

void loop() {
  tempNTC1 = thermistor1.read();   // // Lettura temperatura Termistore1
  tempNTC2 = thermistor2.read();   // // Lettura temperatura Termistore2
  tempLM35 = analogRead(LM35Pin);
  float value = (tempLM35 / 1023.0) * 5000;
  float celsius = value / 10;
  float celsiusterm1 = tempNTC1 / 10;
  float celsiusterm2 = tempNTC2 / 10;

 lcd.setCursor(0,1);
  lcd.print("a=");
  lcd.print(celsius,0);
  lcd.print((char)223 ); 

 lcd.setCursor(5,1);
  lcd.print("b=");
  lcd.print(celsiusterm1,0);
  lcd.print((char)223 ); 

 lcd.setCursor(10,1);
  lcd.print("c=");
  lcd.print(celsiusterm2,0);
  lcd.print((char)223); 
 

   delay(1000);

}

e questo lo sketch per la lettura della velocita’ della ventola:

#include <FanSpeed.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
long previousMillis = 0;

FanSpeed fan(7, false);


//.............................................//


void setup() {
   lcd.begin(16, 2);
}


//.............................................//


void loop() {
  
  unsigned long currentMillis = millis();
  
  fan.process();

  if (currentMillis - previousMillis > 1000) {
    previousMillis = currentMillis;
     lcd.setCursor(0,0);

    lcd.clear();
    lcd.print("Ventola=");
    lcd.print(fan.counter*30); // 60/2  (seconds in minute divide by hall rising count per rotation
    lcd.print(" RPM");
    fan.reset();
  }
}

Gli sketches caricati singolarmente funzionano, pero’ quando vado ad unirli, la lettura della velocita’ della ventola viene visualizzata non correttamente (alterna valori 0-30).

Potreste darmi una mano?
Grazie

Cosa c’e’ di sbagliato in questo sketch?

Video

#include <FanSpeed.h>
#include <LiquidCrystal.h>
#include <math.h>
#include "thermistor.h"

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
long previousMillis = 0;

FanSpeed fan(7, false);
int tempLM35 = 0;
const int LM35Pin = A0;

// Analog pin used to read the NTC
#define NTC_PIN1              A1
#define NTC_PIN2              A2


// Thermistor1 object
THERMISTOR thermistor1(NTC_PIN1,       // Analog pin
                      47000,          // Nominal resistance at 25 ºC
                      3990,           // thermistor's beta coefficient
                      47700);         // Value of the series resistor

// thermistor1 temperature reading
uint16_t tempNTC1;


// Thermistor2 object
THERMISTOR thermistor2(NTC_PIN2,      // Analog pin
                      47000,          // Nominal resistance at 25 ºC
                      3990,           // thermistor's beta coefficient
                      47300);         // Value of the series resistor


// thermistor2 temperature reading
uint16_t tempNTC2;

//.............................................//


void setup() {
   lcd.begin(16, 2);
   lcd.clear();
}


//.............................................//


void loop() {
  
  unsigned long currentMillis = millis();
  
  fan.process();

  if (currentMillis - previousMillis > 1000) 
    previousMillis = currentMillis;
  lcd.setCursor(0,0);
    lcd.print("Ventola=");
    lcd.print(fan.counter*30); // 60/2  (seconds in minute divide by hall rising count per rotation
    lcd.print(" RPM");
    fan.reset();

  tempNTC1 = thermistor1.read();   // Read temperature
  tempNTC2 = thermistor2.read();   // Read temperature
  tempLM35 = analogRead(LM35Pin);
  float value = (tempLM35 / 1023.0) * 5000;
  float celsius = value / 10;
  float celsiusterm1 = tempNTC1 / 10;
  float celsiusterm2 = tempNTC2 / 10;

 lcd.setCursor(0,1);
  lcd.print("a=");
  lcd.print(celsius,0);
  lcd.print((char)223 ); 

 lcd.setCursor(5,1);
  lcd.print("b=");
  lcd.print(celsiusterm1,0);
  lcd.print((char)223 ); 

 lcd.setCursor(10,1);
  lcd.print("c=");
  lcd.print(celsiusterm2,0);
  lcd.print((char)223); 
 

   delay(1000);
 
 
}