最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

多通道无线调光(2)

时间:2017-05-17 09:57来源:未知 作者:admin 点击:
笔记 : 每个通道需要它自己的直流电源。 快速开关二极管ba159是用来纠正交流输入。 D2为12V稳压二极管 步骤8:MOSFET驱动器 交流开关是由一系列配置两个N-MOSFET形成 4N35 IC提供必要的隔离电源 由单片机控制的信

笔记每个通道需要它自己的直流电源。

  • 快速开关二极管ba159是用来纠正交流输入。
  • D2为12V稳压二极管

步骤8:MOSFET驱动器

多通道无线调光
  • 交流开关是由一系列配置两个N-MOSFET形成
  • 4N35 IC提供必要的隔离电源
  • 由单片机控制的信号被馈送到光电耦合器U1,U3

单片机的直流电源是由交流220V 5V直流3w PCB安装塑料封闭隔离开关降压电源模块(HLK - PM01)紧凑的外形

步骤9:把所有的东西放在一起

多通道无线调光

经了解,每个亚单位,整个电路的功能说明。

步骤10:规划ESP8266!

多通道无线调光

Arduino IDE用于nodemcu ESP8266模块程序。

  • 下载最新版本的Arduino IDEhttps://www.arduino.cc/en/main/software
  • 使用ESP8266 Arduino IDE按照下面给出的步骤,
    • 开始Arduino和打开选项窗口。

    • 进入<strong>“http://arduino.esp8266.com/staging/package_esp8266com_index.json</strong>”到额外的董事经理URL字段。

    • 开董事会经理从工具>板菜单和安装ESP8266平台

    • 选择nodemcu 1(ESP 12e模块)从工具>板菜单板安装后

    • 由Markus Sattler素描>安装WebSockets图书馆包括图书馆>管理图书馆
  • 请参阅下面的链接开始Arduino IDE ESP8266
    https://github.com/esp8266/arduino

  • 从提供的链接下载源代码,https://github.com/agkonale/multichannel-wireless-dimmer/tree/master/arduino

  • 源包含以下文件

    • trailing_edge_dimmer_v5.ino
    • 调光器,H
    • hw_timer C。
    • hw_timer。H
  • 使用长延迟非常气馁而使用ESP8266作为许多代码需要运行在芯片上除了素描当WiFi连接可能会导致频繁的WDT复位。因此我们使用hw_timers拯救自己从这困境。

  • 这个hw_timer。C、H hw_timer。文件提供必要的功能,使用硬件定时器在ESP8266。
    • <strong>hw_timer_init</strong>(frc1_timer_source_type source_type,U8 REQ)函数初始化定时器ESP8266,如果请求的说法是0定时器将开始在非汽车荷载模式还将启动自动加载模式。
    • <strong>hw_timer_set_func</strong>(void(* user_hw_timer_cb_set)(void))函数集的ISR处理定时器中断。

    • <strong>hw_timer_arm</strong>(U32 Val)启动定时器,以适当的时间间隔。

  • 调光器,H

包括必要的库文件。

#包括<< esp8266wifi。H > 
 
 #包括<< wificlient。H > 
 
 #包括<< esp8266webserver。H > 
 
 #包括<< esp8266mdns。H > 
 
 #包括<< esp8266httpupdateserver。H > 
 
 #包括<< Arduino。H > 
 
 #包括<< websocketsserver。H > 
 
 #包括<<哈希。”<BR>

接下来我们定义的<strong>调光模块性能</strong>。

#定义num_channels 2 
 #定义zero_crossing_int_pin 12 
 #定义三角4 / /(t_zero_crossing - t_interrupt)/ step_time 
 #定义step_time 78 / 128 lvls(美国)(65为50 Hz)
 
 / / 128级亮度控制
 int dimming_lvl [ num_channels ] = { 0 };//(0-127)
 
 int drive_pin [ num_channels ] = {个};
 int状态[ num_channels ] = { 0 };
 
 / WiFi接入点设置
字符串SSID =“-----------”;
字符串密码=“-----------”;
 
挥发性布尔都处理了[ num_channels ] = { 0 };

<strong>num_channels</strong>可以按你的需要增加,但你会在需要的地方进行必要的重复。(这样的设计可扩展到2多个频道!!)

<strong>step_time</strong>定义时间间隔的定时器中断服务程序反复调用。它的计算公式如下:

step_time:1 /(2 *频率* numlvls)×10 ^ 6
默认

频率为50赫兹numlvls = 128

SSID:网络SSID
密码:网络密码

<strong>drive_pin</strong>:阵列组成的针数的nodemcu(请使用正确的密码)<strong>zero_crossing_int_pin</strong>:中断引脚

<strong>三角洲</strong>:可能有一些固定的失配之间实际的零和中断,这是除去这个常数。

接下来我们添加一个连接ESP8266模块的WiFi接入点。

国际connecttowifi() 
 { 
 WiFi。开始(SSID。c_str(),密码。c_str());
 
 int i = 0;
而(!= wl_connected)
 { 
如果(我= = 30)
 { 
返回1;
 } 
延迟(1000);
 debug_print(“。”);
我+ +;
 } 
 debug_println(“”);
 debug_println(“连接”);
 debug_println(SSID);
 debug_println(“IP地址”);
 debug_println

现在开始的WebSocket连接<strong>websocketconnect()</strong>函数定义。

/ / WebSocket连接
 
无效websocketconnect() 
 { 
 WebSocket。begin();
 WebSocket。事件(websocketevent);

<strong>zero_crossing_int()</strong>是ISR连接到zero_crossing_int_pin检测过零点。

无效zero_crossing_int() 
 
 { 
如果(numactivechannels > 0){ 
 
 numhandled = 0;
 
为(int i = 0;i < num_channels,我+ +)
 { 
都处理了[我] = 0;
 
如果(状态[我] = = 1)
 { 
 digitalwrite(drive_pin [我],高);
 
 
 } }

<strong>dimtimerisr()</strong>是定时器中断服务程序所服务的每一step_time useconds。我们保持计数器每个活动通道和比较/更新他们的每一个周期。

无效dimtimerisr() 
 { 
如果(zero_cross = = 1)
 { 
为(int i = 0;i < num_channels;i++)
 { 
如果(状态[我] = = 1)
 { 
如果(lvl_counter [我] > dimming_lvl [我] +三角)
 { 
 digitalwrite(drive_pin [我],低);
 lvl_counter [我] = 0;
都处理了[我] = 1;
 
 numhandled + +;
如果(numhandled = = numactivechannels)
 { 
 zero_cross = 0;} } 
 
 
 else if(都处理了[我] = = 0)
 { 
 lvl_counter [我]

<strong>管理状态</strong>(开/关)的通道下面的函数定义。

无效update_state(int on_off,int channel_number)
 { 
如果(国家[ channel_number ] = = 0和on_off = = 1)
 { 
 numactivechannels + +;
 } 
 else if(状态[ channel_number ] = = 1和on_off = = 0)
 { 
 numactivechannels --;
 } 
 [ channel_number状态

<strong>websocketevent()</strong>功能开发的通信协议之间的ESP8266和客户。

void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) 
{
  switch (type) {
    case WStype_DISCONNECTED:
      break;
    case WStype_CONNECTED:
      {
        IPAddress ip = webSocket.remoteIP(num);
        lastChangeTime = millis();
        isSynced = 0;
        DEBUG_PRINTLN(ip);
      }
      break;
      
    case WStype_TEXT:
      {
        String text = String((char *) &payload[0]);
        lastChangeTime = millis();
        isSynced = 0;
              
        if(text.startsWith("a"))
        {
          String aVal=(text.substring(text.indexOf("a")+1,text.length())); 
          int Lvl_0 = aVal.toInt();
          Dimming_Lvl[0] = Lvl_0;
          DEBUG_PRINTLN(Lvl_0);
        }
  
        if(text.startsWith("b"))
        {
          String bVal=(text.substring(text.indexOf("b")+1,text.length())); 
          int Lvl_1 = bVal.toInt();
          Dimming_Lvl[1] = Lvl_1;
          DEBUG_PRINTLN(Lvl_1);
        }

	if(text=="ON_0")
        {
          Update_State(1,0);
     debug_println(“通道0!!”);} 
 
 
如果(文= =“off_0”)
 { 
 update_state(0,0);
 digitalwrite(drive_pin [ 0 ],
 debug_println(低)!!”);} 
 
 
如果(文= =“on_1”)
 { 
 update_state(1,1);
 debug_println(”!!”);} 
 
 
如果(文= =“off_1”)
 { 
 update_state(0,1);
 digitalwrite(drive_pin [ 1 ],
 debug_println(低)!!”);} } // 
 
 
 WebSocket。sendtxt(num,有效载荷长度);
 / WebSocket。broadcasttxt(有效载荷长度);
打破;
 
案例wstype_bin:
 hexdump都(载荷、长度);
 / WebSocket。sendbin(num,有效载荷长度

timer_init()功能

icache_flash_attr timer_init虚空(void)
 { 
 / frc1_source / nmi_source 
 hw_timer_init(frc1_source,1);
 hw_timer_set_func(dimtimerisr);
 hw_timer_arm(step_time
  • trailing_edge_dimmer_v5.ino文件
#包括“hw_timer。H”
 
 #包括“暗淡。”
 
无效setup() 
 { 
系列。开始(115200);
 pinmode(zero_crossing_int_pin,输入);
 
为(int i = 0;i < num_channels,我+ +)
 { 
 pinmode(drive_pin [我],输出);<BR> digitalwrite(drive_pin [我],低);
 } 
 connecttowifi();
 websocketconnect();
 mdnsconnect();
 httpupdateconnect();
 
 nointerrupts();
 timer_init();
 attachinterrupt(zero_crossing_int_pin,zero_crossing_int,上升);
 interrupts();
 } 
 
无效loop() 
 { 
如果!
      
      (责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
相关文章
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片