Εμφάνιση αποτελεσμάτων : 1 έως 5 από 5

Θέμα: ΕΡΩΤΗΣΗ ΓΙΑ ΚΩΔΙΚΑ RPM PC FAN

Hybrid View

Προηγούμενο μήνυμα Προηγούμενο μήνυμα   Επόμενο Μήνυμα Επόμενο Μήνυμα
  1. #1
    Νέο Μέλος
    Όνομα
    Ιορδάνης
    Εγγραφή
    Feb 2022
    Περιοχή
    αθήνα
    Μηνύματα
    3

    Προεπιλογή

    Λοιπον εχεις δικιο για το datasheet. ο ανεμιστήρας είναι ο Noctua NF-S12A PWM 120mm και εδώ τα χαρακτηριστικά. ο κώδικας βέβαια είναι για 490hz.

    έχω καταλήξει εδώ αφου προσθεσα όσα μου ειπατε.


    Κώδικας:
    #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);
      }
    εδω μια φώτο απο tinkercad σε απλη οθόνη χωρίς ανεμιστήρα.
    σχεδιο1.jpg
    συγνώμη για την αναστάτωση και την ταλαιπωρία. θα το δοκιμάσω αυριο. ευχαριστώ.

    Update:
    Δεν δουλευει το rpm το pwm ειναι ok.

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη iordanhsp : 18-02-22 στις 15:01

Παρόμοια Θέματα

  1. Πτώση rpm σε 4 cable fan υπολογιστή.
    By hackertom in forum Ερωτήσεις Αρχάριων
    Απαντήσεις: 1
    Τελευταίο Μήνυμα: 26-09-17, 15:03
  2. Βοηθεια για Low rpm alarm
    By Johnny305 in forum Διάφορα Κυκλώματα
    Απαντήσεις: 6
    Τελευταίο Μήνυμα: 07-04-15, 18:54
  3. Ερωτηση για γνωση Arduino για πειραγμα κωδικα
    By diskjohn in forum Διάφορα Κυκλώματα
    Απαντήσεις: 7
    Τελευταίο Μήνυμα: 01-04-15, 16:18
  4. Πoιο κυκλωμα να υλοποιησω για Rpm meter?
    By herctrap in forum Κυκλώματα για Auto & Moto
    Απαντήσεις: 17
    Τελευταίο Μήνυμα: 04-06-10, 14:49
  5. Μέτρηση rpm toυ pc fan
    By QED in forum Μικροελεγκτές
    Απαντήσεις: 2
    Τελευταίο Μήνυμα: 02-10-04, 23:20

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας