Caravan koelkast ook echt laten koelen, versie 2.0

Ik heb in de loop der jaren al veel mensen horen klagen over de prestaties van de koelkast in de caravan veroorzaakt door een slechte warmte afvoer achter de koelkast.
Het probleem is dat de keuken meestal aan de kant zit van de voortent/luifel en dan heb je ook modellen waar de deur, als die open staat, er half voor zit.

Al meer dan 10 jaar had ik dat opgelost met een 12V computer ventilator met een thermostaatje.
Wat een nadeel is is dat ik hem 's nachts uitzet met de schakelaar en 's ochtends vergeet weer aan te zetten.
Tijd voor versie 2.0 die dan wel bedoeld is voor de electronica hobbyist.

Moderne ventilatoren hebben 3 of 4 aansluitingen en dus meer opties. Soms hebben ze een temperatuur sensor maar de meeste hebben een tacho signaal en een signaal om de snelheid te regelen.
Vaak is de eerste draad p de connector de massa, dan de 12V, dan de tacho als die er op zit en de laatste is dan de snelheids regeling. Maar dat is een kwestie van de beschikbare fan opzoeken op internet.
De snelheidsregeling gebeurt met een PWM-signaal (Pulse Width Modulation) waarbij de frequentie constant is maar de verhouding tussen puls en pauze varieert. Met een arduino of iets dergelijks is dat eenvoudig te maken.
Het idee was nu om de fan altijd zachtjes te laten draaien, op een volume dat je niet hoort (denk aan ophangen van de fan via rubber ringen!). Wanneer de temperatuur achter de koelkast een grenswaarde overschrijdt dan laten we de fan op een hogere snelheid draaien en als er een hogere grens bereikt wordt gaat deze op max draaien.
Wanneer de temperatuur weer daalt gaat de fan weer in fluisterstand.
Nu hebben we nog steeds het issue dat de fan hard kan draaien als we willen slapen, dat is opgelost met een tiptoets die de fan voor 10u in langzame mode zet.
Het voorpaneel van de koelkast had in mijn geval nog lege ruimte waar die schakelaar prima in kon. Tevens is een bicolor-led toegevoegd die de status laat zien, groen bij langzaam, rood bij snel en een groen knippertje in slaapmode. Niet perse nodig maar ik vond het leuk.

Ik heb de nano op een stukje exprimenteerprint gezet met de weerstanden en de spanningsregelaar en dit in een mini behuizing van 7cm lang gezet. De temperatuur sensor hangt net buiten de behuizing.

De code

// Arduino Nano
// caravan koelkast ventilatie 2.0
// Als temp onder bepaalde waarde is dan alleen zachtjes draaien
// als temp te hoog wordt dan op hogere kracht draaien, bij overschrijden tempTurbo dan op 
// volle snelheid.
// na indrukken sleep button 36000 seconden (10u) langzaam draaien. interupt kan bij nano 
// alleen op poort 2 en 3
// bi-color Led op 4 en 5. Groen bij lage snelheid en rood bij hoge snelheid. Bij sleep 
// flashed groen elke 10 seconden even
// Alle Serial commando's zijn optioneel en alleen voor het debuggen via de pc

#include 
#include 
#define DS18B20 7
OneWire ourWire(DS18B20);
DallasTemperature sensors(&ourWire);
DeviceAddress insideThermometer;

int pwm = 9;                  // Fan PWM port
int button = 2;				  // drukknop
int pwmLow = 100;			  // langzaam toerental  (0..255)
int pwmHigh = 200;			  // Snel toerental
int tempLow = 26;			  // temp waarbij fan weer langzaam gaat draaien
int tempHigh = 28;            // temp waarbij fan sneller gaat draaien
int tempTurbo = 35;			  // temp waarbij fan op top snelheid gaat draaien
volatile bool sleep = false;

void setup() {
  Serial.begin(9600);
  Serial.println(".");
  sensors.begin();
  sensors.getAddress(insideThermometer, 0);
  pinMode(pwm, OUTPUT); 
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(button,0x3);
  delay(500);
  attachInterrupt(digitalPinToInterrupt(button), buttonPressed, RISING);
  ledgroen();
}

void ledrood(){
  digitalWrite(4,LOW);
  digitalWrite(5,HIGH);
}

void ledgroen(){
  digitalWrite(5,LOW);
  digitalWrite(4,HIGH);
}

void leduit(){
  digitalWrite(5,LOW);
  digitalWrite(4,LOW);
}

void buttonPressed() {
  Serial.println("button pressed, switching to low rpm for 10 hours");
  sleep = true;
  analogWrite(pwm,pwmLow);
  leduit();
}

void loop() {
  if (sleep){
    analogWrite(pwm,pwmLow);
    // 3600 x 10 sec. Waarbij led elke 10 sec even groen flashed
    for (int i = 0; i <= 3600; i++) {
      ledgroen();
      delay(100);
      leduit();
      delay(9900);
      int mins = ((3600-i)*10)/60;
      Serial.print("sleeping for another ");
      Serial.print(mins);
      Serial.println(" minutes..");
    }  
    sleep=false;
    Serial.println("sleep period ended");
  }
  sensors.requestTemperatures();
  Serial.println(sensors.getTempCByIndex(0));
  if (sensors.getTempCByIndex(0) > tempHigh and not sleep) {
    Serial.println("temp above threshold, high rmp");
    analogWrite(pwm,pwmHigh);
    ledrood();
  }
  if (sensors.getTempCByIndex(0) > tempTurbo and not sleep) {
    Serial.println("temp above turbo threshold, max rmp");
    analogWrite(pwm,255);
    ledrood();
  }
  if (sensors.getTempCByIndex(0) < tempLow) {
    Serial.println("temp below threshold, low rmp");
    analogWrite(pwm,pwmLow);
    ledgroen();
  }
  delay(5000); 
}

Partslist

Arduino Nano        Microcontroller
Weerstand   10k     tbv pull-up schakelaar
Weerstand   4k7	    tbv pull-up DS18b20
Weerstand   220E    tbv bicolor led
DS18b20	            Digitale temperatuur sensor
78L05               5V spanningsregelaar
bi-color led
behuizing
stukje print

Schema






Geef hieronder uw commentaar, mening of aanvullingen op deze pagina en lees de eventuele meldingen van andere lezers.

naam:
email:
spamcheck: 1999+1=...
opmerking:
   


Website door Wouter Barendsen, 2005-2021