Как стать автором
Обновить
62
0
Гусейнов Алексей @kibergus

Пользователь

Отправить сообщение
Зато возникают куда более худшие проблемы:
Плохая или очень специфичная реализация. Чтобы сделать на уровне stl надо потрать очень много времени.
Большие временные затраты. Намного большие, чем прочитать документацию на stl.
Трудная поддержка. Чтобы поддерживать ваш код надо прочитать вашу документацию. А stl сторонний разработчик уже знает.
Проблемы взаимодействия со сторонними библиотеками. Им нужны стандартные контейнеры или хотя бы стандартные интерфейсы.
Пример с многопоточностью вообще не в тему. Ну давайте сделаем реализацию
size_t size() const {return size_;}
И она тоже окажется потоконебезопасной. Потому что чтение и запись целочисленной переменной не потокобезопасно, в том числе можно считать результат, которого там никогда не хранилось.

В том числе это может возникать и на x86, если компилятор нне выровняет переменную.
Я не вижу принципиальных проблем залить внутрь стены другую смесь, хоть раствор вспененный, хоть аналог монтажной пены. Также, раз робот умеет укладывать балки и арматуру в стены, я не вижу принципиальных проблем укладывать минеральную вату или другой блочный утеплитель.
Другое дело, что заливка двух видов смеси потребует два бетононасоса, что для макетного стенда излишне.
Для ноутбука это смысла не имеют. Слишком много лишнего веса и трудности с преобразованием тепла в электричество. А вот для датацентров подобные идеи периодически возникают, чтобы тепло сбрасывать не в воздух, а на что-то полезное, например на отопление жилых помещений.
А в чем новость? Вот, например, описание самодельного генератора на элементах пельтье:
overland-botsman.narod.ru/termogen.htm
archive.org говорит, что статья существовала как минимум в феврале 2007 года.

Причем вырабатывается вполне приличный ток: «Ожидаемая мощность генератора в модернизированном варианте – 3Вт при работе на снеге и около 1.5Вт при работе на кипящей воде.»
Спасибо. Поправил, где мог.
Хороший контроллер для диммера:

Features:
2 — 14 Bit, 65 MHz A/D Channels
2 — 14 Bit, 65 MHz D/A Channels
On Boards TCXO (5ppm)
1 or 2 Million Gate FPGA for user code

Applications:
Digital Radio
Electronic Warfare
Vector Signal Generator
Signal Identification

Но я предпочитаю более дешевые варианты.
Я рад, что вы умеете выбирать наиболее конструктивные части из ответов и отвечать только на них.
Только, пожалуйста, не учите людей писать плохой код. Стремитесь к хорошему.
То есть по Вашему эта формула ни какого отношения к закону Ома не имеет?

Кажется, буковки одинаковые. Не надо троллить.
И еще, при расчете Вы забыли учесть коэффициент «Эффективного напряжения»

Простите? 220 — это и есть эффективное напряжение. Не говорите о том, чего не понимаете.
Опять Вы гадаете на кофейной гуще? Откройте DS на MOC

Input trigger current. Смотрим на графу максимального значения. Только у 3023 оно менее 7.5 мА. Все остальные могут не открыться.
Для спонтанного включения лампы придется открыть симистор, а он как мы знаем гальванически развязан от контроллера, а питание контроллера стабилизировано и отфильтрует любую помеху. Наверно помехе как то придется зажечь светодиод оптрона, для открытия симистора?
Может объясните как?

Прочтите статью, которую пытаетесь комментировать. Зажигать светодиод оптрона не надо. Поищите на этой странице символы «dV/dt».
Я то и читать почти не умею.

Чукча не читатель — чукча писатель. ОК.
По моему это Вы статью написали, я Вам ее дописывать не собираюсь.
У меня статья про Dimmer лежит в черновиках, как допишу так сразу выложу

Простите, что «угнал» тему. Только сначала добейтесь стабильной работы своей системы.
Судя по всему у Вас его просто нет.

А вы, батенька, тролль. Давайте я вас подразню?
Вот обработчик прерывания таймера:
// Event queue interrupt
void processQueue() {
    static const uint16_t GAP = 20;
    uint16_t zeroTime = timer::elapsedSinceZero();
    uint16_t next;

    if (prevZeroTime > zeroTime) {
        guard = false;
    }
    prevZeroTime = zeroTime;
    if (guard) {
        OCR5A = max_time(timer::zeroCross() + timer::sinePeriod(), TCNT5 + 5);
        return;
    }

    do {
        next = bulbQueue.execute(zeroTime);
        zeroTime = timer::elapsedSinceZero();
    } while(next < zeroTime + GAP && next >= zeroTime);
    if (next == uint16_t(~0)) {
        guard = true;
        bulbQueue.resetIterator();
        OCR5A = max_time(timer::zeroCross() + timer::sinePeriod(), TCNT5 + 5);
        if (bulbQueue.swapScheduled()) {
            bulbQueue.swap();
            interrupts();
            bulbQueue.populateMutable();
        }
    } else {
        OCR5A = max_time(timer::zeroCross() + (uint16_t)next, TCNT5 + 5);
    }
}

ISR(TIMER5_COMPA_vect) {
    processQueue();
}

Тут обрабатывается немало краевых ситуаций:
изменяющийся период тока
резкие изменения фазы (например при переключении на другую фазу)
обратный ход времени (когда переход через 0 происходит позже предполагаемого срока и elapsedSinceZero уменьшается)
переполнение таймера
позднее исполнение прерывания из-за блокировки прерываний

И эта реализация потокобезопасна.

Приведенный выше код распространяется под GPL3. Впрочем, воспользоваться вы им не сможете, так как для этого надо написать остальные 4000 строк прошивки.
Похоже Вы не учили закон Ома

Не закон ома, а формулу электрической мощности
p = u^2 / r = 220^2 / 82k = 0.59
Чуть позже я поправился, что так как там диод, то ток течет только половину времени и теповыделение будет в два раза меньше.
Интересно на Вашу формулу расчета посмотреть, но все же лучше будет если Вы в расчетах будете использовать закон Ома.

I = U / R = (5В — 1.2В) / 510 Ом = 0.0074 = 7.45 мА.
Ошибся на порядок, пока ехал в электричке. Впрочем, этого тока может быть недостаточно, чтобы открыть указанные в схеме MOC'и
Защищать от чего?

Например от перегорания лампы накаливания. Симистор сгорит. А помехи в электросети могут вызывать спонтанное включение лампы.
Сами придумали или есть ссылка на первоисточник? Хотелось бы на Ваш код взглянуть, в статье его к сожалению не увидел.

Вы, наверное, не читали ни одной книги. Начать можете хотя бы с википедии.
А пока потрудитесь объяснить, как в вашем коде можно организовать управление лампой, например как не пропустить нажатие на клавишу, во время ожидания в прерывании.

Сворй код я сейчас выкладывать не хочу.
Виноват, мощность, выделяющуюся на сопротивлении посчитал неправильно. Там диод и ток идет только половину времени.
Давайте посмотрим на описанный по ссылке диммер. Никакого описания, почему схема должна быть такой, какая она есть. Почемы выбраны те или иные компоненты.

Детектор нуля использует одно сопротивление. Можно было снизить нагрев использовав конденсатор.

На схеме указано, что сопротивление 0.5W, однако на нем будет выделяться 0.59. Может и сгореть.

MOC подключен через сопротивление в 510 Ом, arduino использует питание 5В, падение на диоде 1.2В, ток будет 74мА. Внимательно смотрим в datashit и видим, что максимально допустимый ток для оптрона 50 мА. Также превышен максимально допустимый ток для вывода arduino.

Симистор ничем не защищен и не обосновано, почему его можно не защищать.

Код ужасен. В прерываниях нельзя сидеть долго, из них нужно выходить сразу, как только это возможно. А там задержки проставлены. Это же одна ардуина сможет управлять только одной лампочкой, причем не сможет в это время делать что-либо еще, влючая коммуникацию с компьютером или опрос кнопок. Т.е. лампочкой управлять будет невозможно.

Для сравнения, у меня arduino mega управляет 12 лампами, слушает 10 выключателей и у нее остается куча свободного времени.
Спасибо, действительно имелся в виду TO-220. Поправил.

Ограничение по току на один вывод в данном случае не критично: даже более прожорливый MOC3051 потребляет меньше. Но если микроконтроллер может прокачать через себя только 80 мА, а подключать к нему MOC3051, то можно сделать не более 5ти каналов. На это ограничение я и хотел обратить внимание.
Начинаются с желания научиться чему-то новому и понимания, что в худшем случае я смогу сделать так, чтобы все работало как обычно, без переделывания проводки.
Управление освещением — относительно простая, а главное, вполне самостоятельная, часть системы. И при этом довольно полезная:
Я могу выключить весь свет выключателем у входной двери.
Свет над длинным рабочим столом управляется одним выключателем, но, при желании, я могу осветить только нужную половину стола.
Я могу регулировать яркость света.
Есть мысли, что некоторые выключатели нужно было расположить иначе. Я могу добавить новые в тех местах, где это удобно.
Схему чего? В зависимости от того, чем управлять, схема будет разная. В зависмости от напряжения, выдаваемого контроллером будут разные токоограничивающие сопротивления.
Конкретные схемы есть в datashit'е к MOC3051 и в AN-3008. Копировать их сюда я не имею права: они не мои. Рисовать их заново не вижу смысла: они есть в открытом доступе и они хороши.
Вопрос очень общий. Начать надо с понимания того, что такое «Умный дом» конкретно для вас. Что он должен делать, а что не должен:
Управлять светом
Управлять климатом (теплые полы/кондиционирование/вентиляция)
Управлять музыкой/видео (мультирум)
Перенаправлять телефонные звонки в комнату, в которой находится владелец
Охранная сигнализация
Пожарная сигнализация
Энергоэффективность (следить за потреблением энергии и распределять нагрузку по времени)
Готовить кофе/еду

Исходя из этого брать оборудование, которое покрывает ваши нужды и работает по одному и тому же протоколу. Также можно посмотреть на limux mce, как на систему, способную объединить переферию, работающую по разным протоколам.
Нет. Графики рисовал в gnuplot, вывел в SVG, затем в inkscape собрал из них картинку.
Спасибо, буду знать. Все зависит от задачи. Например сейчас у меня один контроллер управляет 12 лампами. У него нет столько аналоговых выходов. Кроме того, у него аналоговые выходы от 0 до 5 вольт, пришлось бы ставить транзисторы, чтобы поднять его до 0-10 вольт. Корпусов получилось бы столько же.
Я хочу управлять яркостью лампы накаливания, поэтому открывать симистор нужно не в момент перехода через ноль. Поэтому мне не подходит схема со «встроенной схемой коммутации при переходе через «0» для минимизации помех».

А еще так дешевле.
Детектор нуля тоже можно сделать с гальванической развязкой. Вот так:
digihouse.xsgroup.ru/wiki/2/Датчик_перехода_фазы_через_ноль_(для_диммирования)
На картинке выше это маленькая черная 4х выводная микросхема и синий конденсатор в левой части платы.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность