Ветряная турбина

Источник:

Эта миниатюрная ветряная турбина демонстрирует мощь и ограничения этого возобновляемого источника энергии. В примере кода вы увидите, какое напряжение производит эта мини-турбина, а также расчетное число оборотов турбины в минуту (об/мин).

Этот дизайн — часть моего пути к 52 проектам в 2025 году. Я документирую этот процесс на YouTube, и вы можете посмотреть видео здесь:

Вот пример кода (используется ЖК-экран):

#include

// === ПЕРЕМЕННЫЕ ТУРБИНЫ ===
const int MotorPin = A0;
интервал аналогового значения;
поплавковый двигательСкорость; // Скорость двигателя в об/мин
const float Kv = 6666,67;
плавающее напряжение;
поплавок MaxSpeed ​​= 0;

// === НАСТРОЙКА ЖК-дисплея ===
константное число rs = 12;
константное целое эн = 11;
константное целое d4 = 5;
константное int d5 = 4;
константное int d6 = 3;
константный интервал d7 = 2;
ЖК LiquidCrystal(rs, en, d4, d5, d6, d7);

// === НАСТРОЙКА КНОПКИ ===
const int buttonPin = 6;
int buttonState = 0;
bool is_pressed = ложь;
уровень кнопки int = 0;

// === СРЕДНИЙ РАСЧЕТ ===
константный интервал NUM_READINGS = 50;
плавающие показания[NUM_READINGS];
ИНТ readIndex = 0;
число интервалов = 0;
общее количество плавающих значений = 0;
среднее значение с плавающей запятой = 0;

void ComputeAvg (float newReading) {
итого -= чтения[readIndex];
чтения [readIndex] = новоеЧтение;
всего += показаний[readIndex];
readIndex = (readIndex + 1) % NUM_READINGS;

если (количество среднее = общее количество/количество;
}

недействительная настройка() {
Серийный.начало(9600);
ЖК.begin(16, 2);
pinMode (кнопкаPin, INPUT);

// Инициализируем массив показаний
for (int я = 0; я показания[i] = 0;
}
}

недействительный цикл() {
AnalogValue = AnalogRead (motorPin);
buttonState = digitalRead (buttonPin);

// Преобразуем аналог в напряжение
Напряжение = (аналоговое значение * 5,0)/1023,0;

// Преобразуем напряжение в об/мин
Скорость двигателя = Напряжение * Кв;

// Отслеживание максимальной скорости
если (motorSpeed > MaxSpeed) {
МаксСпид = Скорость двигателя;
}

// Обновляем скользящее среднее
ComputeAvg (Скорость двигателя);

// Обработка нажатия кнопки
if (buttonState == HIGH && is_pressed == false) {
уровень кнопки = (уровень кнопки + 1) % 4; // 4 режима: 0-3
is_pressed = правда;
задержка(200); // Отказ от дребезга
} еще если (buttonState == LOW) {
is_pressed = ложь;
}

// Отображение различной информации в зависимости от уровня кнопки
ЖК.Очистить();
переключатель (уровень кнопок) {
случай 0:
lcd.print(«Максимальная скорость:»);
lcd.setCursor(0, 1);
lcd.print(МаксСпид, 1);
lcd.print(«об/мин»);
перерыв;

случай 1:
lcd.print(«Текущее напряжение:»);
lcd.setCursor(0, 1);
lcd.print(Напряжение, 2);
lcd.print(«В»);
перерыв;

случай 2:
lcd.print(«Текущая скорость:»);
lcd.setCursor(0, 1);
lcd.print(motorSpeed, 1);
lcd.print(«об/мин»);
перерыв;

случай 3:
lcd.print(«Средняя скорость:»);
lcd.setCursor(0, 1);
lcd.print(среднее, 1);
lcd.print(«об/мин»);
перерыв;
}

// Дополнительный последовательный мониторинг
Serial.print(«Напряжение: „); Serial.print(Напряжение, 2);
Serial.print(“ V | Скорость: „); Serial.print(motorSpeed, 1);
Serial.print(“Об/мин | Среднее: „); Serial.print(среднее, 1);
Serial.print(“Об/мин | Макс: „); Serial.println(МаксСпид, 1);

задержка(100);
}

05:16
14
Нет комментариев. Ваш будет первым!

Ссылка появится после регистрации

Посещая этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.