Контроль движения воздуха

Тема в разделе "Arduino & Shields", создана пользователем AlexVS, 10 ноя 2015.

  1. MDV

    MDV Гик

    А чем датчики холла не нравятся?
     
  2. AlexVS

    AlexVS Гик

    Вы имеете ввиду датчик холла встроенный в кулер?
    Возможно это было бы самое простое решение, но у меня не получилось считать показания :(
    Подключал его через делитель на аналоговый вход. Может как то не так включил? Можете подсказать?
     
  3. MDV

    MDV Гик

    Насколько помню выход не аналоговый. На выходе меандр с частотой кратной частоте вращения. Замерь тестером сопротивление и несильно покрути
     
  4. AlexVS

    AlexVS Гик

    Вы правы, сопротивление меняется от бесконечности до некоторых величин.
    Но что то то жутко туплю, не соображу как этим воспользоваться :(
     
  5. MDV

    MDV Гик

    Вешаем подтягивающий резистор на 5 вольт и подаем на цифровой ввод. Далее контолим импульсы.
     
    AlexVS нравится это.
  6. AlexVS

    AlexVS Гик

    Понял. Попробую.
     
  7. MDV

    MDV Гик

    Можно ещё и по другому.
    Импульсы через диод подать на конденсатор и тогда уже аналоговый вход будет контроль уровень напряжения на конденсаторе.
     
  8. AlexVS

    AlexVS Гик

    Руки вчера не дошли попробовать, а пока одолевают сомнения по поводу
    Сопротивление измерял между черным и красным проводом, фактически провода питания, при подключении к желтому (вывод датчика) ничего не происходило.
     
  9. AlexVS

    AlexVS Гик

    Подключил. Залил тестовый код, в результате тишина
    Код (C++):
    // read RPM

    volatile int rpmcount = 0;//see http://arduino.cc/en/Reference/Volatile
    int rpm = 0;
    unsigned long lastmillis = 0;

    void setup(){
    Serial.begin(9600);
    attachInterrupt(0, rpm_fan, FALLING);//interrupt cero (0) is on pin two(2).
    }

    void loop(){

    if (millis() - lastmillis == 1000){ /*Uptade every one second, this will be equal to reading frecuency (Hz).*/

    detachInterrupt(0); //Disable interrupt when calculating

    rpm = rpmcount * 60; /* Convert frecuency to RPM, note: this works for one interruption per full rotation. For two interrups per full rotation use rpmcount * 30.*/

    Serial.print("RPM =\t"); //print the word "RPM" and tab.
    Serial.print(rpm); // print the rpm value.
    Serial.print("\t Hz=\t"); //print the word "Hz".
    Serial.println(rpmcount); /*print revolutions per second or Hz. And print new line or enter.*/

    rpmcount = 0; // Restart the RPM counter
    lastmillis = millis(); // Uptade lasmillis
    attachInterrupt(0, rpm_fan, FALLING); //enable interrupt
    }
    }

    void rpm_fan(){ /* this code will be executed every time the interrupt 0 (pin2) gets low.*/
    rpmcount++;
    }
     
  10. AlexVS

    AlexVS Гик

    С диодом тоже не выходит.
    Выход датчика с кулера повесил на анод диода (Д223). Катод на конденсатор и на А0. Второй вывод конденсатора на землю. Минус кулера тоже на землю. Читаю analogRead(0), в ответ всегда 1023.
     
  11. AlexVS

    AlexVS Гик

    Проблема я думаю в том, что нужно подавать питанеи не датчик. А если подать питание - начнет работать сам вентилятор.
     
  12. MDV

    MDV Гик

    Логично. Без питания импульсов не будет. Для того что бы вентилятор не крутился необходимо отпали катушки и после подачи напряжения проверить сигнал. Допускаю что и при 5 вольта будет работать.
     
  13. MDV

    MDV Гик

    Есть ещё мысль. Вместо датчика холла установить пару тройку герконов.
     
  14. AlexVS

    AlexVS Гик

    Меня останавливает факт того, что после разборки кулера, я его уже не восстановлю. Конечно попробую - расковыряю, посмотрю что получится.