Операционный усилитель для датчика температуры. Симмисторный регулятор на BTA16 Код (Text): int incomingByte = 0; // for incoming serial data int AC_LOAD = 3; // Output to Opto Triac pin volatile int dimming = 117; // Dimming level (0-128) 0 = ON, 128 = OFF int temp_PIN=0; // Порт датчика температуры void setup() { pinMode(AC_LOAD, OUTPUT); // Set the AC Load as output attachInterrupt(0, zero_crosss_int, RISING); // Choose the zero cross interrupt # from the table above Serial.begin(9600); } void zero_crosss_int() // function to be fired at the zero crossing to dim the light { // Firing angle calculation :: 50Hz-> 10ms (1/2 Cycle) // (10000us - 10us) / 128 = 75 (Approx) int dimtime = (75*dimming); delayMicroseconds(dimtime); // Off cycle digitalWrite(AC_LOAD, HIGH); // triac firing delayMicroseconds(10); // triac On propogation delay digitalWrite(AC_LOAD, LOW); // triac Off } void loop() { /* Управления с клавиатуры if (Serial.available() > 0) { // read the incoming byte: int x=map(Serial.read(),49,57,128,10); if(x>9&&x<129) dimming= x; } */ // Управления датчиком int temp = map(analogRead(temp_PIN),0,40,10,116); if(temp>9&&temp<117) dimming=temp; Serial.println(analogRead(temp_PIN)); /* Управление в цикле for (int i = 2; i <= 117; i++){ dimming = i; delay(20); } for (int i = 117; i >= 2; i--){ dimming = i; delay(20); } */ }
У меня тоже есть ИК лампы, термодатчики и термоограничители от лазерных принтеров. Корпус от лампы дневного света можно подрядить, там даже рефлекторы взять можно. Я немного не понял, что за штуковины, на которые вы посадили лампы. Что-то керамическое, но я не узнаю.
Керамические это обычные патроны R7s разрезанные пополам, и раздвинутые на нужную длину. Еще немного фоточек
Только начинаю разбираться с ардуино, пытаюсь собрать не что похожее и наткнулся на Ваш код. Интересует каким образом прерывание настроено на 2 пин?) По схеме видно, что сигнал идет на 2 пин, а вот в коде ничего связанного со 2 пином, нет. Как я понял эту самую привязку делает вот эта строчка Код (Text): attachInterrupt(0, zero_crosss_int, RISING); Разъясните, если не сложно. И еще, как я понимаю эта функция void zero_crosss_int() будет выполняться не зависимо от находящихся delay() в основном коде? Или если, например, я в коде напишу delay(2000), регулировка яркости замрет на 2 секунды? С нетерпением жду продолжения проекта, выкладывайте развитие своего проекта
Привет, тут немного запутанно из-за того, что в ардуине уно, всего два прерывания, и они номерами никак не связаны ногами, поэтому просто прими, что 0е прерывание, на ноге 2, а 1е на третьей ноге ) Да, прерываниям пофигу на этот Delay )
Комментариев не хватает ,на русском, например как в "Вики" . Это нужно для тех, кто хочет повторить и особенно для начинающих. Еще на схеме moc3052 не правильный рисунок с "контролем нуля". Должен быть без контроля.
Если можно, ответьте еще на впросик Код (Text): x=map(Serial.read(),49,57,128,10); map(analogRead(temp_PIN),0,40,10,116) для чего нужен map и откуда берутся эти цифры? нашел ответ в гугле
map нужен для отображения значения из одного диапазона на другой, больший или меньший, т.е равномерного растягивания или сжатия со сдвигом или без. В данном конкретном случае: с клавиатуры (участок кода, правда, закоменнтирован) поступают коды символов цифр от 49 до 57 (цифры от 1 до 9). Диапазон 49-57 растягивается на 10 128 (допустимый интервал для параметра диммирования). Причем, поскольку сначала идет 128, а потом 10, то при растягивании еще происходит переворачивание, в результате чего ввод большей цифры приводит к присваиванию меньшего значения Т.е. если на входе цифра 1 (код 49), то x получит значение 128. Если 57, то 10. Если что-то между 49 и 57, то значение будет между 10 и 128. При считывании с термодатчика предполагается диапазон 0-40. Его тоже требуется отобразить примерно на тот же диапазон (в данном случае по каким-то соображениям выбрано 10-116). В этом случае сначала идет меньшее значение. Значит, растягивание на больший диапазон пройдет без переворачивания. Т.е. если на входе от датчика 0, то x получит значение 10. Если 40, то 116. Если что-то между 0 и 40, то значение будет между 10 и 116. Почему тут 116 а не 128 (диапазон уже) - к автору. Таким образом данные из разных источников переводятся в значение параметра для диммирования, который, будучи умноженным на 75 превратится в интервал между 10-микросекундными импульсами в микросекундах.
116, так как при большем значении, лампа вела себя не адекватно. ) Подогнано с небольшим запасом, методом проб и ошибок )
Управление с кнопок. 2 режима. 1 Просто выставляю мощность, и он держит ее. 2й, будет ориентироваться на показания термопары, и автоматически регулировать мощность, чтобы поддерживать нужную температуру.
Здравствуйте уважаемый! Можете подробно полное подключение ИК станции на Ардуино. Собрать хочу станцию, но ищу на чем сделать и понравился ваш проект! , Но вы уже 3 месяца назад обещали выложить видео продолжения, но так и не выложили, Можете хотя бы полное подключение нарисовать и выложить в виде картинки, а так же что для этого требуется. Еще хотел узнать на сколько лампы ВТ у вас ? очень благодарен.
Здравствуйте ребята ! Наткнулся в ютубе на несколько роликов с подобным устройством и решил спросить тут. Я новичек в этом деле и с Arduino сталкиваюсь впервые. Есть желание сделать что-то подобное , только это будет так называемый "Бутерброд для ЛУТ" или "ЛУТ без утюга". Смотрю на фотографиях имеется уже ЖК дисплей с отображением температуры. Сам диммер уже собран , далее будет собираться ОУ на LM358 , все как тут , только хотелось бы увидеть полный скетч если таковой имеется , а точнее "ЖК дисплей + кнопки управления температурой + диммер". Если что-то не так , заранее прошу прощения. Повторюсь я никогда не сталкивался ранее с Arduino , но имею большое желание собрать подобное устройство. Заранее спасибо !
Немного переделал станцию. Теперь работает на MAX6675 вместо lm358, точность температуры гораздо выше. Пока еще тестирую доделываю и т.п. Видео обязательно выложу.