Поскольку мир с каждым днем становится все более урбанизированным, к сожалению, за счет природы, становится все более сложной задачей включить природу в повседневную жизнь. Технология, на которую мы наткнулись, светодиодное освещение для внутреннего садоводства, предлагает решение этой проблемы, поскольку она стимулирует и позволяет расти растениям в домах, которые не всегда или не постоянно получают солнечный свет. Возможные применения технологии могут быть в комнатах, которые не обращены к солнцу, странах на крайнем севере или юге земного шара, которые получают ограниченное количество дневного света летом или зимой или для фотосинтеза / роста растений в то время, когда солнце не светит. не встала.
Омар Аззалини
Сандер Верхаге
Шаг 1: КОМПОНЕНТЫ И СВЕТОДИОДЫ ПОПРОБУЙТЕ
Перед тем как начать, убедитесь, что у вас есть все необходимое. У вас могут быть немного разные компоненты, но вы можете следовать руководству и посмотреть, как с ними работать.
Светодиодные компоненты
4 красных светодиода мощностью 3 Вт (740 нм)
3x 1 Вт синий светодиод (450 нм)
1x резистор 33 кОм (1/4 Вт)
1x резистор 390 Ом (1/4 Вт)
2 резистора 1 Ом (1 Вт)
2x транзистора BD139 NPN
регулятор напряжения
1x L7809
1x 100 мкФ конденсатор
1x 10 мкФ конденсатор
модуль часов реального времени
1307DS RTC
контролер
1x плата Arduino UNO
1x плата Arduino MICRO
источник питания
12В 2А БП
разъем
Проточная плата 20 x 50 мм
Шаг 2: светодиоды TRY
Поскольку транзисторы и резистор не очень надежны, лучше попробовать, какой резистор необходим для идеального выходного тока.
Поэтому разместите светодиоды последовательно по цвету и, начиная с заданных компонентов (BD139 в качестве транзистора, 33 кОм и 390 Ом в качестве резистора), отрегулируйте ток светодиодов, изменив номинал резистора. Имейте в виду, что более высокое значение сопротивления означает меньший ток. Как показано на последнем рисунке, мы можем проверить с помощью мультиметра фактическую силу тока, избегая превышения максимального поддерживаемого тока.
На этом этапе вы можете напрямую подключить вывод базы транзистора к выходу ARDUINO 5V. Таким образом вы сразу достигнете максимального тока, проходящего через цепь.
Шаг 3: ДОБАВИТЬ ARDUINO
Поскольку светодиоды питаются от источника питания 12 В, нам необходимо снизить напряжение, чтобы обеспечить более стабильную работу.
Даже если ARDUINO UNO и MICRO поддерживают диапазон 7-12 В, если он всегда питается от 12 В, встроенный регулятор напряжения ARDUINO перегреется, что приведет к повреждению всей платы.
С помощью простого L7809 и двух параллельных конденсаторов, как это показано на схеме и на фотографии, мы можем легко снизить напряжение до 9 В и запитать ARDUINO UNO с вывода Vin.
Шаг 4: ПОДГОТОВЬТЕ РОЗЕТКУ
Чтобы иметь очень маленький и компактный форм-фактор, полезно заменить плату и использовать ARDUINO MICRO. Он поддерживает те же возможности, что и ARDUINO UNO, но в 4 раза меньшем форм-факторе.
Тем более, что для этого удобны уже распаянные штыри платы MICRO. На фотографиях описано, как мы проектируем печатную плату, но вы можете сделать свой макет. Но имейте в виду, что, поскольку мы используем мощные светодиоды, транзистор будет нагреваться до высокой температуры при полном питании, поэтому требуется надлежащее рассеивание.
Шаг 5: ТЕСТИРОВАНИЕ
Перед подключением ARDUINO MICRO уместно его протестировать. Поэтому убедитесь, что все работает с платой ARDUINO UNO, и исправьте возможную ошибку. Хотя это кажется бесполезным шагом, он позволит избежать неприятного ожога доски.
Кроме того, внимательно проверьте, чтобы все напряжения и токи оставались такими же, как в предыдущих шагах.
Шаг 6: ПОДКЛЮЧИТЕ ЕГО
Когда вы уверены в своей работе, просто подключите ее и заставьте работать.
Поскольку в этот момент транзисторы подключены к цифровым выводам 3 и 6, вы больше не можете подавать на них 5 В. Пришло время написать простой код, чтобы правильно его протестировать.
int красный = 3; // вывод ШИМ, к которому подключен светодиод
int blue = 6; int яркость = 0; // насколько яркий светодиод int i = 1; void setup () {pinMode (красный, ВЫХОД); pinMode (синий, ВЫХОД); } void loop () {analogWrite (красный, яркость); analogWrite (синий, яркость); яркость = яркость + i; если (яркость = 255) {я = -i; } задержка (20); }
С помощью этого короткого кода светодиоды погаснут до максимальной яркости и наоборот.
Если вы выбрали разные контакты для управления светодиодами, убедитесь, что это контакты ШИМ, просто проверьте, есть ли рядом с номером контакта символ ~. Это контакты 3, 5, 6, 9, 10 и 11.
Шаг 7: ЗАПИСАТЬ
Теперь просто скопируйте код в свой редактор ARDUINO и проверьте, что вы сделали, это правильно.
#include #include #include // базовая библиотека DS1307, которая возвращает время как time_t #include // сохраняет массив констант во флэш-памяти // значения массива [0] не используются --- дни от 1 до 366 const int sunrise PROGMEM = {0, 752, 752, 752, 752, 752, 751, 751, 751, 751, 750, 750, 750, 749, 749, 748, 748, 747, 746, 746, 745, 744, 743, 742, 741, 741, 740, 739, 738, 736, 735, 734, 733, 732, 731, 729, 728, 727, 725, 724, 723, 721, 720, 718, 717, 715, 714, 712, 711, 709, 707, 706, 704, 703, 701, 659, 657, 656, 654, 652, 651, 650, 649, 647, 645, 643, 641, 640, 638, 636, 634, 632, 630, 628, 626, 625, 623, 621, 619, 617, 615, 613, 611, 609, 607, 605, 604, 602, 600, 558, 556, 554, 552, 550, 548, 546, 545, 543, 541, 539, 537, 535, 533, 532, 530, 528, 526, 524, 523, 521, 519, 517, 516, 514, 512, 511, 509, 507, 506, 504, 503, 501, 500, 458, 457, 455, 454, 452, 451, 449, 448, 447, 445, 444, 443, 442, 441, 439, 438, 437, 436, 435, 434, 433, 432, 431, 430, 430, 429, 428, 427, 427, 426, 425, 425, 424, 424, 423, 423, 423, 422, 422, 422, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, 422, 422, 422, 423, 423, 423, 424, 424, 425, 425, 426, 426, 427, 428, 428, 429, 430, 431, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 452, 453, 454, 455, 456, 457, 459, 500, 501, 502, 503, 505, 506, 507, 508, 509, 511, 512, 513, 514, 516, 517, 518, 519, 520, 522, 523, 524, 525, 527, 528, 529, 530, 532, 533, 534, 535, 536, 538, 539, 540, 541, 543, 544, 545, 546, 547, 549, 550, 551, 552, 554, 555, 556, 557, 559, 600, 601, 602, 604, 605, 606, 607, 609, 610, 611, 612, 614, 615, 616, 618, 619, 620, 622, 623, 624, 625, 627, 628, 629, 631, 632, 634, 635, 636, 638, 639, 640, 642, 643, 645, 646, 647, 649, 650, 652, 653, 654, 656, 657, 659, 700, 701, 703, 704, 706, 707, 708, 710, 711, 713, 714, 715, 717, 718, 719, 721, 722, 723, 725, 726, 727, 728, 729, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 745, 746, 747, 747, 748, 748, 749, 749, 750, 750, 751, 751, 751, 751, 752, 752}; const int sunset PROGMEM = {0, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1646, 1647, 1648, 1649, 1650, 1652, 1653, 1654, 1655, 1657, 1658, 1659, 1701, 1702, 1704, 1705, 1706, 1708, 1709, 1711, 1712, 1714, 1715, 1717, 1718, 1720, 1721, 1722, 1724, 1725, 1727, 1728, 1730, 1731, 1733, 1734, 1736, 1737, 1739, 1740, 1741, 1743, 1744, 1746, 1747, 1749, 1750, 1752, 1753, 1754, 1756, 1756, 1756, 1757, 1759, 1800, 1801, 1803, 1804, 1805, 1807, 1808, 1809, 1811, 1812, 1814, 1815, 1816, 1818, 1819, 1820, 1822, 1823, 824, 1826, 1827, 1828, 1829, 1831, 1832, 1833, 1835, 1836, 1837, 1839, 1840, 1841, 1843, 1844, 1845, 1846, 1848, 1849, 1850, 1852, 1853, 1854, 1856, 1857, 1858, 1859, 1901, 1902, 1903, 1905, 1906, 1907, 1909, 1910, 1911, 1912, 1914, 1915, 1916, 1918, 1919, 1920, 1921, 1923, 1924, 1925, 1926, 1928, 1929, 1930, 1931, 1933, 1934, 1935, 1936, 19 37, 1938, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1954, 1955, 1956, 1957, 1957, 1958, 1959, 1959, 2000, 2001, 2001, 2002, 2002, 2002, 2003, 2003, 2003, 2004, 2004, 2004, 2004, 2004, 2005, 2005, 2005, 2005, 2004, 2004, 2004, 2004, 2004, 2003, 2003, 2003, 2002, 2002, 2001, 2001, 2000, 2000, 1959, 1958, 1958, 1957, 1956, 1955, 1954, 1953, 1953, 1952, 1951, 1950, 1948, 1947, 1946, 1945, 1944, 1943, 1941, 1940, 1939, 1938, 1936, 1935, 1933, 1932, 1930, 1929, 1927, 1926, 1924, 1923, 1921, 1920, 1918, 1916, 1915, 1913, 1911, 1910, 1908, 1906, 1904, 1903, 1901, 1859, 1857, 1855, 1854, 1852, 1850, 1848, 1846, 1844, 1842, 1840, 1839, 1837, 1835, 1833, 1831, 1829, 1827, 1825, 1823, 1821, 1819, 1817, 1815, 1813, 1811, 1810, 1808, 1806, 1804, 1802, 1800, 1758, 1756, 1754, 1752, 1750, 1748, 1746, 1745, 1743, 1 741, 1739, 1737, 1735, 1733, 1732, 1730, 1728, 1726, 1724, 1723, 1721, 1719, 1717, 1716, 1714, 1712, 1711, 1709, 1708, 1706, 1704, 1703, 1701, 1700, 1658, 1657, 1656, 1654, 1653, 1651, 1650, 1649, 1648, 1646, 1645, 1644, 1643, 1642, 1641, 1640, 1639, 1638, 1637, 1636, 1635, 1634, 1634, 1633, 1632, 1631, 1631, 1630, 1630, 1629, 1629, 1628, 1628, 1628, 1628, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1628, 1628, 1628, 1629, 1629, 1629, 1630, 1630, 1631, 1632, 1632, 1633, 1634, 1635, 1636}; const int day PROGMEM = {0, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231};
int i; // день года
int rise; // массив восхода солнца int set; // массив захода солнца int d; // день массива
int сейчас;
int сегодня; int b = 5; // синий вывод int r = 6; // красный вывод int l = 0; // яркость света int del = 30000; // задержка - del = 30000 2 часа затухания включения / выключения Тьюринга int delS = 7500; int fast = 50; // быстрая задержка затухания! int c; void setup () {Serial.begin (9600); pinMode (b, ВЫХОД); pinMode (r, ВЫХОД); setSyncProvider (RTC.get); // получаем данные из RTC} void loop () {if (timeStatus () == timeSet) {setday (); свет(); } else {Serial.println («Время не установлено. Пожалуйста, запустите время»); Serial.println ("Пример TimeRTCSet или пример DS1307RTC SetTime."); Serial.println (); задержка (400000); }} void setday () {сегодня = 100 * месяц () + день (); for (i = 0; i pgm_read_word (имя массива + позиция) if (d == today) {break;}}} void light () {now = 100 * hour () + minute (); rise = pgm_read_word (восход + i); set = pgm_read_word (sunset + i); if (сейчас> рост + 200 && сейчас рост + 100 && сейчас рост && сейчас <= set + 100) {on ();} else {off ();}} void on () {if (l = 25 & l <255) {analogWrite (b, l); analogWrite (r, l); delay (del); l ++;} else if (l == 255) {analogWrite (b, l); analogWrite (r, l);}} void sOn () {if (l = 25 & l <255) {analogWrite (b, l); analogWrite (r, l); delay (delS); l ++;} иначе, если (l == 255) {analogWrite (b, l); analogWrite (r, l);}} void iOn () {if (l 25) {analogWrite (b, l); analogWrite (r, l); delay (del); l--;} else if (l> 0 & l