цифровая электроника
вычислительная техника
встраиваемые системы

 


Управляем компьютерным вентилятором с помощью Arduino

Автор: Mike(admin) от 25-11-2020, 05:55

Наверняка у многих имеются старые полуразобранные компьютеры, среди которых можно найти и компьютерный вентилятор. Но не спешите выбрасывать его, вполне вероятно, что он все еще рабочий, и его можно использовать в каких-нибудь самоделках или личных проектах.


Управляем компьютерным вентилятором с помощью Arduino

Итак, вы решили использовать старый вентилятор от компьютера для своих проектов Arduino? Узнаете, как это сделать, в данном материале.


В данном проекте были использованы следующие компоненты: Arduino Nano, поворотный энкодер, блок питания на 12 вольт и OLED-дисплей I2C. Схема подключения компонентов следующая.


Управляем компьютерным вентилятором с помощью Arduino

Поворотный энкодер, подключенный к Arduino, при вращении увеличивает напряжение синего провода вентилятора, подключенного к D3. Это действие заставляет вентилятор вращаться быстрее или медленнее.


Код для Arduino довольно прост и выглядит следующим образом.



#include <RotaryEncoder.h>
#include <U8glib.h>

// ----- Настройки вращения ----
#define ROTARYSTEPS 1
#define ROTARYMIN 80
#define ROTARYMAX 255

#define FANPIN 3

// Настроим энкодер для контактов A2 и A3:
RotaryEncoder encoder(A2, A3);

U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);  // I2C / TWI

int pos=0;
char Potenza[5];

 
void setup() {

  Serial.begin(115200);
  Serial.println("Fan test with Encoder:");

  encoder.setPosition(0 / ROTARYSTEPS); // начать со значения 0
  analogWrite(FANPIN, 0);
  u8g.setColorIndex(1);         // пиксель включен для дисплея 


}

void loop() {

 encoder.tick();

  int newPos = encoder.getPosition();
  if (pos != newPos) {

    if (newPos < ROTARYMIN) {
    encoder.setPosition(ROTARYMIN / ROTARYSTEPS);
    newPos = ROTARYMIN;
    } else if (newPos > ROTARYMAX) {
      encoder.setPosition(ROTARYMAX / ROTARYSTEPS);
      newPos = ROTARYMAX;
    }
    sprintf(Potenza, "%d", newPos);
    u8g.firstPage();  
    do {
      draw("Power:", 0, 12);
      draw(Potenza, 90, 12);
    } while( u8g.nextPage() );
    
   analogWrite(FANPIN, newPos);
   Serial.println(newPos);
   pos=newPos;  
 }
}


void draw(char* parola, int posx, int posy) {
  // здесь должны быть размещены графические команды для перерисовки всего экрана
  u8g.setFont(u8g_font_unifont);
  //u8g.setFont(u8g_font_osb21);
  u8g.drawStr( posx, posy, parola);
}



© digitrode.ru


Теги: Arduino




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий