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

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

Поворотный энкодер, подключенный к 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