Топ-10 Arduino-проектов для умного дома: сделай своими руками
Для кого эта статья:
- Новички и хоббисты в электронике и программировании
- Студенты и преподаватели, интересующиеся проектами на 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 Ом
- Светодиод
- Провода для соединения
Инструкция по сборке:
- Подключите фоторезистор к аналоговому входу A0 через резистор 10 кОм.
- Подключите светодиод к цифровому выходу 13 через резистор 220 Ом.
Загрузите следующий код:
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 кОм
- Провода для соединения
Инструкция по сборке:
- Подключите датчик DHT: пин VCC к 5V Arduino, GND к GND, DATA к цифровому пину 2.
- Подключите I2C LCD: пины SDA к A4, SCL к A5, VCC к 5V, GND к GND.
- Установите библиотеки DHT и LiquidCrystal_I2C через менеджер библиотек Arduino IDE.
Загрузите следующий код:
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 Ом
- Провода для соединения
Инструкция по сборке:
- Подключите PIR датчик: VCC к 5V, GND к GND, OUT к цифровому пину 2.
- Подключите светодиод к пину 13 через резистор 220 Ом.
- Подключите пьезоизлучатель к пину 8.
Загрузите следующий код:
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 шт.)
- Пьезоизлучатель
- Провода для соединения
Инструкция по сборке:
- Подключите RFID модуль: SDA к пину 10, SCK к 13, MOSI к 11, MISO к 12, GND к GND, RST к пину 9, 3.3V к 3.3V.
- Подключите сервопривод: сигнальный провод к пину 3, красный к 5V, черный к GND.
- Подключите зеленый светодиод к пину 5 через резистор 220 Ом.
- Подключите красный светодиод к пину 6 через резистор 220 Ом.
- Подключите пьезоизлучатель к пину 8.
- Установите библиотеки MFRC522 и Servo через менеджер библиотек.
Загрузите следующий код:
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В для насоса
- Силиконовые трубки
- Провода для соединения
Инструкция по сборке:
- Подключите датчик влажности почвы: VCC к 5V, GND к GND, аналоговый выход к A0.
- Подключите реле: VCC к 5V, GND к GND, IN к пину 7.
- Подключите насос к реле и внешнему источнику питания 12В.
Загрузите следующий код:
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В для вентилятора
- Провода для соединения
Инструкция по сборке:
- Подключите DHT22: VCC к 5V, GND к GND, DATA к пину 2.
- Подключите I2C LCD: SDA к A4, SCL к A5, VCC к 5V, GND к GND.
- Подключите реле: VCC к 5V, GND к GND, IN к пину 7.
- Подключите вентилятор к реле и внешнему источнику питания 12В.
Загрузите следующий код:
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 адаптером (опционально)
- Провода для соединения
Инструкция по сборке:
- Подключите светодиоды к цифровым пинам 2-6 через резисторы 220 Ом.
- Подключите кнопки к цифровым пинам 7-11, каждую через подтягивающий резистор 10 кОм.
- Подключите пьезоизлучатель к пину 12.
- При использовании LCD дисплея: подключите SDA к A4, SCL к A5, VCC к 5V, GND к GND.
Загрузите следующий код:
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 шт.)
- Провода для соединения
Инструкция по сборке:
- Подключите пьезоизлучатель к пину 8.
- Подключите сервопривод к пину 9.
- Подключите кнопки к пинам 2-4, каждую через подтягивающий резистор 10 кОм.
- Подключите RGB светодиоды к пинам 5-7, 10-12 (каждый цвет через резистор 220 Ом).
Загрузите следующий код:
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 координаты), а третий – поднимать и опускать маркер.
Для этого проекта рекомендую использовать готовые библиотеки для рисования,
Читайте также
- 10 эффективных техник оптимизации кода Arduino для новичков
- 10 музыкальных проектов Arduino: от терменвокса до DJ-контроллера
- Arduino: компоненты и модули для создания электронных проектов
- Умные аквариумы на Arduino
- Arduino IDE: установка и настройка для новичков – простая инструкция
- 10 впечатляющих проектов Arduino с LCD дисплеями: от часов до умного дома
- Примеры проектов с дисплеем и датчиками для Arduino
- 5 проектов Arduino для создания устройств мониторинга сна дома
- Сенсорные экраны Arduino: топ-10 вдохновляющих проектов для начинающих
- Датчики влажности для Arduino: лучшие проекты с автополивом