亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

叫醒我!

组件和用品

Arduino Nano R3
× 1
Maxim Integrated DS3231MPMB1 外设模块
× 1

关于这个项目

冬天来了,夜晚变得比白天还长,早上6点醒来进入一个黑暗寒冷的房间对我来说是一场噩梦。如果有一种方法可以创造人造“日出”,让房间感觉更加温暖宜人呢?

这是一项简单的任务,我将创建一个适合我当前吸顶灯的智能灯泡。它将通过缓慢照亮房间来模拟日出。如果它有效,我会将它与我的手机连接起来,使其成为一个合适的闹钟。

灯泡

要制作智能灯泡,您首先需要一个“哑”灯泡,因为它的插座拧入灯中并提供电源。我用锤子把它砸碎了。这个令人愉快的过程是从铝制插座上取下玻璃,将电线焊接到插座和底部的引脚后,智能灯泡的底座就准备好了。

接下来,您需要为所有电子设备提供支持。我使用了一块性能板并将其切割成适合 Arduino Nano 微控制器、5V 电源和所有电子元件。

高压电路

安全警告: 您正在使用大于 50V 的电压。接触高压可能导致重伤或死亡。

由于我使用的是由交流电源电压供电的普通灯泡,因此我无法直接使用微控制器来控制灯泡的电源。我需要一个双向可控硅。这个小设备充当继电器,可以非常快速地打开和关闭。微控制器将开启和关闭三端双向可控硅开关以改变交流正弦波,从而调暗或调亮灯光​​。

然而,交流电压的控制方式与直流电压不同。交流正弦波需要以精确的方式切割,因此必须在精确的时刻打开和关闭三端双向可控硅开关以实现这一点(见下图)。换句话说,微控制器需要知道电源电压的正弦波何时过零以将每个半波切割成相同的大小。否则,灯会闪烁。

为了检测电源电压的过零,有一个带有晶体管的 4N35 (U1) 光耦合器,当正弦波过零时该晶体管会导通。微控制器会将其视为其输入引脚上的高信号。光耦还有一个作用,就是将低压与市电电压电路隔离。

第二个光耦合器 - MOC3063 (U2) - 带有双向可控硅输出,用于将微控制器与高压双向可控硅 (Q2) 隔离。确保您没有使用具有过零功能的光耦合器,因为它仅在正弦波过零时开启。

低压电路

作为微控制器,我使用的是 Arduino Nano。它的主要目的是控制双向可控硅并在设定的时间到来时开始打开灯。为了提供实时时钟,DS3231精确实时时钟模块在掉电时也能保持时间。

为了为芯片提供 5V 电压,我使用廉价的 5V 700mA 降压电源连接到灯泡插座的电源电压。不错且方便的解决方案!

代码

该程序非常简单。当灯通过开关通电时,它会照亮房间并慢慢地将其调暗到夜晚,以验证电子设备仍然可以工作。在夜间,它检查存储在 DS3231 模块中的实时时钟,最后在早上 6 点,房间慢慢点亮到完全“白天”,直到灯被开关关闭。

查看下面附加的代码,我认为它不言自明。如果不是我是一个糟糕的开发者!

下一步是什么?

现在我将试验几天或几周,如果它能让我在早上醒来,我会将这个项目发展成更智能、更简单的项目!

晚安!

代码

  • lightalarm.ino
lightalarm.inoArduino
起床时亮起的智能灯泡。
/*起床时亮起的智能灯泡。工作原理:1) 当电源打开时, 灯打开是为了检查它是否工作2)它会慢慢变暗直到完全关闭3)早上6点灯会慢慢打开直到晚上关闭4)当房间不黑时灯不会打开不再(光电池)使用方法:- 睡觉时开灯,早上醒来时会照亮房间,离开房间时关灯将其关闭。- 时间将保留到 DS3231 模块@author Jiri Praus (https://twitter.com/jipraus)AC Light control 灵感来自 http://arduinotehniq.blogspot.com/2014/10/ac-light-dimmer-with-arduino.html* /#include  // 来自 http://www.arduino.cc/playground/Code/#include "RTClib.h"#define TRIAC_PIN 2#define ZERO_CROSS_PIN 3#define LIGHT_SENSOR_PIN A6#define FREQUENCY_STEP 75 // 这是 50Hz 的每亮度延迟步长(以微秒为单位)(将 65 中的值更改为 60Hz)#define CHANGE_DIM_LEVEL_EVERY 1 // 每 N 秒更改一次亮度级别,亮度/调光的慢度#define MAX_DIM_LEVEL 128 // off#定义 MIN_DIM_LEVEL 0 // on#define DARK_THRESHOLD 300 // 考虑外部黑暗时光电管的电阻 // 双向可控硅控制变量 volatile byte triacCounter =0; // 双向可控硅控制 timervolatile boolean zeroCrossed =false; // 交流相过零标志// 昏暗控制字节 dimLevel =MIN_DIM_LEVEL; // 通电时,灯亮起并缓慢变暗为 checkboolean lightOn =false;// 闹钟RTC_DS3231 rtc;void setup() { Serial.begin(115200);数字写入(TRIAC_PIN,低); pinMode(TRIAC_PIN,输出); pinMode(ZERO_CROSS_PIN, INPUT); pinMode(LIGHT_SENSOR_PIN,输入); // 初始化实时时钟 if (!rtc.begin()) { Serial.println("Couldn't find RTC");同时(1); } if (rtc.lostPower()) { Serial.println("RTC 断电,让我们设置时间!"); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // 以下行将 RTC 设置为编译此草图的日期和时间 } // 为 TRIAC 控制初始化中断和定时器 noInterrupts(); attachInterrupt(digitalPinToInterrupt(ZERO_CROSS_PIN), zeroCrossDetected, RISING); // 将中断连接到引脚 2(中断 0)以用于过零检测中断(); Timer1.initialize(FREQUENCY_STEP); Timer1.attachInterrupt(triacTimerInterrupt, FREQUENCY_STEP);}void loop() { delay(CHANGE_DIM_LEVEL_EVERY * 1000); checkAlarmClock(); adjustDimLevel(); debugPrint();}void zeroCrossDetected() { zeroCrossed =true; // 将布尔值设置为 true 以告诉我们的调光函数发生了过零 triacCounter =0; // 双向可控硅应该打开时开始计数 digitalWrite(TRIAC_PIN, LOW); // 关灯}void triacTimerInterrupt() { if (dimLevel>=MAX_DIM_LEVEL) { // 永久关闭 digitalWrite(TRIAC_PIN, LOW); } else if (dimLevel <=MIN_DIM_LEVEL) { // 永久在 digitalWrite(TRIAC_PIN, HIGH); } else if (zeroCrossed) { if (triacCounter>=dimLevel) { digitalWrite(TRIAC_PIN, HIGH); // 打开双向可控硅 zeroCrossed =false; // 重置过零检测直到下半个 vawe } else { triacCounter ++; // 增加时间步长计数器 } }}void adjustDimLevel() { if (lightOn &&dimLevel> MIN_DIM_LEVEL) { dimLevel--; } else if (!lightOn &&dimLevel  

示意图


制造工艺

  1. 系列电池
  2. 分压器
  3. 热电
  4. 电位计
  5. 马铃薯电池
  6. 相移
  7. 电压调节器
  8. 电压跟随器
  9. 多级放大器
  10. 差分放大器
  11. 电压比较器
  12. 专用二极管