Топ-10 Arduino-проектов для умного дома: сделай своими руками

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • Новички и хоббисты в электронике и программировании
  • Студенты и преподаватели, интересующиеся проектами на Arduino
  • Люди, желающие автоматизировать повседневные задачи и создавать умные устройства для дома

    Arduino превратила мир электроники из территории инженеров в доступное хобби для каждого. Эта маленькая плата открывает огромные возможности — от умного освещения до автоматического полива растений. Сегодня я поделюсь с вами 10 простыми проектами, которые можно собрать своими руками, даже если вы никогда раньше не держали в руках паяльник. Каждый проект снабжен подробными инструкциями, схемами и кодом — просто следуйте указаниям и наблюдайте, как ваш дом становится умнее! 🛠️

Если вас увлекает мир программирования и вы хотите пойти дальше простых Arduino-скетчей, обратите внимание на Обучение Python-разработке от Skypro. Этот курс идеально дополнит ваши навыки работы с Arduino, позволив создавать более сложные системы с веб-интерфейсами, API и облачной интеграцией. Представьте, как ваши домашние Arduino-устройства отправляют данные на сервер, управляемый вашим собственным Python-кодом!

Arduino для дома: что нужно знать перед началом работы

Прежде чем погрузиться в мир домашних Arduino проектов, необходимо разобраться с основами. Arduino — это открытая электронная платформа, основанная на простом в использовании аппаратном и программном обеспечении. Благодаря своей доступности и простоте, Arduino стала популярной среди хоббистов, студентов и профессионалов.

Для начала работы с Arduino вам понадобится несколько базовых компонентов:

  • Arduino плата (рекомендую Arduino Uno для начинающих)
  • USB-кабель для подключения к компьютеру
  • Макетная плата для создания прототипов
  • Набор перемычек (проводов) различной длины
  • Базовые электронные компоненты: резисторы, светодиоды, кнопки
  • Датчики в зависимости от проекта (температуры, влажности, движения и т.д.)

Для программирования Arduino используется специальная среда разработки Arduino IDE. Ее можно бесплатно скачать с официального сайта. Язык программирования Arduino основан на C++ и относительно прост в освоении даже для новичков.

Вот несколько ключевых понятий, которые помогут вам в реализации домашних проектов:

Понятие Описание Применение в проектах
Цифровые пины Могут быть настроены как входы или выходы Управление LED, чтение состояния кнопок
Аналоговые пины Считывают аналоговые значения (0-1023) Чтение данных с датчиков
PWM (ШИМ) Имитация аналогового выхода Регулировка яркости, управление моторами
Serial Monitor Окно для отладки в Arduino IDE Вывод данных с датчиков для тестирования

Перед началом любого проекта рекомендую нарисовать схему подключения на бумаге или использовать программы для моделирования, такие как Fritzing или Tinkercad. Это поможет избежать ошибок при сборке и сэкономит время.

Важный момент — питание вашего Arduino. Для тестирования можно использовать USB-подключение к компьютеру, но для постоянных домашних проектов лучше приобрести адаптер питания 9В или использовать батарейный блок.

Игорь Петров, преподаватель робототехники

Когда я только начинал работать с Arduino, я совершил классическую ошибку новичка — подключил слишком много компонентов к одной плате. В результате некоторые датчики работали нестабильно, а некоторые вообще отказывались функционировать. После долгих часов отладки я понял, что проблема в питании — Arduino просто не могла обеспечить достаточный ток для всех устройств.

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

Пошаговый план для смены профессии

Умный свет и метеостанция: первые проекты для новичка

Давайте начнем наше путешествие в мир Arduino с двух классических проектов для новичков: управления освещением и создания домашней метеостанции. Эти проекты не требуют сложных компонентов и помогут вам освоить базовые принципы работы с микроконтроллером. 💡

Проект 1: Автоматическое ночное освещение

Это простейший проект умного освещения, который автоматически включает светодиод при наступлении темноты.

Необходимые компоненты:

  • Arduino Uno
  • Фоторезистор
  • Резистор 10 кОм
  • Резистор 220 Ом
  • Светодиод
  • Провода для соединения

Инструкция по сборке:

  1. Подключите фоторезистор к аналоговому входу A0 через резистор 10 кОм.
  2. Подключите светодиод к цифровому выходу 13 через резистор 220 Ом.
  3. Загрузите следующий код:

    arduino
    Скопировать код
     int sensorPin = A0;    // выбираем вход для датчика освещенности
     int ledPin = 13;       // выбираем пин для светодиода
     int threshold = 500;   // пороговое значение освещенности
    
     void setup() {
       pinMode(ledPin, OUTPUT);
       Serial.begin(9600);
     }
    
     void loop() {
       int sensorValue = analogRead(sensorPin);
       Serial.println(sensorValue);
       
       if (sensorValue < threshold) {
         digitalWrite(ledPin, HIGH);  // включить светодиод
       } else {
         digitalWrite(ledPin, LOW);   // выключить светодиод
       }
       
       delay(100);
     }
     
    

Этот проект можно легко модифицировать, добавив реле для управления настоящей лампой вместо светодиода, или создать RGB-освещение с плавной сменой цветов.

Проект 2: Домашняя метеостанция с выводом на LCD

Создадим простую метеостанцию, которая измеряет температуру и влажность и отображает данные на LCD экране.

Необходимые компоненты:

  • Arduino Uno
  • Датчик температуры и влажности DHT11 или DHT22
  • LCD экран 16x2 с I2C адаптером
  • Резистор 10 кОм
  • Провода для соединения

Инструкция по сборке:

  1. Подключите датчик DHT: пин VCC к 5V Arduino, GND к GND, DATA к цифровому пину 2.
  2. Подключите I2C LCD: пины SDA к A4, SCL к A5, VCC к 5V, GND к GND.
  3. Установите библиотеки DHT и LiquidCrystal_I2C через менеджер библиотек Arduino IDE.
  4. Загрузите следующий код:

    arduino
    Скопировать код
     #include "DHT.h"
     #include <Wire.h>
     #include <LiquidCrystal_I2C.h>
    
     #define DHTPIN 2
     #define DHTTYPE DHT11   // DHT 11 или DHT 22
    
     DHT dht(DHTPIN, DHTTYPE);
     LiquidCrystal_I2C lcd(0x27, 16, 2);  // установите адрес I2C
    
     void setup() {
       Serial.begin(9600);
       lcd.init();
       lcd.backlight();
       dht.begin();
       
       lcd.setCursor(0, 0);
       lcd.print("Метеостанция");
       lcd.setCursor(0, 1);
       lcd.print("на Arduino");
       delay(2000);
     }
    
     void loop() {
       float h = dht.readHumidity();
       float t = dht.readTemperature();
       
       if (isnan(h) || isnan(t)) {
         lcd.clear();
         lcd.setCursor(0, 0);
         lcd.print("Ошибка чтения");
         return;
       }
       
       lcd.clear();
       lcd.setCursor(0, 0);
       lcd.print("Темп.: ");
       lcd.print(t);
       lcd.print(" C");
       
       lcd.setCursor(0, 1);
       lcd.print("Влаж.: ");
       lcd.print(h);
       lcd.print(" %");
       
       delay(2000);
     }
     
    

Эту метеостанцию можно расширить, добавив датчик давления BMP280 для измерения атмосферного давления или датчик MQ-135 для контроля качества воздуха.

Анна Сергеева, преподаватель информатики

Первый проект на Arduino, который мы сделали с учениками 7 класса, был именно такой метеостанцией. Вспоминаю, как загорелись глаза детей, когда на экране появились первые показания температуры и влажности. Но настоящий восторг вызвала следующая доработка — мы добавили RGB-светодиод, который менял цвет в зависимости от температуры: синий для холодно, зеленый для комфортно, красный для жарко.

Один из учеников, Миша, так увлекся проектом, что доработал его дома, добавив звуковое оповещение через пьезоизлучатель, когда влажность падала ниже 40%. Его родители рассказывали, что метеостанция стоит у них на кухне и стала незаменимым помощником. Особенно зимой, когда из-за отопления воздух становится сухим, и устройство напоминает о необходимости увлажнения.

Этот опыт показывает, насколько важно начинать с простых, но практичных проектов, которые могут быть легко модифицированы и действительно использоваться в повседневной жизни.

Безопасность и комфорт: охранные системы на Arduino

Создание домашних охранных систем на Arduino — это не только увлекательный проект, но и практичное решение для повышения безопасности вашего жилища. Рассмотрим два проекта, которые помогут защитить ваш дом. 🔐

Проект 3: Датчик движения с оповещением

Этот простой проект создаст систему, которая обнаруживает движение и активирует звуковое и световое оповещение.

Необходимые компоненты:

  • Arduino Uno
  • PIR датчик движения HC-SR501
  • Пьезоизлучатель (зуммер)
  • Светодиод
  • Резистор 220 Ом
  • Провода для соединения

Инструкция по сборке:

  1. Подключите PIR датчик: VCC к 5V, GND к GND, OUT к цифровому пину 2.
  2. Подключите светодиод к пину 13 через резистор 220 Ом.
  3. Подключите пьезоизлучатель к пину 8.
  4. Загрузите следующий код:

    arduino
    Скопировать код
     int pirPin = 2;        // пин датчика движения
     int ledPin = 13;       // пин светодиода
     int buzzerPin = 8;     // пин пьезоизлучателя
     int alarmDuration = 1000;  // длительность тревоги в мс
    
     void setup() {
       pinMode(pirPin, INPUT);
       pinMode(ledPin, OUTPUT);
       pinMode(buzzerPin, OUTPUT);
       Serial.begin(9600);
       Serial.println("Система охраны активирована");
     }
    
     void loop() {
       if (digitalRead(pirPin) == HIGH) {
         Serial.println("Обнаружено движение!");
         // Активируем тревогу
         digitalWrite(ledPin, HIGH);
         tone(buzzerPin, 1000);  // 1000 Гц
         delay(alarmDuration);
         
         // Выключаем тревогу
         digitalWrite(ledPin, LOW);
         noTone(buzzerPin);
         delay(500);  // небольшая пауза между тревогами
       } else {
         digitalWrite(ledPin, LOW);
         noTone(buzzerPin);
       }
       delay(100);
     }
     
    

Этот базовый проект можно усовершенствовать, добавив отправку уведомлений через Bluetooth или WiFi модуль на смартфон или интеграцию с системой видеонаблюдения.

Проект 4: Умный дверной замок с RFID

Создадим электронный замок, который открывается при поднесении авторизованной RFID-карты или брелока.

Необходимые компоненты:

  • Arduino Uno
  • RFID модуль RC522
  • Сервопривод для имитации механизма замка
  • Светодиоды: зеленый и красный
  • Резисторы 220 Ом (2 шт.)
  • Пьезоизлучатель
  • Провода для соединения

Инструкция по сборке:

  1. Подключите RFID модуль: SDA к пину 10, SCK к 13, MOSI к 11, MISO к 12, GND к GND, RST к пину 9, 3.3V к 3.3V.
  2. Подключите сервопривод: сигнальный провод к пину 3, красный к 5V, черный к GND.
  3. Подключите зеленый светодиод к пину 5 через резистор 220 Ом.
  4. Подключите красный светодиод к пину 6 через резистор 220 Ом.
  5. Подключите пьезоизлучатель к пину 8.
  6. Установите библиотеки MFRC522 и Servo через менеджер библиотек.
  7. Загрузите следующий код:

    arduino
    Скопировать код
     #include <SPI.h>
     #include <MFRC522.h>
     #include <Servo.h>
    
     #define SS_PIN 10
     #define RST_PIN 9
    
     MFRC522 rfid(SS_PIN, RST_PIN);
     Servo lockServo;
    
     int greenLED = 5;
     int redLED = 6;
     int buzzerPin = 8;
    
     // Разрешенный ID карты (замените на ID вашей карты)
     byte authorizedID[4] = {0x12, 0x34, 0x56, 0x78};
    
     void setup() {
       Serial.begin(9600);
       SPI.begin();
       rfid.PCD_Init();
       
       lockServo.attach(3);
       lockServo.write(0);  // закрытое положение замка
       
       pinMode(greenLED, OUTPUT);
       pinMode(redLED, OUTPUT);
       pinMode(buzzerPin, OUTPUT);
       
       digitalWrite(redLED, HIGH);  // изначально замок закрыт
       
       Serial.println("Система доступа активирована");
     }
    
     void loop() {
       // Проверяем наличие новой карты
       if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
         return;
       
       Serial.print("ID карты: ");
       for (byte i = 0; i < rfid.uid.size; i++) {
         Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
         Serial.print(rfid.uid.uidByte[i], HEX);
       }
       Serial.println();
       
       // Проверяем авторизацию
       if (checkAuthorized(rfid.uid.uidByte)) {
         Serial.println("Доступ разрешен");
         unlockDoor();
       } else {
         Serial.println("Доступ запрещен");
         denyAccess();
       }
       
       // Останавливаем чтение
       rfid.PICC_HaltA();
       rfid.PCD_StopCrypto1();
     }
    
     bool checkAuthorized(byte* cardID) {
       for (byte i = 0; i < 4; i++) {
         if (cardID[i] != authorizedID[i]) return false;
       }
       return true;
     }
    
     void unlockDoor() {
       digitalWrite(redLED, LOW);
       digitalWrite(greenLED, HIGH);
       tone(buzzerPin, 1000, 200);
       
       lockServo.write(90);  // открываем замок
       
       delay(3000);  // дверь остается открытой 3 секунды
       
       lockServo.write(0);  // закрываем замок
       digitalWrite(greenLED, LOW);
       digitalWrite(redLED, HIGH);
     }
    
     void denyAccess() {
       digitalWrite(redLED, HIGH);
       
       // Звуковой сигнал отказа
       tone(buzzerPin, 300, 200);
       delay(200);
       tone(buzzerPin, 300, 200);
       delay(1000);
     }
     
    

При первом запуске программы поднесите вашу RFID-карту и запишите ее ID из Serial Monitor. Затем замените значения в массиве authorizedID на ваши реальные значения.

Функция Базовый проект Расширенные возможности
Аутентификация Один RFID-ключ Несколько ключей, PIN-код, биометрия
Уведомления Локальные светодиод и зуммер SMS, push-уведомления, email
Журналирование Вывод на Serial Monitor Запись на SD-карту, облачное хранение
Безопасность Базовая проверка ID Шифрование, временные ключи, блокировка после попыток

Эти проекты служат отличным введением в мир домашней автоматизации безопасности. По мере роста ваших навыков, вы можете интегрировать несколько систем в единую сеть умного дома. 🏠

Автоматизация полива и климат-контроль с Arduino

Arduino — идеальное решение для автоматизации систем ухода за растениями и поддержания комфортного микроклимата в помещении. Рассмотрим несколько проектов, которые сделают вашу жизнь удобнее и сэкономят время. 🌱

Проект 5: Автоматическая система полива растений

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

Необходимые компоненты:

  • Arduino Uno
  • Датчик влажности почвы
  • Реле 5В
  • Мини водяной насос 12В
  • Адаптер питания 12В для насоса
  • Силиконовые трубки
  • Провода для соединения

Инструкция по сборке:

  1. Подключите датчик влажности почвы: VCC к 5V, GND к GND, аналоговый выход к A0.
  2. Подключите реле: VCC к 5V, GND к GND, IN к пину 7.
  3. Подключите насос к реле и внешнему источнику питания 12В.
  4. Загрузите следующий код:

    arduino
    Скопировать код
     int soilMoisturePin = A0;    // пин датчика влажности почвы
     int pumpRelayPin = 7;        // пин реле насоса
     int dryThreshold = 500;      // пороговое значение сухой почвы
     int pumpRunTime = 3000;      // время работы насоса в мс
     int checkInterval = 3600000; // интервал проверки (1 час)
    
     void setup() {
       pinMode(pumpRelayPin, OUTPUT);
       digitalWrite(pumpRelayPin, HIGH);  // выключаем реле (логика инвертирована)
       Serial.begin(9600);
       Serial.println("Система автополива запущена");
     }
    
     void loop() {
       int moisture = analogRead(soilMoisturePin);
       Serial.print("Уровень влажности: ");
       Serial.println(moisture);
       
       if (moisture > dryThreshold) {
         Serial.println("Почва сухая, начинаю полив...");
         waterPlant();
       } else {
         Serial.println("Влажность в норме, полив не требуется");
       }
       
       Serial.println("Следующая проверка через 1 час");
       delay(checkInterval);
     }
    
     void waterPlant() {
       digitalWrite(pumpRelayPin, LOW);   // включаем насос
       delay(pumpRunTime);                // ждем
       digitalWrite(pumpRelayPin, HIGH);  // выключаем насос
       
       // Ждем, чтобы дать почве впитать воду
       Serial.println("Полив закончен, даю почве впитать воду...");
       delay(10000);
     }
     
    

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

Проект 6: Умный вентилятор с контролем температуры

Этот проект создаст автоматический вентилятор, который включается при повышении температуры выше заданного порога.

Необходимые компоненты:

  • Arduino Uno
  • Датчик температуры и влажности DHT22
  • Реле 5В
  • Вентилятор 12В
  • LCD дисплей 16x2 с I2C адаптером
  • Адаптер питания 12В для вентилятора
  • Провода для соединения

Инструкция по сборке:

  1. Подключите DHT22: VCC к 5V, GND к GND, DATA к пину 2.
  2. Подключите I2C LCD: SDA к A4, SCL к A5, VCC к 5V, GND к GND.
  3. Подключите реле: VCC к 5V, GND к GND, IN к пину 7.
  4. Подключите вентилятор к реле и внешнему источнику питания 12В.
  5. Загрузите следующий код:

    arduino
    Скопировать код
     #include <DHT.h>
     #include <Wire.h>
     #include <LiquidCrystal_I2C.h>
    
     #define DHTPIN 2
     #define DHTTYPE DHT22
    
     int fanRelayPin = 7;        // пин реле вентилятора
     float tempThreshold = 26.0;  // порог включения вентилятора в °C
     float hysteresis = 2.0;      // гистерезис в °C
    
     DHT dht(DHTPIN, DHTTYPE);
     LiquidCrystal_I2C lcd(0x27, 16, 2);
    
     boolean fanRunning = false;
    
     void setup() {
       pinMode(fanRelayPin, OUTPUT);
       digitalWrite(fanRelayPin, HIGH);  // выключаем реле
       
       Serial.begin(9600);
       dht.begin();
       lcd.init();
       lcd.backlight();
       
       lcd.setCursor(0, 0);
       lcd.print("Умный вентилятор");
       lcd.setCursor(0, 1);
       lcd.print("Инициализация...");
       delay(2000);
       
       Serial.println("Система контроля температуры запущена");
     }
    
     void loop() {
       // Чтение температуры и влажности
       float humidity = dht.readHumidity();
       float temperature = dht.readTemperature();
       
       // Проверка успешности считывания
       if (isnan(humidity) || isnan(temperature)) {
         Serial.println("Ошибка чтения с DHT сенсора!");
         lcd.clear();
         lcd.setCursor(0, 0);
         lcd.print("Ошибка сенсора");
         return;
       }
       
       Serial.print("Температура: ");
       Serial.print(temperature);
       Serial.print("°C, Влажность: ");
       Serial.print(humidity);
       Serial.println("%");
       
       // Обновление LCD
       lcd.clear();
       lcd.setCursor(0, 0);
       lcd.print("Темп: ");
       lcd.print(temperature, 1);
       lcd.print("C");
       
       lcd.setCursor(0, 1);
       lcd.print("Влаж: ");
       lcd.print(humidity, 1);
       lcd.print("% ");
       
       // Логика управления вентилятором с гистерезисом
       if (!fanRunning && temperature >= tempThreshold) {
         fanRunning = true;
         digitalWrite(fanRelayPin, LOW);  // включаем вентилятор
         lcd.setCursor(13, 1);
         lcd.print("ВКЛ");
       } else if (fanRunning && temperature <= (tempThreshold – hysteresis)) {
         fanRunning = false;
         digitalWrite(fanRelayPin, HIGH);  // выключаем вентилятор
         lcd.setCursor(13, 1);
         lcd.print("ВЫКЛ");
       } else {
         lcd.setCursor(13, 1);
         lcd.print(fanRunning ? "ВКЛ" : "ВЫКЛ");
       }
       
       delay(10000);  // проверка каждые 10 секунд
     }
     
    

Важной особенностью этого проекта является использование гистерезиса — разницы между температурой включения и выключения. Это предотвращает частые включения/выключения вентилятора при колебаниях температуры около порогового значения.

Проект 7: Система мониторинга и управления микроклиматом в теплице

Расширим наши знания и создадим более комплексную систему для управления микроклиматом в теплице или комнатном растениеводстве.

Необходимые компоненты:

  • Arduino Mega (нужно больше пинов для этого проекта)
  • Датчик температуры и влажности DHT22
  • Датчик влажности почвы
  • Датчик освещенности BH1750
  • Реле 4-канальное
  • LCD дисплей 20x4 с I2C адаптером
  • Кнопки для управления меню (4 шт.)
  • Модуль часов реального времени DS3231
  • Водяной насос, вентилятор, LED-освещение для растений
  • Провода для соединения

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

Развлекательные проекты Arduino для всей семьи

Arduino — это не только инструмент для создания практичных умных устройств, но и отличная платформа для семейных развлекательных проектов. Вот несколько идей, которые понравятся всем членам семьи и помогут весело провести время вместе. 🎮

Проект 8: Интерактивная игра "Проверь реакцию"

Эта простая, но увлекательная игра проверит, насколько быстро игроки могут реагировать на световые сигналы.

Необходимые компоненты:

  • Arduino Uno
  • Светодиоды разных цветов (5 шт.)
  • Кнопки (5 шт.)
  • Резисторы 220 Ом (5 шт.)
  • Резисторы 10 кОм (5 шт.)
  • Пьезоизлучатель
  • LCD дисплей 16x2 с I2C адаптером (опционально)
  • Провода для соединения

Инструкция по сборке:

  1. Подключите светодиоды к цифровым пинам 2-6 через резисторы 220 Ом.
  2. Подключите кнопки к цифровым пинам 7-11, каждую через подтягивающий резистор 10 кОм.
  3. Подключите пьезоизлучатель к пину 12.
  4. При использовании LCD дисплея: подключите SDA к A4, SCL к A5, VCC к 5V, GND к GND.
  5. Загрузите следующий код:

    arduino
    Скопировать код
     #include <Wire.h>
     #include <LiquidCrystal_I2C.h>
    
     LiquidCrystal_I2C lcd(0x27, 16, 2);
     
     // Настройка пинов
     int ledPins[] = {2, 3, 4, 5, 6};
     int buttonPins[] = {7, 8, 9, 10, 11};
     int buzzerPin = 12;
     
     int score = 0;
     int rounds = 0;
     int maxRounds = 10;
     
     unsigned long startTime;
     unsigned long reactionTime;
    
     void setup() {
       Serial.begin(9600);
       lcd.init();
       lcd.backlight();
       
       // Инициализация светодиодов
       for (int i = 0; i < 5; i++) {
         pinMode(ledPins[i], OUTPUT);
       }
       
       // Инициализация кнопок
       for (int i = 0; i < 5; i++) {
         pinMode(buttonPins[i], INPUT_PULLUP);
       }
       
       pinMode(buzzerPin, OUTPUT);
       
       // Приветствие
       lcd.setCursor(0, 0);
       lcd.print("Игра на реакцию");
       lcd.setCursor(0, 1);
       lcd.print("Нажмите кнопку");
       
       // Ждем любую кнопку для начала
       boolean gameStarted = false;
       while (!gameStarted) {
         for (int i = 0; i < 5; i++) {
           if (digitalRead(buttonPins[i]) == LOW) {
             gameStarted = true;
             break;
           }
         }
       }
       
       // Звуковой сигнал о начале игры
       tone(buzzerPin, 1000, 200);
       delay(1000);
     }
    
     void loop() {
       if (rounds < maxRounds) {
         playRound();
       } else {
         showFinalScore();
       }
     }
    
     void playRound() {
       // Очищаем дисплей и показываем текущий раунд
       lcd.clear();
       lcd.setCursor(0, 0);
       lcd.print("Раунд: ");
       lcd.print(rounds + 1);
       lcd.setCursor(0, 1);
       lcd.print("Счет: ");
       lcd.print(score);
       
       delay(1000);
       
       // Выбираем случайный светодиод
       int ledIndex = random(0, 5);
       
       // Ждем случайное время перед включением светодиода
       delay(random(1000, 3000));
       
       // Включаем светодиод и запускаем таймер
       digitalWrite(ledPins[ledIndex], HIGH);
       startTime = millis();
       
       // Ждем нажатия кнопки или таймаут
       boolean correctButtonPressed = false;
       boolean anyButtonPressed = false;
       
       while (!anyButtonPressed && (millis() – startTime < 2000)) {
         for (int i = 0; i < 5; i++) {
           if (digitalRead(buttonPins[i]) == LOW) {
             anyButtonPressed = true;
             if (i == ledIndex) {
               correctButtonPressed = true;
             }
             break;
           }
         }
       }
       
       // Выключаем светодиод
       digitalWrite(ledPins[ledIndex], LOW);
       
       // Вычисляем время реакции и обновляем счет
       reactionTime = millis() – startTime;
       
       if (correctButtonPressed) {
         // Правильная кнопка
         score += max(0, 500 – reactionTime / 4);
         
         lcd.clear();
         lcd.setCursor(0, 0);
         lcd.print("Верно! +");
         lcd.print(max(0, 500 – reactionTime / 4));
         lcd.setCursor(0, 1);
         lcd.print("Время: ");
         lcd.print(reactionTime);
         lcd.print(" мс");
         
         tone(buzzerPin, 2000, 200);
       } else if (anyButtonPressed) {
         // Неправильная кнопка
         lcd.clear();
         lcd.setCursor(0, 0);
         lcd.print("Ошибка! +0");
         
         tone(buzzerPin, 300, 500);
       } else {
         // Таймаут
         lcd.clear();
         lcd.setCursor(0, 0);
         lcd.print("Слишком медленно");
         
         tone(buzzerPin, 150, 500);
       }
       
       rounds++;
       delay(1500);
     }
    
     void showFinalScore() {
       lcd.clear();
       lcd.setCursor(0, 0);
       lcd.print("Игра окончена!");
       lcd.setCursor(0, 1);
       lcd.print("Итого: ");
       lcd.print(score);
       
       // Сигнал окончания игры
       tone(buzzerPin, 1500, 200);
       delay(300);
       tone(buzzerPin, 2000, 200);
       delay(300);
       tone(buzzerPin, 2500, 500);
       
       // Ждем нажатия любой кнопки для перезапуска
       boolean restart = false;
       while (!restart) {
         for (int i = 0; i < 5; i++) {
           if (digitalRead(buttonPins[i]) == LOW) {
             restart = true;
             score = 0;
             rounds = 0;
             break;
           }
         }
       }
     }
     
    

Это отличная игра для развития рефлексов и соревнования между членами семьи. Вы можете модифицировать ее, добавив различные уровни сложности или звуковые сигналы.

Проект 9: Электронная музыкальная шкатулка

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

Необходимые компоненты:

  • Arduino Uno
  • Пьезоизлучатель (пьезодинамик)
  • Сервопривод
  • Кнопки (3 шт.)
  • Резисторы 10 кОм (3 шт.)
  • Светодиоды RGB (2-3 шт.)
  • Резисторы 220 Ом (6-9 шт.)
  • Провода для соединения

Инструкция по сборке:

  1. Подключите пьезоизлучатель к пину 8.
  2. Подключите сервопривод к пину 9.
  3. Подключите кнопки к пинам 2-4, каждую через подтягивающий резистор 10 кОм.
  4. Подключите RGB светодиоды к пинам 5-7, 10-12 (каждый цвет через резистор 220 Ом).
  5. Загрузите следующий код:

    arduino
    Скопировать код
     #include <Servo.h>
     #include "pitches.h"  // Необходимо создать файл с определениями нот
    
     Servo myServo;
    
     // Пины
     int buzzerPin = 8;
     int servoPin = 9;
    
     int button1Pin = 2;  // Кнопка для первой мелодии
     int button2Pin = 3;  // Кнопка для второй мелодии
     int button3Pin = 4;  // Кнопка для третьей мелодии
    
     // Пины RGB LED 1
     int redPin1 = 5;
     int greenPin1 = 6;
     int bluePin1 = 7;
    
     // Пины RGB LED 2
     int redPin2 = 10;
     int greenPin2 = 11;
     int bluePin2 = 12;
    
     // Массив с определениями нот (создайте файл pitches.h)
     // #define NOTE_C4  262
     // #define NOTE_D4  294
     // #define NOTE_E4  330
     // #define NOTE_F4  349
     // #define NOTE_G4  392
     // #define NOTE_A4  440
     // #define NOTE_B4  494
     // #define NOTE_C5  523
     // и так далее для всех нот
    
     // Определение мелодии 1 – "Happy Birthday"
     int melody1[] = {
       NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_F4, NOTE_E4,
       NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_G4, NOTE_F4,
       NOTE_C4, NOTE_C4, NOTE_C5, NOTE_A4, NOTE_F4, NOTE_E4, NOTE_D4,
       NOTE_AS4, NOTE_AS4, NOTE_A4, NOTE_F4, NOTE_G4, NOTE_F4
     };
    
     // Длительности нот: 4 = четвертная нота, 8 = восьмая нота, и т.д.
     int noteDurations1[] = {
       8, 8, 4, 4, 4, 2,
       8, 8, 4, 4, 4, 2,
       8, 8, 4, 4, 4, 4, 4,
       8, 8, 4, 4, 4, 2
     };
    
     // Определение мелодии 2 – "Jingle Bells"
     int melody2[] = {
       NOTE_E4, NOTE_E4, NOTE_E4,
       NOTE_E4, NOTE_E4, NOTE_E4,
       NOTE_E4, NOTE_G4, NOTE_C4, NOTE_D4,
       NOTE_E4,
       NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4,
       NOTE_F4, NOTE_E4, NOTE_E4, NOTE_E4, NOTE_E4,
       NOTE_E4, NOTE_D4, NOTE_D4, NOTE_E4,
       NOTE_D4, NOTE_G4
     };
    
     int noteDurations2[] = {
       4, 4, 2,
       4, 4, 2,
       4, 4, 4, 4,
       1,
       4, 4, 4, 4,
       4, 4, 4, 8, 8,
       4, 4, 4, 4,
       2, 2
     };
    
     // Определение мелодии 3 – ваша мелодия
     // ...
    
     void setup() {
       pinMode(buzzerPin, OUTPUT);
       
       pinMode(button1Pin, INPUT_PULLUP);
       pinMode(button2Pin, INPUT_PULLUP);
       pinMode(button3Pin, INPUT_PULLUP);
       
       pinMode(redPin1, OUTPUT);
       pinMode(greenPin1, OUTPUT);
       pinMode(bluePin1, OUTPUT);
       
       pinMode(redPin2, OUTPUT);
       pinMode(greenPin2, OUTPUT);
       pinMode(bluePin2, OUTPUT);
       
       myServo.attach(servoPin);
       myServo.write(0);  // начальное положение
       
       // Приветственный сигнал
       tone(buzzerPin, 1000, 200);
       delay(200);
       tone(buzzerPin, 1500, 200);
     }
    
     void loop() {
       // Проверяем нажатия кнопок
       if (digitalRead(button1Pin) == LOW) {
         playMelody(melody1, noteDurations1, sizeof(melody1) / sizeof(melody1[0]));
       }
       
       if (digitalRead(button2Pin) == LOW) {
         playMelody(melody2, noteDurations2, sizeof(melody2) / sizeof(melody2[0]));
       }
       
       if (digitalRead(button3Pin) == LOW) {
         // Проигрывание третьей мелодии
         // ...
       }
       
       delay(50);
     }
    
     void playMelody(int melody[], int noteDurations[], int noteCount) {
       // Открываем крышку шкатулки
       for (int angle = 0; angle <= 90; angle += 3) {
         myServo.write(angle);
         delay(15);
       }
       
       // Проигрываем мелодию
       for (int thisNote = 0; thisNote < noteCount; thisNote++) {
         // Вычисляем длительность ноты
         int noteDuration = 1000 / noteDurations[thisNote];
         tone(buzzerPin, melody[thisNote], noteDuration);
         
         // Меняем цвета светодиодов в такт мелодии
         setRandomColor(redPin1, greenPin1, bluePin1);
         setRandomColor(redPin2, greenPin2, bluePin2);
         
         // Пауза между нотами
         int pauseBetweenNotes = noteDuration * 1.30;
         delay(pauseBetweenNotes);
         noTone(buzzerPin);
       }
       // Выключаем светодиоды
       setColor(redPin1, greenPin1, bluePin1, 0, 0, 0);
       setColor(redPin2, greenPin2, bluePin2, 0, 0, 0);
       
       // Закрываем крышку
       for (int angle = 90; angle >= 0; angle -= 3) {
         myServo.write(angle);
         delay(15);
       }
     }
    
     void setRandomColor(int redPin, int greenPin, int bluePin) {
       int r = random(0, 256);
       int g = random(0, 256);
       int b = random(0, 256);
       setColor(redPin, greenPin, bluePin, r, g, b);
     }
    
     void setColor(int redPin, int greenPin, int bluePin, int r, int g, int b) {
       analogWrite(redPin, r);
       analogWrite(greenPin, g);
       analogWrite(bluePin, b);
     }
     
    

Для этого проекта вам понадобится создать файл pitches.h с определениями нот. Вы можете найти его в примерах Arduino IDE или в Интернете. Шкатулку можно декорировать, используя картон, дерево или 3D-печатные детали.

Проект 10: Робот-художник

Этот забавный проект позволит создать роботизированное устройство, которое рисует различные узоры на бумаге.

Необходимые компоненты:

  • Arduino Uno
  • Два сервомотора
  • Один сервомотор с подъемным механизмом для ручки/маркера
  • Кнопки (3-4 шт.)
  • Резисторы 10 кОм (3-4 шт.)
  • Провода для соединения
  • Маркер или карандаш
  • Материалы для корпуса (картон, пластик, дерево)

Это более сложный проект, для которого потребуется механическая конструкция. Два сервопривода будут управлять положением маркера на плоскости (X и Y координаты), а третий – поднимать и опускать маркер.

Для этого проекта рекомендую использовать готовые библиотеки для рисования,

Читайте также

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Что такое Arduino?
1 / 5

Загрузка...