Механический тюльпан, который всегда цветет — сенсорный LED-цветок на Arduino
Компоненты и материалы
- Arduino Nano R3 — 1 шт.
- Микросервопривод SG90 — 1 шт.
- Сенсор касания TTP223 — 1 шт.
- Латунная проволока 1 мм — 1 шт.
- Латунная трубка 2 мм (внутренний отв. 1,2 мм) — 1 шт.
- Изолированная медная проволока 0,3 мм — 1 шт.
- WS2812B (NeoPixel) 5050 RGB LED — 7 шт.
- Белые SMD LED 1206 — 30 шт.
- Деревянная заготовка для подставки
- Припой, флюс для латуни, клей, изолента
О проекте
Вечнцветущий тюльпан — идеальный подарок не только на День св. Валентина. При лёгком касании к листику на стебле шесть лепестков плавно раскрываются и загораются. В закрытом состоянии лепестки создают красивый фоновый свет с узором «проволочек».

Как это работает
- 6 лепестков, каждый с 5 белыми SMD LED 1206. Аноды лепестков подключены к выводам Arduino, общий катод — корпус цветка.
- Внутри бутона — 7 адресных NeoPixel (WS2812B) для цветного свечения.
- Лепестки открываются толкателем (pushrod), проходящим по стеблю к базе, где установлен сервопривод.
- Листик на стебле — сенсорная площадка TTP223 (ёмкостной датчик касания).
- В деревянной базе: сервопривод, TTP223, Arduino Nano.


Основные этапы сборки
- Лепестки (4 часа) — изготовление по шаблону (гипс или 3D-печать), паяка контура из латунной проволоки 1 мм, установка 5 LED и «проволочек» внутри. Все 6 лепестков должны быть идентичны.
- Бутон (1 час) — пайка 6 лепестков к неправильному шестиугольнику (3 внутренних, 3 внешних лепестка) с петлями из трубки 2 мм.
- Стебель и толкатель (1 час) — латунная трубка-стелб, внутри толкатель из проволоки 1 мм с головкой-шестиугольником. Критично: ствол должен быть идеально перпендикулярен базе и проходить через её центр.
- Механизм лепестков (6 часов) — соединительные стержни между головкой толкателя и штифтами на лепестках. Требует множества подгонок для плавного движения.
- Радужный тычинник (1 час) — 7 NeoPixel между двумя мелкими шестиугольниками, дата-цепочка, питание тонкими проводами 0,3 мм по стеблю вниз.
- Корни — прокладка проводов (2 часа) — 6 проводов от лепестков + 2 от NeoPixel + общий земляной провод обматывают стебель, фиксируют скотчем и суперклеем.
- Цветочный горшок (2 часа) — деревянный цилиндр с впадиной под электронику, отверстия под ствол и листик-сенсор.
- Листик-сенсор (1 час) — изготовление по технологии лепестков, без LED. Подключение к TTP223 (смещение защитного масла для контакта).
- Финальная сборка (2 часа) — установка цветка в горшок, подстройка длины толкателя, крепление сервопривода, подключение всей проводки к Arduino Nano.
Схема подключения к Arduino Nano
- Сервопривод (данные) → D9 (нужен для Adafruit_TiCoServo)
- TTP223 (данные) → D2 (прерывание)
- NeoPixel (DATA) → A0
- Лепестки (аноды) → D3, D4, D5, D6, D10, D11 (через резисторы 200 Ом)
- Общий земляной провод цветка → GND
- NeoPixel VCC → 5V
- TTP223 VCC/GND → 5V/GND
- Сервопривод VCC/GND → 5V/GND

Программирование (1 час)
Код использует библиотеки Adafruit_NeoPixel, Adafruit_TiCoServo, SoftPWM. Реализованы режимы: сон, расцветание, зацветание, угасание, радуга. Касание листика переключает между сном и расцветанием. Цвет бутона выбирается случайно при каждом раскрытии.
Исходный код (flower.ino)
#include#include #include "SoftPWM.h" #define NEOPIXEL_PIN A0 #define TOUCH_SENSOR_PIN 2 #define SERVO_PIN 9 #define SERVO_OPEN 1650 #define SERVO_SAFE_MIDDLE 1000 #define SERVO_CLOSED 775 #define RED 0; #define GREEN 1; #define BLUE 2 float currentRGB[] = {0,0,0}; float changeRGB[] = {0,0,0}; byte newRGB[] = {0,0,0}; #define MODE_SLEEPING 0 #define MODE_BLOOM 3 #define MODE_BLOOMING 4 #define MODE_BLOOMED 5 #define MODE_FADE 6 #define MODE_FADING 7 #define MODE_FADED 8 #define MODE_FALLINGASLEEP 9 #define MODE_RAINBOW 90 byte mode = MODE_FADED; byte petalPins[] = {3,4,5,6,10,11}; Adafruit_NeoPixel pixels = Adafruit_NeoPixel(7, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ400); Adafruit_TiCoServo servo; int servoChange = 1; int servoPosition = SERVO_SAFE_MIDDLE; void setup() { Serial.begin(115200); pixels.begin(); servo.attach(SERVO_PIN, SERVO_CLOSED, SERVO_OPEN); pinMode(TOUCH_SENSOR_PIN, INPUT); attachInterrupt(digitalPinToInterrupt(TOUCH_SENSOR_PIN), _touchISR, RISING); randomSeed(analogRead(A7)); SoftPWMBegin(); pixelsUnifiedColor(pixels.Color(0,0,0)); prepareCrossFade(140,70,0,140); servo.write(servoPosition); } int counter = 0; byte speed = 15; void loop() { boolean done = true; switch (mode) { case MODE_BLOOM: prepareCrossFadeBloom(500); changeMode(MODE_BLOOMING); break; case MODE_BLOOMING: done = crossFade() && done; done = openPetals() && done; done = petalsBloom(counter) && done; if (done) changeMode(MODE_BLOOMED); break; case MODE_FADE: changeMode(MODE_FADING); break; case MODE_FADING: done = crossFade() && done; done = closePetals() && done; done = petalsFade(counter) && done; if (done) changeMode(MODE_FADED); break; case MODE_FADED: changeMode(MODE_FALLINGASLEEP); break; case MODE_FALLINGASLEEP: done = crossFade() && done; done = closePetals() && done; if (done) changeMode(MODE_SLEEPING); break; case MODE_RAINBOW: rainbow(counter); break; } counter++; delay(speed); } // ... (остальные функции: changeMode, _touchISR, petalsBloom, petalsFade, // prepareCrossFadeBloom, rainbow, openPetals, closePetals, // pixelsUnifiedColor, prepareCrossFade, crossFade, colorWheel) // Полный код доступен в исходнике проекта.
Не забудьте скорректировать константы SERVO_OPEN и SERVO_CLOSED под вашу механику.

Производственный процесс
- Латунь: состав, история и современное производство
- Создание портативного ёмкостного сенсорного пианино на Arduino: пошаговое руководство
- Механическая тракция (mechanical linkage): как жесткие штанги управляют устройствами
- Производство точных механических компонентов: полное руководство
- Преимущества механического металлопресса (Ironworker) для точной металлообработки
- Механические прессы: ключевые применения и преимущества
- Механические прессы: функции, типы и промышленные применения
- Механические подшипники: функция, типы и применение
- Основы механического прессового станка: подробное руководство
- Подшипники: полное руководство по типам, функциям и применению