Можно, но я не думаю что так проще будет, придется все светодиоды вместо последовательного соединения перепаять параллельно
Кстати для гирлянд не потребуется симистор BTA138 с резисторами 330ом, достаточно будет одного оптрона MOC3061
Вид для печати
Можно, но я не думаю что так проще будет, придется все светодиоды вместо последовательного соединения перепаять параллельно
Кстати для гирлянд не потребуется симистор BTA138 с резисторами 330ом, достаточно будет одного оптрона MOC3061
хм.. тогда это интересно...
тогда, я так понимаю, 4 ножка оптрона пойдет на нагрузку, 6-тая + резисторы (те что для отсечки) - 220В, вторая пара резисторов тоже в 220 и на нагрузку.. верно?
P.S. Вот бегло просмотрел даташит, я так понял к МОС3061 напрямую можно нагрузку до 1А подключать?
Думаю что ток твоей гирлянды не больше чем 20мА
Вложение 13394
Полностью согласен. Разрабатывал для продаж GSM сигналки и бюджетные системы Умный дом на ассемблере. Ардуиной занялся изготовлением для продаж и примерно год на неё вообще внимания не обращал. Решил активизировать продажи изготовив стенд для демострации возможносте Ардуино и испытал шок. Такое впечатление, что пропустил в жизни многое. Сейчас попробовал (и уже продал) GSM охранку и разрабатываю Умный дом(RS485) на Ардуино. В принципе можно сделать довольно приличные вещи, а красивые нависухи типа консоль с сенсорным экраном делаются вообще влёт. На мой взгляд очень перспектинная платформа.
Спасибо за схемку.. так и думал.
Да, я тоже думаю что ток там маленький... на днях померяю.. просто я хочу не 10м (т.э. не 100св.), а метров 50м использовать... но и 500 светодиодов думаю без проблем потянет... тем более что они будут поканально работатть.. и на один МОС не более 150светодиодов будет.
Вот начал разбираться со схемой и скетчем, который по ссылку выше...
В схеме два вывода идут на ардуину, тот вывод, который одет на МОС в скетче описывается как int dimmer1Pin = 10, но вот не пойму где описывается вывод, который идет на 4n35? В скетче только в коменте сказано // interrupt 0 - (pin 2) ...
Вот в этой строкеЦитата:
attachInterrupt(0, zero, RISING);
Можно бы было и прочитать что это за функция
Цитата:
attachInterrupt(interrupt, function, mode)
Задает функцию обработки внешнего прерывания, то есть функция, которая будет вызвана по внешнему прерыванию. Если до это была задана другая функция, то назначается новая. Большинство контроллеров Arduino умеют обрабатывать до двух внешних прерываний, пронумерованных так: 0 (на цифровом порту 2) и 1 (на цифровом порту 3). Arduino Mega обрабатывает дополнительно еще четыра прерывания: 2 (порт 21), 3 (порт 20), 4 (порт 19) и 5 (порт 18).
Большое спасибо за то что "разжевали" :)
Как я понял, достаточно одного вывода, для обработки внешнего прерывания... Т.э. если я буду использовать 4-ре канала, то всего выводов будет использоваться 5. Кстати, вот как раз нашел темку на эту тему... может кому пригодится: http://www.arduino.cc/cgi-bin/yabb2/...1230333861/all
Для отлавливания нуля достаточно 1-го вывода , а димировать можно хоть 20 каналов.
По твоей ссылке схема на 120 вольт и 60 Гц, так что не совсем подходит для наших условий
Планирую использовать регистр 74hc595... Его скорости будет достаточно для регулирования яркости этим методом?
Я не совсем понял вопроса
Ну хочу, чтобы яркость менялась при использовании ключа 74hc595
но что-то не получается...
PHP код:
int data = 16;
int latch = 17;
int clock = 18;
//Used for single LED manipulation
int ledState = 0;
const int ON = HIGH;
const int OFF = LOW;
// int dimmer1Pin = 10; //output to opto triac (MOC 3010/3020)
volatile int freqAdjTime = 10; //set to 10 for 50 Hz, and 8 for 60 Hz
volatile long nextOnTime = 0; // variable for storing a time (in millis) for when to fire the output next
volatile int outputValue; // Varialble for storing the output value 0-255
//unsigned int inputValue; // Variable for storing input value (ie. a potentiometer)
long lastMillis; // for timing purposes
void setup()
{
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
attachInterrupt(0, zero, RISING); //Attachment of zero crossing detection, which means the interrupt rutine "zero" is called each 20 millis
}
void loop()
{
if (nextOnTime < millis()) { //is it time to set pin on?
changeLED(2,ON); // then set it
delay(2); // wait a bit to be sure the triac is on
changeLED(2,OFF); // turn of the trigger to be sure it is not trigger in the very beginning of next halfperiod
}
// A loop that slowly increases outputvalue
if (millis()-lastMillis > 250 ) { //increase output each fourth of a second
outputValue++; //increase outputvalue by one
//Check if max is reached
if (outputValue > 255) { // output = maximum
outputValue = 0; // set output to zero
}
}
}
void zero()
{
// set a volatile variable with the millis value + (the value of the desired output (0-255) multiplied by the freq adj time)
nextOnTime = millis() + (freqAdjTime * outputValue); //how long will this calculation take? too long to enable low output??
}
void updateLEDs(int value){
digitalWrite(latch, LOW); //Pulls the chips latch low
shiftOut(data, clock, MSBFIRST, value); //Shifts out the 8 bits to the shift register
digitalWrite(latch, HIGH); //Pulls the latch high displaying the data
}
//These are used in the bitwise math that we use to change individual LEDs
//For more details [url]http://en.wikipedia.org/wiki/Bitwise_operation[/url]
int bits[] = {B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000};
int masks[] = {B11111110, B11111101, B11111011, B11110111, B11101111, B11011111, B10111111, B01111111};
/*
* changeLED(int led, int state) - changes an individual LED
* LEDs are 0 to 7 and state is either 0 - OFF or 1 - ON
*/
void changeLED(int led, int state){
ledState = ledState & masks[led]; //clears ledState of the bit we are addressing
if(state == ON){ledState = ledState | bits[led];} //if the bit is on we will add it to ledState
updateLEDs(ledState); //send the new LED state to the shift register
}
Так ты в регистр отправляешь всегда значение data=16
Это почему? Вот так:
светодиод мигает, т.э. регистр работает как нужно...Цитата:
changeLED(2,ON);
delay(200);
changeLED(2,OFF);
delay(200);
Т.э. changeLED(2,ON); аналогично digitalWrite(dimmer1Pin, HIGH);
Я про регистр 74hc595
так говорю же, что регистр переключает светодиоды нормально.
В выше приведенной программе сделано так, что функция changeLED(2,ON); аналогична функции digitalWrite(dimmer1Pin, HIGH);
т.э. светодиодами можно управлять аналогичкак как и без регистра.
не работает почему-то подпрограмма диммера...
Проверь срабатывает прерывание при прохождении через ноль
а как такое можно проверить?
Напиши в фунцию zero
Цитата:
stat=~stat;
digitalWrite(13, stat); // set the LED off
Написал:
так как если просто stat=~stat; пишет ошибку: 'stat' was not declared in this scopeЦитата:
int stat=~stat;
digitalWrite(13, stat); // set the LED off
Вообщем ничего не происходит.. светодиод (тот что на ардуине) не тухнет...
Так объяви переменную с типом int.
Только глобальную, а не локальную
так объявил же... не работает.. скорее всего надо пилить програмку...
У меня работает
PHP код:
int stat=0;
void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
stat=~stat;
digitalWrite(13, stat);
delay(200);
}
да, сорри, так мигает диод на плате... тогда что может быть?
если прописать
в функцию zero?Цитата:
int stat=~stat;
digitalWrite(13, stat);
да, тогда светодиод на выводе 13 мигает.
Блин.. реально не пойму что... лампа (которая должна плавно изменять яркость) хаотично делает вспышки... т.э. по каким-то импульсам...
Chip, а может есть у Вас подборка или рекомендации по поводу например, таких вариантов:
Одна и та же операция выполняется за разное время, в зависимости от того, как описать процедуру.
digitalWrite(5,HIGH); // 72 такта
DDRD |=(1<<PIN5); // 2 такта
Для меня не понятно, зачем применять digitalWrite? Может стоит Вам написать отдельную библиотеку speed.h с хитростями и тонкостями, в которой функция будет например digiWrite() :).
Давно хочу такую либу написать, но все времени не хватает
давно не заходил. в темку а она разрослась :)
нашел ряд готовых решений для своего вопроса(Находил дистанционник с кнопками на 4 действия... щас подумал что маловато :) ) но потом захотелось больше возможностей :) и решил попробовать вернуться все таки к данному вопросу.
вот набрал в инете компонентов подойдут?
пульт с приемником
сенсорные кнопки
С пультом я бы по другому сделал, достаточно будет одного ИК приемника http://www.compcar.ru/forum/showthread.php?t=4959
И при этом можно будет использовать любой пульт от бытовой техники
Подскажите, как можно организовать ШИМ на выходе пина ардуины, подавая управление методом GET через изернет?
То есть посылаем GET вида http://192.168.1.7/?Lev3=5 , что значит уровень на пине №3 5 из возможных 255.
Изернет плата работает в режиме сервера.
Пока догнал только так:
То есть если пришёл GET запрос со строкой "Lev3", то условие выполняется. А как можно передать уровень из запроса вместо предустановленного значения 255?Код HTML:if(readString.indexOf("Lev3") >0)
{
analogWrite(ledPinBra, 255); // set the LED on
Bra =true;
}
P.S. Нужно для управления яркостью подсветки через интернет с помощью такого слайдера Слайдер. Каждое новое положения слайдера отправляет GET с уровнем яркости.
Уважаемые. Не осилил прочитать всё от и до.
Важный вопрос есть:
Как собираетесь обрабатывать одновременное нажатие нескольких клавиш. Включили свет одновременно и бабка и дед в разных комнатах.
Простой ваш код программы кого-то из них заигнорит :) А если еще и будете с длинными нажатиями мутить, то ту ваще весело будет :) Пока кто-то закрывает жалюзи или шторы, в туалете свет не зажжешь :)))
Потом к тому же надо еще и отслеживать какой порт насколько включить. И какое у него состояние на данный момент, чтобы обрыгать именно смену состояния выхода при каждом нажатии кнопки.
Можно обрыгать типы нажатий: 1-3-10 секунд :)))
Подскажитє, скеч для таво щоб делать обмин инфармрциею з arduino и включать или виключать діод. спасиба)