4 Pin ventilátor

Odpovědět
Cuore
Příspěvky: 8
Registrován: 24 bře 2018, 19:26
Reputation: 0

4 Pin ventilátor

Příspěvek od Cuore » 12 dub 2018, 17:05

Ahoj,
řeším jeden větší projekt a jeho součástí je i 120mm PC ventilátor. Šel jsem cestou 4 pinu jelikož 3 pin řízený přes mosfet vydává dost často nepříjemné zvuky. Přikládám funkční kód kde jsou otáčky ventilátoru řízeny na základě teploty + na sériovou linku jsou poslány informace o teplotě, hodnotě posílané do ventilátoru (regulace otáček) a otáčky ventilátoru. Snad někdo využije

Kód: Vybrat vše

#include <OneWire.h>
#include <DallasTemperature.h>
volatile byte half_revolutions;
unsigned int rpm;
unsigned long timeold;
const int pinCidlaDS = 4;
const int PWMPin = 3;  
int sensorVal;
OneWire oneWireDS(pinCidlaDS);
DallasTemperature senzoryDS(&oneWireDS);


void setup()
{
  Serial.begin(9600);
  attachInterrupt(0, rpm_fun, RISING);
  half_revolutions = 0;
  rpm = 0;
  timeold = 0;
  pinMode(PWMPin, OUTPUT);  
  senzoryDS.begin();
  TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
  TCCR2B = _BV(WGM22) | _BV(CS21);
  OCR2A = 79; 
  OCR2B = 0; 
}

void loop()
{
  if (half_revolutions >= 20) { 
     rpm = 30*1000/(millis() - timeold)*half_revolutions;
     timeold = millis();
     half_revolutions = 0;
   }
   senzoryDS.requestTemperatures();
    int in, out;
  sensorVal = senzoryDS.getTempCByIndex(0);
    if(sensorVal > 90){
    sensorVal = 90;
  }

  in = sensorVal;
  out = map(in, 25, 90, 7, 79);

      if(sensorVal < 25){
    out = 0;
    rpm = 0;
        }
  
  OCR2B = out;
  Serial.print("Teplota cidla DS18B20: ");
  Serial.print(senzoryDS.getTempCByIndex(0));
  Serial.println(" stupnu Celsia");
  Serial.println(out);
  Serial.println(rpm,DEC);
}
 void rpm_fun()
 {
   half_revolutions++;
 }

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů