Проект Arduino Night Light и Sunrise Alarm

  • Peter Holmes
  • 0
  • 4548
  • 1437
Реклама

Люди естественно запрограммированы просыпаться с восходом солнца; к сожалению, современная жизнь продиктована произвольными часами, которые часто заставляют нас просыпаться, когда нет естественного света. Сегодня мы будем делать будильник на рассвете, который будет медленно и осторожно будить вас, не прибегая к оскорбительной шумовой машине..

Если создание восходящего будильника для вас немного сложнее, ознакомьтесь с этими приложениями для iPhone и Android. Используйте эти приложения, чтобы помочь вам лучше спать [Android & iOS]. Используйте эти приложения, чтобы помочь вам лучше спать [Android & iOS]. день, лучшее, что вы можете сделать, это выспаться. Всегда появляются новые исследования, которые доказывают, насколько важен сон для человека, улучшают его, определяют, когда лучше разбудить вас движениями тела. Может ли приложение действительно помочь вам лучше спать? Может ли приложение действительно помочь вам лучше спать? Я всегда был немного экспериментатором сна, большую часть своей жизни вел дотошный дневник сна и учился как можно больше спать во время сна. Есть…, гарантирующие, что вы не оторваны от этого удивительного сна, а вместо этого просыпаетесь, чувствуя себя яркими и свежими - они действительно работают.

План проекта

Основной частью проекта будет 5-метровая светодиодная лента, уложенная вокруг кровати. Мы запитаем их с помощью внешнего источника питания 12 В, переключаемого с помощью некоторых транзисторов MOSFET N. Настройка для этой части будет идентична системе динамического освещения. Создайте свое собственное динамическое окружающее освещение для медиацентра. Создайте свое собственное динамическое окружающее освещение для медиацентра. Если вы смотрите много фильмов на своем ПК или медиацентре, я уверен, что вы столкнулись с дилеммой освещения; Вы полностью выключили все огни? Вы держите их на полную мощность? Или ... я построил раньше.

Сроки будут проблемой - так как это прототип, я буду устанавливать Arduino для обратного отсчета всякий раз, когда он сбрасывается. Теоретически, мы должны терять только одну или две секунды каждый день, но в идеале мы бы включили “часы реального времени” чип, чтобы сделать это более надежно. Тревога при восходе солнца будет срабатывать за 30 минут до времени пробуждения и постепенно увеличивать уровень выходного сигнала до тех пор, пока он не достигнет 100% яркости - этого должно быть достаточно, чтобы разбудить нас, хотя неплохо продолжать использовать обычный будильник, пока ваше тело привык к этому.

Я также включу ночной свет в этот проект, который обнаруживает движение и активирует незаметный низкоуровневый свет под кроватью с 3-минутным перерывом, отдельно от светодиодного освещения, поскольку это заставит меня и мою жену проснуться , Освещение под кроватью будет коммерческим блоком питания, поэтому я включу реле внутри штепсельной розетки, чтобы включать и выключать его. Если вам неудобно работать с сетевым напряжением 110-240 В переменного тока при любых обстоятельствах (и это, как правило, хорошее правило), подключите беспроводной передатчик 433 МГц с переключающими розетками, как описано в проекте домашней автоматизации Raspberry Pi Arduino. Руководство по домашней автоматизации с Raspberry Pi и Arduino Руководство по домашней автоматизации с Raspberry Pi и Arduino Рынок домашней автоматизации наводнен дорогими потребительскими системами, несовместимыми друг с другом и дорогостоящими в установке. Если у вас есть Raspberry Pi и Arduino, вы можете добиться того же в… .

Список деталей и схема

  • Arduino
  • Набор светодиодных лент RGB
  • 12 вольт блок питания
  • 3 x МОП-транзистора N (я использую тип STP16NF06FP)
  • Реле и розетка питания, или розетки с беспроводным управлением и подходящий передатчик
  • Ваш выбор ночника (обычный источник питания с вилкой в ​​порядке)
  • ИК-датчик движения (HC-SR501) или гидролокатор SC-04 (не такой эффективный)
  • Световой датчик
  • Код проекта - но читайте дальше, чтобы убедиться, что вы понимаете, как все настроить.

Вот полная схема.

Подключение реле

Заметка: Пропустите этот раздел, если вы хотите использовать лампы RGB и в качестве ночного освещения - это специально для включения отдельного источника питания от сети.

Для переключения сетевого питания, ваше реле должно быть рассчитано на напряжение - 110V или же 240 В переменного тока в зависимости от того, где вы живете - и больше, чем общая сила тока вы будете переключаться. Тот, который я использовал из этого пакета датчиков (отказ от ответственности: это мой магазин) является 250 В переменного тока / 10 А, поэтому мы должны быть в безопасности. Реле имеют ком порт, как правило, в центре, который должен быть подключен к проводу под напряжением, идущему в вилку; затем подключите терминал с разъемом Live к НЕТ (нормально открытый). Я не должен был говорить тебе не делать этого, если он подключен к розетке, или ты умрешь. Если вы боитесь возиться с питанием от сети, используйте вместо этого розетки с беспроводным переключением.

Заземляющий и нейтральный кабели должны идти прямо в розетку и не касаться реле. У вас может не быть земной линии в США.. Это ваша ответственность, чтобы узнать цветовое кодирование проводов в вашем районе - Если вы не можете подключить обычную розетку в вашем доме или подключить вилку, не пытайтесь встроить реле в одну.!

Для проверки подключите сигнальный контакт реле к 12, затем запустите простую программу мигания, модифицированную для работы с контактом 12, а не 13, как по умолчанию. Ваша розетка должна включаться и выключаться каждые несколько секунд. Причина, по которой я не использую контакт 13, заключается в том, что во время процесса загрузки встроенный светодиодный индикатор срабатывает быстро, указывая на последовательную активность, что также приводит к активизации реле..

Правильный выбор времени

Функции синхронизации и синхронизации затруднены без доступа к сетевому соединению или выделенного Часы реального времени (они включают в себя свои собственные батареи, чтобы часы работали, даже когда основной Arduino не имеет питания). Чтобы снизить расходы, я собираюсь обмануть. Я буду жестко задавать время начала для Arduino, чтобы начать отсчет времени; поэтому время будет зависеть от этого времени начала. Каждые 24 часа часы будут сбрасываться. Приведенный ниже код функции часов проверяет глобальные переменные currentMillis а также currentMinutes верны каждый день. Arduino не должен терять больше нескольких секунд каждые 45 дней; однако этот жестко запрограммированный стиль синхронизации весьма ограничен в том смысле, что отключение питания или случайный сброс повредят все, так что это, безусловно, одна область, которую можно улучшить. Если время не синхронизировано, просто сбросьте Arduino в установленное время начала.

Код должен быть легким для понимания.

void clock () if (millis ()> = previousMillis + 86400000) // истек полный день, сбросить часы; previousMillis + = 86400000;  currentMillis = millis () - previousMillis; // это делает наши currentMillis одинаковыми каждый день currentMinutes = (currentMillis / 1000) / 60;  

Функция ночного света

Я разделил основные циклы на отдельные функции, чтобы их было легче читать, удалять или настраивать. Nightlight () Функция работает только между часами, когда Arduino был сброшен (я предполагаю, что вы, вероятно, сделаете это перед сном или около него, когда темно), и до тех пор, пока не начнется тревога восхода. Сначала я пытался использовать резистор, зависящий от света, но он не очень чувствителен к синему свету (это цвет, который я использую для ночного освещения), и его трудно откалибровать правильно. В любом случае, использование часов имеет больше смысла. Мы будем использовать глобальный currentMinutes переменная, которая сбрасывается каждый день.

PIR-датчик может быть немного странным, если вы никогда не использовали его раньше, хотя его подключение не сложно - вы найдете VCC, GND, а также ИЗ четко обозначены на спине. У тебя тоже есть два переменных резистора; один с меткой RX определяет дальность (до 7 м), а другой с меткой TX определяет задержку. Задержка составляет 5 секунд при самом низком значении (полностью против часовой стрелки) и означает, что любое мгновенное движение сработает как минимум на 5 секунд “на” состояние от датчика. Тем не менее, он также определяет задержку между активными состояниями - поэтому, если прошло 5 секунд, а движение не обнаружено, датчик отправит сигнал низкого уровня в течение не менее 5 секунд, даже если в течение этого периода будет движение. Если вы установили очень большую задержку около 30 секунд, может показаться, что датчик неисправен.

Если вы спите в одиночестве и не возражаете против использования одних и тех же полосовых RGB-ламп для сигнализации восхода и ночного освещения, вы сможете достаточно легко настроить код.

void nightlight () // Работает только между часами сброса -> восход. если (currentMinutes < minutesUntilSunrise) if(digitalRead(trigger) == 1) nightLightTimeOff = millis()+nightLightTimeOut; // activate, or extend the time until turning off the light Serial.println("Activating nightlight");   //Turn light on if needed if(millis() < nightLightTimeOff) digitalWrite(nightLight,HIGH);  else digitalWrite(nightLight,LOW);   

Тревога восхода солнца

Для простоты я буду использовать значение цвета RGB 255,255,0 для глубокого желтого восхода - таким образом, приращение на обоих цветовых каналах будет одинаковым. Если вы обнаружите, что он слишком рано разбудил вас, подумайте о том, чтобы начать с темно-красного и постепенно переходить в желтый или белый цвет. Увеличение, которое я использовал, было просто линейным - вы можете исследовать использование более естественной кривой для значений яркости..

Функция проста - она ​​определяет, сколько света следует увеличивать на каждую секунду, так что это происходит на полной яркости через 30 минут; затем умножает это на сколько секунд это в настоящее время в восходе солнца. Если он уже на полной яркости, он будет работать еще 10 минут, чтобы убедиться, что вы в рабочем состоянии (и если вы все еще не в сети, вам, вероятно, следует включить резервный аварийный сигнал)..

void sunrisealarm () // каждую секунду в течение 30-минутного периода следует увеличивать значение цвета на: float increment = (float) 255 / (30 * 60); // красный 255, зеленый 255 дает нам полную яркость желтый if (currentMinutes> = minutesUntilSunrise) // восход начинается! float currentVal = (float) ((currentMillis / 1000) - (minutesUntilSunrise * 60)) * приращение; Serial.print («Текущее значение для восхода солнца»); Serial.println (CurrentVal); // во время нарастания записываем текущее значение в минутах X яркости if (currentVal) < 255) analogWrite(RED,currentVal); analogWrite(GREEN,currentVal);  else if(currentMinutes - minutesUntilSunrise < 40) // once we're at full brightness, keep the lights on for 10 minutes longer analogWrite(RED,255); analogWrite(GREEN,255);  else //after that, we're nuking them back to off state analogWrite(RED,0); analogWrite(GREEN,0);    

Подводные камни и будущие обновления

Я использую это в течение последних нескольких недель, и это действительно помогает проснуться, чувствуя себя более свежим и в приличном времени; ночник тоже работает очень хорошо. Это не идеально, так что вот несколько вещей, которые требуют работы и уроков, извлеченных во время строительства.

При создании этого проекта я столкнулся с множеством проблем, связанных с большими числами, поэтому, если вы планируете модифицировать код, помните об этом. На языке Си ввод ваших переменных очень важен - число не всегда просто число. Например, без знака долго переменные должны использоваться для хранения сверхбольших чисел, с которыми мы имеем дело, говоря о миллисекундах, но даже такое маленькое число, как 60 000, не может быть сохранено как обычное целое число (без знака int было бы приемлемо для до 68 000). Дело в том, что при использовании больших чисел следует читать типы переменных, и, если вы находите нечетные ошибки, это возможно потому, что у одной из переменных недостаточно битов.!

Я также обнаружил проблему с утечками напряжения очень низкой яркости, что приводит к малейшему количеству испускаемого света, даже когда digitalWrite (КРАСНЫЙ, 0) сигнал испускается - я не думаю, что это аппаратная проблема с полосами, так как они отлично работают с официальными контроллерами. Если кто-то может решить эту проблему, изображенную ниже, я был бы очень признателен. Я пробовал опускать резисторы и ограничивал выходное напряжение на выводах Arduino. Возможно, мне понадобится добавить простую схему переключения питания, чтобы напряжение питания на светодиодной полосе использовалось только тогда, когда это действительно необходимо; или это может быть неисправный МОП-транзистор.

Для будущей работы я надеюсь добавить ИК-приемник и продублировать некоторые функции оригинального контроллера - по крайней мере, возможность изменять цвета в качестве общего источника света, поскольку сейчас этот проект превращает полосу в выделенную ночь свет. Я могу даже добавить автоматическую 30-минутную функцию тайм-аута.

Вы пробовали это, делали улучшения или получили другие идеи? Дай мне знать в комментариях!




О современных технологиях, просто и доступно.
Ваш гид в мире современных технологий. Узнайте как использовать технологии и гаджеты, которые нас окружают каждый день и научитесь открывать интересные вещи в Интернете.