алгоритм пошуку точок; серійний обмін даними; комп’ютерний зір; мікроконтролер; структурне програмування; автоматизація побутових процесів.
inF-UA
point search algorithm; serial data exchange; computer vision; microcontroller; structured programming; automation of household processes.
inF-EN
Розумна система керування світлодіодами за допомогою жестів руки
Сучасні технології швидко розвиваються, і керування пристроями без дотику вже стало звичайним явищем. Ми можемо бачити це в автомобілях, смартфонах, побутовій техніці. У цьому проєкті я вирішив створити власну систему керування освітленням за допомогою рухів руки, використовуючи Arduino UNO R4 Minima, камеру комп’ютера та Python.
Мета роботи: ● навчитися передавати дані між комп’ютером і Arduino; ● реалізувати розпізнавання пальців за допомогою камери; ● створити систему, яка реагує на кількість показаних пальців; ● розробити власний приклад “інтернету речей” у домашніх умовах.
Основна ідея: Коли користувач показує певну кількість пальців у камеру, комп’ютер розпізнає це число за допомогою бібліотеки MediaPipe (Python) і надсилає його до плати Arduino. Arduino отримує число та вмикає відповідну кількість світлодіодів. Також до системи під’єднано енкодер — щоб регулювати яскравість, і тумблер — щоб вимикати живлення.
Використане обладнання: ● Arduino UNO R4 Minima ● 5 світлодіодів + резистори ● Енкодер (крутилка з двома виходами CLK, DT) ● Модуль тумблера ON/OFF ● Макетна плата та провідники ● Комп’ютер із Python
Частина на Python (розпізнавання пальців):
import cv2, mediapipe as mp, serial, time
ser = serial.Serial('COM4', 9600)
mpHands = mp.solutions.hands
hands = mpHands.Hands()
cap = cv2.VideoCapture(0)
while True:
success, img = cap.read()
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
results = hands.process(imgRGB)
fingers = 0
if results.multi_hand_landmarks:
for hand in results.multi_hand_landmarks:
landmarks = hand.landmark
# просте визначення піднятих пальців
for tip in [8, 12, 16, 20]:
if landmarks[tip].y < landmarks[tip-2].y:
fingers += 1
if landmarks[4].x < landmarks[3].x:
fingers += 1
ser.write(f"{fingers}\n".encode())
cv2.imshow("Camera", img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
Якщо користувач показує 5 пальців — у порт відправляється «5», і Arduino засвічує 5 світлодіодів.
inF-Codes
Частина на Arduino (керування світлодіодами):
int leds[] = {2, 3, 4, 5, 6};
#define CLK 8
#define DT 9
#define SWITCH_PIN 7
int lastStateCLK;
int brightness = 120;
int fingerCount = 0;
int lastValidCount = 0;
unsigned long lastDataTime = 0;
const unsigned long DATA_TIMEOUT = 500;
void setup() {
Serial.begin(9600);
for (int i = 0; i < 5; i++) pinMode(leds[i], OUTPUT);
pinMode(CLK, INPUT);
pinMode(DT, INPUT);
pinMode(SWITCH_PIN, INPUT);
lastStateCLK = digitalRead(CLK);
}
void loop() {
if (Serial.available()) {
int incoming = Serial.parseInt();
if (incoming >= 1 && incoming <= 5) { fingerCount = incoming; lastValidCount = incoming; }
else if (incoming == 0) fingerCount = 0;
lastDataTime = millis();
}
if (millis() - lastDataTime > DATA_TIMEOUT && fingerCount != 0) fingerCount = lastValidCount;
int currentStateCLK = digitalRead(CLK);
if (currentStateCLK != lastStateCLK && currentStateCLK == HIGH) {
if (digitalRead(DT) != currentStateCLK) brightness += 10;
else brightness -= 10;
brightness = constrain(brightness, 0, 255);
}
lastStateCLK = currentStateCLK;
bool powerOn = digitalRead(SWITCH_PIN);
if (powerOn) {
for (int i = 0; i < 5; i++) {
if (i < fingerCount) analogWrite(leds[i], brightness);
else analogWrite(leds[i], 0);
}
} else for (int i = 0; i < 5; i++) analogWrite(leds[i], 0);
}
Алгоритм роботи системи: 1. Захоплення зображення з вебкамери. 2. Пошук ключових точок руки (MediaPipe). 3. Визначення кількості піднятих пальців (пошук по координатах). 4. Передача знайденого числа через послідовний порт. 5. Отримання даних Arduino та виведення сигналу на LED. 6. Додаткове регулювання яскравості енкодером.
Цей алгоритм можна описати як послідовний алгоритм із елементами пошуку та обміну даними. Модуль Python використовує алгоритм пошуку по координатах для виявлення пальців — це приклад застосування алгоритмів пошуку на практиці.
Зв’язок із темою “Алгоритми та інформатика 9 клас”
У 9 класі учні вивчають: ● алгоритми пошуку (наприклад, лінійний, двійковий); ● структурне програмування; ● передавання даних між пристроями; ● роботу з умовами, циклами, змінними.
У цьому проєкті все це використано: ● пошук координат пальців — приклад алгоритму пошуку; ● цикл while — безперервна обробка відео; ● if...else — прийняття рішень залежно від ситуації; ● обмін між Python і Arduino — приклад роботи з інтерфейсом Serial.
Практичне застосування Подібні системи можуть використовуватися:
● у “розумному домі” для керування світлом чи шторами; у класах інформатики для демонстрації принципів комп’ютерного зору; ● у медицині — для контролю жестів без дотику; у робототехніці — для навчання маніпуляторів реагувати на рух руки.
Висновок:
● Проєкт показує, як знання з інформатики, алгоритмів і програмування можна застосувати в реальному житті.
● Використовуючи прості пристрої, можна створити інтелектуальну систему керування жестами, що реагує на людину.
● Цей проєкт об’єднує теорію алгоритмів, інженерію, програмування Python і роботу з електронікою Arduino — чудовий приклад сучасної міжпредметної інтеграції.