0
Λοιπον εχεις δικιο για το datasheet. ο ανεμιστήρας είναι ο Noctua NF-S12A PWM 120mm και εδώ τα χαρακτηριστικά. ο κώδικας βέβαια είναι για 490hz.
έχω καταλήξει εδώ αφου προσθεσα όσα μου ειπατε.
εδω μια φώτο απο tinkercad σε απλη οθόνη χωρίς ανεμιστήρα.Κώδικας:#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <TroykaDHT.h> DHT dht(2, DHT11); LiquidCrystal_I2C lcd(0x27,20,4); #define TempPin A0 //gia count const byte upButtonPin = 7; const byte downButtonPin = 6; int buttonPushCounter = 0; byte upButtonState = HIGH; byte downButtonState = HIGH; byte prevUpButtonState = HIGH; byte prevDownButtonState = HIGH; //gia debunce unsigned long lastBtnUp = 0; unsigned long lastBtnDwn = 0; int transInt = 50; //gia pwm const int fan_control_pin = 9; // Blue wire unsigned long start_time; int rpm; int pwm = 0; int count = 0; void setup() { lcd.init(); lcd.init(); lcd.backlight(); lcd.print("Jordan v1.0"); pinMode(TempPin, INPUT); pinMode(upButtonPin, INPUT_PULLUP); pinMode(downButtonPin, INPUT_PULLUP); pinMode(13, OUTPUT); pinMode(fan_control_pin, OUTPUT); analogWrite(fan_control_pin, 0); attachInterrupt(digitalPinToInterrupt(2), counter, RISING); // Green wire } void loop() { int temp = ((analogRead(TempPin) * (5.0/1024))-0.5 )/0.01; upButtonState = digitalRead(upButtonPin); downButtonState = digitalRead(downButtonPin); if (upButtonState == HIGH and downButtonState == HIGH and pwm == 0) { digitalWrite(13, HIGH); lcd.begin(16,2); lcd.clear(); lcd.setCursor(0,0); lcd.print("pwm= 0"); lcd.print("%"); lcd.print(" temp="); lcd.setCursor(0,1); lcd.print("Speed=0"); lcd.print(" "); lcd.print(temp); delay(100); } upButtonState = digitalRead(upButtonPin); if (upButtonState != prevUpButtonState) { if (millis() - lastBtnUp > transInt) { if (upButtonState == LOW) { if (pwm<255) { pwm+=51; analogWrite(fan_control_pin, pwm); printlcd(); } } lastBtnUp = millis(); } prevUpButtonState = upButtonState; } downButtonState = digitalRead(downButtonPin); if (downButtonState != prevDownButtonState) { if(millis() - lastBtnDwn > transInt) { if (downButtonState == LOW) { if (pwm<=255 and pwm>0) { pwm-=51; analogWrite(fan_control_pin, pwm); printlcd(); } } lastBtnDwn = millis(); } prevDownButtonState = downButtonState; } } void counter() { count++; } void printlcd() { int temp = ((analogRead(TempPin) * (5.0/1024))-0.5 )/0.01; start_time = millis(); count = 0; while((millis() - start_time) < 1000){ } rpm = count * 30 / 2; lcd.begin(16,2); // Print a message to the LCD. lcd.clear(); lcd.setCursor(0,0); lcd.print("pwm= "); lcd.print(map(pwm, 0, 255, 0, 100)); lcd.print("%"); lcd.print(" temp="); lcd.setCursor(0,1); lcd.print("Speed="); lcd.print(rpm); lcd.print(" "); lcd.print(temp); }
σχεδιο1.jpg
συγνώμη για την αναστάτωση και την ταλαιπωρία. θα το δοκιμάσω αυριο. ευχαριστώ.
Update:
Δεν δουλευει το rpm το pwm ειναι ok.