Close

Anemometr z DC motoru?

Úvodní stránka Fórum Hardware Arduino Anemometr z DC motoru?

  • Toto téma obsahuje celkem 12 odpovědí. Do diskuze (4 diskutující) se naposledy zapojil uživatel Mikky a poslední změna proběhla před 7 roky a 2 měsíci.
Aktuálně je na stránce zobrazeno 13 příspěvků - 1. až 13. (celkem z 13)
  • Autor
    Příspěvky
  • #8162
    Bojkas
    Účastník

    Ahoj,

    Existuje nějaký jednoduchý hack, jak použít nějaký DC motor nebo třeba PC větrák, abych jen mohl použít jako anemometr?

    Plast bych si vytiskl na 3D tiskárně, ale chci nějak velice levně vyřešit co bych mohl připojit a počítat otáčky. Chci vytvořit levnou meteostanici na baterie na modelarske letiště s tím, že když to někdo ukradne, tak v tom nebudu mít tisícovku, ale třeba jen dvě stovky.

    Ideálně by bylo nějaké schéma a část kódu.

    Děkuji

    #8163
    Aleš
    Účastník

    Lepší je koupit tohle:
    http://www.hadex.cz/t114-anemometr-k-meteostanicim-wh1080-a-wh1090/
    Program je potom už dost jednoduchý 🙂

    #8164
    Aleš
    Účastník

    Tady máš potom návod, jak se to kalibruje 🙂

    #8370
    Bojkas
    Účastník

    Ahoj,

    tak jsem nakonec použil IR bránu, která měří otáčky.

    Jaký vzorec použít na přepočet z otáček na km/h? Zkusil jsem do kódu zakomponovat „v = 2πr × RPM × (60/1000) km/hr“, nevím proč, ale měří to v násobcích 1,13. :-/

    Celý kód:

    
    // Compute the RPM of a simple DC Motor using a photomicrosensor(PMS)
    #include <Wire.h>
    #include <LCD.h>
    #include <LiquidCrystal_I2C.h>
    #define PMS_PIN A0 // Pin for signal from Photomicrosensor
    #define LED_PIN 13 //Using Arduino's Internal LED; just as an indicator
    
    boolean counted=false;
    int t1=0,t2=0;
    int hits=0;
    int rps=0;
    
    LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7);
    
    void setup(){
      pinMode(PMS_PIN, INPUT);
      pinMode(LED_PIN, OUTPUT);
      lcd.setBacklightPin(3,POSITIVE);
      lcd.setBacklight(HIGH); // NOTE: You can turn the backlight off by setting it to LOW instead of HIGH
      lcd.begin(16, 2);
      lcd.clear();
    }
    
    void loop(){
      t2 = millis();
      if(t2 >= (t1 + 1000)){
        rps = hits;
        hits = 0;
        t1=t2;
    
        rpm = (rps*60);
        lcd.clear();
        lcd.print("Vitr: ");
        lcd.print(0.3142*rpm*0.06);
        lcd.print(" km/h");
      }  
      
      if(digitalRead(PMS_PIN) == HIGH){
        if(!counted){
          counted = true;
          hits++;
        }
      } else {
        counted = false;
      }
       
      digitalWrite(LED_PIN, digitalRead(PMS_PIN));
    }
    
    #8371
    Aleš
    Účastník

    A ta IR brána snímá otáčky čeho?

    #8372
    Bojkas
    Účastník

    Zatím je to simulované na kolo o průměru 0,1m tzn obvod je 0,31m. zkoušel jsem to přerušovat papírem, zatím jsem na začátku.

    #8374
    Aleš
    Účastník

    Zkus to prohodit takto:

    if(digitalRead(PMS_PIN) == HIGH){
    if(!counted){
    counted = true;
    hits++;
    }
    } else {
    counted = false;
    }

    digitalWrite(LED_PIN, digitalRead(PMS_PIN));
    }

    rpm = (rps*60);
    lcd.clear();
    lcd.print(„Vitr: „);
    lcd.print(0.3142*rpm*0.06);
    lcd.print(“ km/h“);
    }

    (závorky jsem nepočítal)

    #8375
    Bojkas
    Účastník

    Večer zkusím, děkuji.

    Každopádně bych rád znal důvod, abych zjistil, kde mohla být případně chyba?

    #8376
    BlindP
    Účastník
    #8377
    Bojkas
    Účastník

    Ahoj,

    ach tak, to mě nenapadlo.

    Aleš: zdá se, že závorek je tam dost, vzorec jsem upravil, ale píše mi to, že „rmp“ není deklarované.

    exit status 1
    ‚rpm‘ was not declared in this scope
    http://fii.cz/zxfbym

    // Compute the RPM of a simple DC Motor using a photomicrosensor(PMS)
    #include <Wire.h>
    #include <LCD.h>
    #include <LiquidCrystal_I2C.h>
    #define PMS_PIN A0 // Pin for signal from Photomicrosensor
    #define LED_PIN 13 //Using Arduino's Internal LED; just as an indicator
    
    boolean counted=false;
    int t1=0,t2=0;
    int hits=0;
    int rps=0;
    
    LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7);
    
    void setup(){
      pinMode(PMS_PIN, INPUT);
      pinMode(LED_PIN, OUTPUT);
      lcd.setBacklightPin(3,POSITIVE);
      lcd.setBacklight(HIGH); // NOTE: You can turn the backlight off by setting it to LOW instead of HIGH
      lcd.begin(16, 2);
      lcd.clear();
    }
    
    void loop(){
      t2 = millis();
      if(t2 >= (t1 + 1000)){
        rps = hits;
        hits = 0;
        t1=t2;
    
      }  
      
      if(digitalRead(PMS_PIN) == HIGH){
        if(!counted){
          counted = true;
          hits++;
        }
      } else {
        counted = false;
      }
       
      digitalWrite(LED_PIN, digitalRead(PMS_PIN));
      
        rpm = (rps*60);
        lcd.clear();
        lcd.print("Vitr: ");
        lcd.print(0.3142*rpm*0.06);
        lcd.print(" km/h");
    }
    
    #8378
    Bojkas
    Účastník

    PS: stačí, když ji deklaruji?
    int rpm;
    rpm = (rps*60);
    lcd.clear();
    lcd.print(„Vitr: „);
    lcd.print(0.3142*rpm*0.06);
    lcd.print(“ km/h“);

    #8404
    Bojkas
    Účastník

    Tak to dělá pořád to stejné, jen s tím, že mi nevím proč propisuje jen polovina displaye. Pokud to vrátím na ten původní kód, tak je to zase v pořádku.

    #9992
    Mikky
    Účastník

    Ahoj,
    aký výstup má ten anemometer? Akým senzorom, resp. snímačom (modulom) by som to dokázal snímať?

    Ďakujem

Aktuálně je na stránce zobrazeno 13 příspěvků - 1. až 13. (celkem z 13)
  • Pro reakci na toto téma se musíte přihlásit.