2013-07-15 12:07:58 ywxiao66 阅读数 3102

1、立体声耳机插头

如何辨别耳机插头与插座的左右声道 - MR.Xiao - MR.Xiao的博客

如何辨别耳机插头与插座的左右声道 - MR.Xiao - MR.Xiao的博客

2、耳机插座(6脚位的,多一个信号脚可以用作MIC或者CVBS)

       将耳机插座头背向自己,焊接端朝下,一般右侧的金属焊接端子为右声道,左侧(或者后侧)为左声道。

(1) 插入前

如何辨别耳机插头与插座的左右声道 - MR.Xiao - MR.Xiao的博客

(2) 插入后

如何辨别耳机插头与插座的左右声道 - MR.Xiao - MR.Xiao的博客


2018-11-07 19:13:57 zhaoyaowo 阅读数 3407

3.5毫米耳机、麦克风电路图设计
从耳机插座底面的管脚旁边会有①②③④⑤的编号,对应尺寸图。
据三段式的耳机插头的接线,就可以确定耳机插座的连接:1脚接地,2脚接右声道(Right),5脚接左声道
(Left)。在耳机接头没插入插座的时候,2脚和3脚,4脚和5脚是接在一起的,而一旦接头插入插座的时候,2
脚和3脚,4脚和5脚会分开。所以从系统可靠性的角度来说,3脚和4脚应该接地,这样的话,耳机没插的时候,
左右声道输入接地,系统输入为0。很多时候,我们都会把不用的3脚4脚悬空,那么2脚和5脚也是悬空的,这样带
来的风险就是, 万一会从外界串入一个大电流,会从2脚和5脚传到板子上,从而会烧毁芯片;

我使用的耳机、麦克风座子,PCB设计管脚
我使用的耳机、麦克风座子,PCB设计管脚

原理图设计示意图
原理图设计示意图

2019-07-25 16:58:57 daihaojuzi 阅读数 554

1.什么是Wi-Fi插座

  Wi-Fi插座,顾名思义,便是利用家庭中的WiFi网络,让您的智能手机或平板电脑等在联网条件下,能通过App或网页操作打开或者关闭指定的电器。作为功能,一方面我们出门在外便可以控制插座的开关,另一方面家用电器如果可以做到随用随开,不用就断,那一方面就节省了一小部分电费,另一方面也让我们的家变得更安全,更智能。

在这里插入图片描述图片来自网络

2.为什么要做一个Wi-Fi插座

在这里插入图片描述
淘宝某热销智能插座分析:

在这里插入图片描述
制作思路:硬软件选择,及通信协议和接入平台

  硬件设计是方案的物理基础,在此我自行购买了一款工业制造的两插孔插座,并且取下其中的一个插孔单元,用于放置ESP32芯片,继电器,220V-5V降压模块等控制元件,将ESP32芯片+继电器+降压模块与另一个插孔的火线,零线相连,通电发现没有异常,硬件方案设计大体完成。

  软件设计层面,思路如下,将ESP32芯片与家里的局域网绑定起来,并为其固定一个IP地址,需保证该IP地址与自己家的局域网在同一网段,保证自己的手机可以对其访问,从网页端或APP端控制ESP32芯片转换高低电平从而通过控制继电器来控制插座的开关(电源通断),继而实现整个系统的功能控制,主要调用的是ESP32板子的Wi-Fi功能,完成控制任务。硬件部分主要包括:插座主体、220V-5V降压模块,控制芯片(ESP32),继电器部分等。

  另外,如果只在一个局域网内控制插座的开关,便失去了出门在外想远程控制的意义,所以,为了实现远程控制,采用MQTT接入中移物联网平台(OneNET)服务器的方法,远程控制插座的开关是本方案的升级计划。OneNET是比较成熟的IoT解决方案云平台,并且支持出世不久的ESP32芯片。中移物联网平台(OneNET)提供安全快速的设备接入能力,帮助使用者将数据上传至云端,并且云端通过调用API,下发数据给设备,从而实现远程控制设备的目的。同时提供其他丰富的云产品服务,非常好用。

简单工作原理图

在这里插入图片描述

3.各种物联网插座控制方式对比

  智能插座的功能特点在于控制。目前很多技术可以使用,列举以下几种控制方式进行猜想与假设:

1.红外遥控。虽然该技术已经非常成熟,红外线遥控属于光传波,是利用红外线来传播电信号,障碍物会影响信号传播,发射端和接收端之间要保持透明,中间不能有其它东西挡着,实用性略差。

2. GSM技术。全球应用最广泛的移动通信系统,主要原理是由具备GSM功能的通信设备通过向带有GSM通信能的模块发送指令来达到控制目的。优点是可以实现比较稳定的远程通信,但上述设备价格偏高,且在通信过程中会产生一些流量费用,不适合长期家用。

3. Wi-Fi技术。调用通信模块的Wi-Fi功能,保证在同一局域网内,向指定的IP地址发送指令即可控制插座开关。该方式简单易行,并且ESP32有Wi-Fi功能模块,可以轻松调用,又不会产生额外的费用。 综上所述,Wi-Fi技术实用且易操作,并且优于其他技术。

4.智能Wi-Fi插座硬件部分设计

  在硬件设计过程中,综合考虑了最终产品的体积大小以及性能忧虑,以及使用和开发的安全性与可行性。决定使用ESP32芯片的开发板用作为主体的控制部分,通过ESP32开发板控制继电器继而控制插座的开关。硬件部分设计如下:

3.1 控制芯片部分。

ESP32作为最近比较热门的开发板之一,主要具备以下优势:
1.性能优秀
ESP32 性能优秀,工作温度范围达到广泛,完全的符合家用电器使用。内置的自校准电路实现了小范围内的动态电压调整,减少了外部环境的影响,使芯片工作更加稳定。
2.超低功耗
非常适合移动端设备、携身电子产品和物联网应用开发,可在低功耗场景下配置。
3.高度集成
同时具备天线开关、RF balun、功率放大器、接收低噪声放大器、滤波器、电源管理模块等众多模块。在此基础上只需很少的外部器件,便可实现多种多样的开发功能。
4.Wi-Fi & 蓝牙解决方案
可以作为独立的最小系统去开发或者作为是主机 MCU 的从设备,可以作为接口提供 Wi-Fi 和Bluetooth功能。

220-5V降压模块

220-5V降压模块用来给主体控制模块供电。为减小插座成品的体积,增强5V电流输出能力,因此选用一体式封装的SM-PI-G06A-05(220-5V)降压模块。

电路功能

该降压模块是电源模块一种隔离性器件,具有温度保护,过流保护及短路全包住及短路权保护,高低压隔离,AC85-26V超宽电压输入,可以交直流转换,稳压精准, 5V直流电压输出,体积较小,可靠性高。

在这里插入图片描述

继电器模块

  继电器是具有隔离功能的自动开关无源元件。被广泛的应用于工业生产和日常生活。作为作用很大的控制组件之一。继电器通常可以作为反映某些输入变量(例如电流,电压,功率,频率,温度,压力,光等)的感应机构(输入部分);然后控制其他电路。 “控制”的执行器(输出部分);在继电器的输入输出两部分之间,还存在中间元件(驱动部分),二者之间相互作用,完成控制效果。总之,作为控制元素,继电器具有以下效果:

1)扩大控制范围:例如,如果是多触点继电器的话,当控制信号到达固定值时,触点组的可以进行切换,断开或者接通多个电路,从而达到扩大控制范围的目的。
2)放大:例如,作为中间元件可以控制高功率的电路。
3)积分信号:例如,当多个控制信号以规定的形式输入到多绕组继电器中时,比较之后进行控制。
4)自动化,远程控制,监控:例如,把继电器与其他电器连在一起,给控制芯片下载程序达到控制电路的目的,从而实现自动操作。
继电器的工作原理
  继电器通常由内部铁芯,电磁线圈,电枢,接触弹簧等组成。
  如果在线圈的两端施加一定的电压,一定的电流就会在线圈中流动,电磁效应产生之后,电枢将在该铁芯的作用下吸收复位弹簧对铁芯的拉力。有了电磁力吸引,从而启动电枢。动触头与固定触头(常开触头)接触。对线圈断电,电磁产生的吸引力也会消失,并且电枢在弹簧的反作用力中返回到初始位置,从而释放可动触头和初始始静触头(常闭触头)。达到吸合与释放的功能,从而实现在电路中接通和断开的目的。“常开触点”就是线圈没有通电时打开的静触头,“常闭触点”是处于静态状态的开启触点。继电器中一般情况下有两个电路,它们分别是高压工作电路和低压控制电路。

在这里插入图片描述

  当与ESP32芯片连接配合使用时,继电器由ESP32主控模块的G4控制。当G4输出高电平时,经过三极管放大,LED发光,继电器开启,此时插孔有通电正常工作;当G4输出低电平时,不进行放大,LED供电不足熄灭,继电器关闭,此时插孔断电,插座关闭。

插座选择

  自行网上购买的无线拓展两插孔电源转换器插座,最大承受功率2500W,最大承载电流10A,足以满足设计需求。一个插孔作为正常电源插孔使用,另一个插孔取下,放置ESP32芯片,继电器等元器件。 另外选择插座的时候,要充分考虑内部空间大小,接线复杂情况,另外也应购买一些大品牌的插座,毕竟是要直接接220V交流电,在保证功能完善的同时,也要考虑安全问题。

在这里插入图片描述

])

5.智能Wi-Fi插座软件部分设计

  采用的编译器是uPyCraft:

uPyCraft是一个推出不久的Python物联网开发工具,由国内公司(DFROBOT)研发,非常适合用MicroPython语言开发。
uPyCraft 特性:
1.支持在线更新。
2.目前支持在windows和mac操作系统下运行。
3.非常的简单实用,初学者用户容易快速上手。
4.里面有多种开发板的实例,学习成本很低。

  首先考虑需要支持ESP32这种出世不久的芯片,在考虑arduino和uPYCraft之后,选择上手更加容易的uPYCraft, 一个支持ESP32的 MicroPython ide。upycaft 是 支持ESP32芯片且用 MicroPython语言开发的一个非常简单的编辑器。界面是简洁的, 学习使用它也是比较简单的。

所以,先将ESP32芯片连接到电脑,然后打开“我的电脑”的“设备管理器”,应有如下界面显示:
在这里插入图片描述

  在电脑上安装好uPyCraft IDE后,点击运行这个软件。把它和开发板连起来,先点击菜单栏上的Tools(工具),再根据弹出的窗口中点击 Serial(串口),并选择用本机的COM端口选项,如图5.3所示。

本台电脑的端口为COM3,所以在下边serial选择COM3。
在这里插入图片描述
在菜单栏下的board(开发板)下拉列表单击ESP32这个开发板。此处如果尚未将MicroPython固件烧录到开发板上,那么在erase_flash(擦除Flash)下拉列表中选择yes(是),如出现no则是固件原因,故建议购买MicroPython固件的板子。
在这里插入图片描述
如果下面的窗口中显示这个符号“>>>”表示运行环境正常,此符号为Python提示符。
在这里插入图片描述
程序部分:
1.局域网控制需两个程序,一个用来连接Wi-Fi,一个用来控制。:
在这里插入图片描述
连接Wi-Fi程序:

def connect():
  import network
  ssid = "马玉成"                                    #局域网ID
  password =  "15188955709"               /#局域网密码
  station = network.WLAN(network.STA_IF)
if station.isconnected() == True:
    print("Already connected")
    return
  station.active(True)
  station.connect(ssid, password)
station.ifconfig(('192.168.43.199','255.255.255.0','192.168.43.233','192.168.43.233'))     
#为ESP32设置为固定的IP地址(静态IP,手动设置)
 while station.isconnected() == False:
    pass
 print("Connection successful")
  print(station.ifconfig())

控制程序:

from machine import Pin
import socket                          
import lianjie                                 #调用上边的连接程序
lianjie.connect()
led=Pin(4, Pin.OUT)                     #G4输出端
html= """<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>NodeMcu板载LED灯控制</title>
    </head>
    <body> 
            <h1>当前led灯状态:%s</h1>
            <br><br>
            <a href="/LED=ON""><button>开灯</button></a>
            <a href="/LED=OFF""><button>关灯</button></a><br /> 
    </body>
</html>
"""                                                 ## 生成的简单前端网页界面,用来做控制界面。
import socket
addr = socket.getaddrinfo('192.168.43.199', 80)[0][-1]  
s = socket.socket()
s.bind(addr)
s.listen(1)
print('listening on', addr)
while True:
    cl, addr = s.accept()
    print('client connected from', addr)
    request = cl.recv(1024)
    LedState=""
    if request.decode()[:20].find("LED=ON") != -1:
        led.value(1)
        LedState="打开"                                 #判断值是否为1,为1打开。
        elif request.decode()[:20].find("LED=OFF") != -1:
        led.value(0)
        LedState="关闭"                                #判断值是否为0,为0关闭。
    response = html % LedState
    cl.send(response) 
    cl.close() 

2.远程控制需两个程序,主程序mqtt,和一个umqtt库中自带的simple.py(自带程序不再介绍)。
mqtt程序:
在这里插入图片描述

import network
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
  print('connecting to network...')
sta_if.active(True)
sta_if.connect('马玉成', '15188955709') #wifi的SSID和密码
while not sta_if.isconnected():
  pass
print('network config:', sta_if.ifconfig())



from simple import MQTTClient
from machine import Pin
import time
import machine
import json
import micropython
# ESP32 ESP-12 modules have blue, active-low LED on GPIO2, replace
# with something else if needed.
led = Pin(2, Pin.OUT, value=0)
led.value(1)
time.sleep(1)
led.value(0)
out = Pin(12,Pin.OUT,value=0)
get_in = Pin(14,Pin.IN)
# Default MQTT server to connect to
SERVER = "183.230.40.39"
CLIENT_ID = "527249858"
TOPIC = b"topic1"
username='244037'
password='6LIGFBFWp==XLUzqCWlXYwpBKTg='
state = 0
def pubdata():
    global state
    data = {'datastreams':[{'id':'temp1','datapoints':[{'value':str(state)}] } ]}
    j_d = json.dumps(data)
    j_l = len(j_d)
    arr = bytearray(j_l + 3)
    arr[0] = 1 #publish数据类型为json
    arr[1] = int(j_l / 256) # json数据长度 高位字节
    arr[2] = j_l % 256      # json数据长度 低位字节
    arr[3:] = j_d.encode('ascii') # json数据
    return arr

def catch_mouse(p):
  global state
  state = 1
  led.value(1)
  out.value(1)
  state = 1
  print("catch one time")

def sub_cb(topic, msg):
  global state
  print((topic, msg))
  if msg == b"off":
    led.value(0)
    out.value(0)
    state = 0
    print("1")
  elif msg == b"on":
    led.value(1)
    out.value(1)
    state = 1
    print("0")
  elif msg == b"toggle":
    # LED is inversed, so setting it to current state
    # value will make it toggle
    led.value(state)
    out.value(state)
    state = 1 - state
def main1(server=SERVER):
  global state
  c = MQTTClient(CLIENT_ID, server,6002,username,password)
  # Subscribed messages will be delivered to this callback
  c.set_callback(sub_cb)
  c.connect()
  c.subscribe(TOPIC)
  c.publish('$dp',pubdata())
  print("Connected to %s, subscribed to %s topic" % (server, TOPIC))
  try:
    while 1:
      #micropython.mem_info()
      c.publish('$dp',pubdata())
      #c.ping()
      c.check_msg()
      time.sleep(3)
  finally:
      c.disconnect()


get_in.irq(trigger=Pin.IRQ_FALLING,handler=catch_mouse)
main1()

整体流程:
在这里插入图片描述

代码奉上,愿各位同学自己动手焊接与修正。

2016-08-11 20:19:20 lonely_geek 阅读数 2128

  插座的通断是通过单片机来控制,结合蓝牙POS机做透传,即可直接通过蓝牙来控制继电器。
  
  51单片机代码比较简单,放出完整代码。

#include <stc89c5xrc.h>
#include <string.h>

#define FOSC 22118400L //定义晶振频率
#define BAUD 115200  //定义波特率
#define SMOD  1
#define RX_BUFF_SIZE 64
#define ERR_CODE_RSP 0xD0  //错误码

/*定义四路开关控制引脚*/
sbit PLUG_1 = P2^4 ;
sbit PLUG_2 = P2^7   ;
sbit PLUG_3 = P2^6 ;
sbit PLUG_4  = P2^5 ;

unsigned char rx_buff[RX_BUFF_SIZE] = {0}; //串口接收缓冲区
volatile unsigned char rx_count = 0; //接收计数器
volatile unsigned char pos = 0;    //读取计数器,记录当前读取字节数  

volatile unsigned char msg_code = 0x00;  //存储控制码
volatile unsigned char status_code = 0x70;  //存储状态码

/** 串口发送 **/
void byte_send(unsigned char ch)
{
    SBUF = ch ;
    while(!TI);
    TI = 0;
}

/** 判断缓存是否有数据可读取 **/
unsigned char is_rx_buffer_empty(void) 
{
    return !(rx_count - pos);
}

/** 读缓冲区一个字节 **/
unsigned char uart_read(void)
{
    unsigned char c;
    c = rx_buff[pos++];
    if(rx_count == pos){
        rx_count = pos = 0;
    }   
    return c;
}

/** 消息处理 **/
/** 简单起见,就用了一个字节做控制码 
    bit0 ~ bit3: 分别对应四路开关,置0为关,置为1为开
    bit4 ~ bit8: 作为参数类型(0x06:查询开关状态 0x07:设置开关状态)
**/ 
void msg_process(void)
{
    if(is_rx_buffer_empty()) //如果设计成多个字节作为控制码,此处要改为while循环
        return; 
    msg_code = uart_read();

    switch((msg_code & 0xF0) >> 4)
    {
        case 0x6:  //Get the status
            msg_reply(status_code); 
            break;
        case 0x7:  //Set and get status
            PLUG_1 = msg_code & 0x01 ;
            PLUG_2 = (msg_code & 0x02) >> 1 ;
            PLUG_3 = (msg_code & 0x04) >> 2 ;
            PLUG_4 = (msg_code & 0x08) >> 3 ;
            status_code = msg_code; //保存本次处理结果
            msg_reply(status_code);
            break;
        default:  //Err code
            msg_reply(ERR_CODE_RSP);        
    }
}

/** 消息响应 **/
void msg_reply(unsigned char msg)
{
    //byte_send(':');//unknow reason 
    delay(1500);
    byte_send(msg);
    byte_send(':'); //将':'作为间隔符,蓝牙POS收到该符号,才认为一条数据接收完毕
}


/** 串口初始化 **/
void uart_init(void)
{
    SCON = 0x50 ;
    TMOD = 0x20 ; 
    PCON |= 0x80 ;    //set smod 
    TH1 = TL1 = 256 - FOSC*(SMOD+1)/32/12/BAUD ;
    TR1 = 1;
    ES = 1 ;
    EA = 1 ;
}

/** 串口中断处理 **/
void  serial() interrupt 4  using 1
{
    if(RI)
    {
        RI = 0;
        if(rx_count > RX_BUFF_SIZE)
            rx_count = 0;
        rx_buff[rx_count++] = SBUF ;
    }
}


/** 主函数 **/
void main(void)
{
    P2 = 0x00;
    uart_init();
    while(1)
    {
       msg_process();
    }
}

消息处理函数,一定要放在主循环中,有的开发者习惯在中断响应函数中做消息处理,容易导致串口数据丢失。中断中一定只做简单的处理,本代码中只是将中断接收到的数据存到数组中。

测试:
假设当前开关状态为: 0101

用串口助手输入16进制:
输入:0x60 返回:0x75 0x3A //查询当前开关状态,0x3A为’:’对应16进制ASCII码
输入:0x77 返回:0x77 0x3A //设置开关0、开关1、开关2 开,开关3关闭

操作成功后,会听见继电器开启、闭合的声音,可以用万用表测量是否导通或者切断。

插座

阅读数 470

插座

博文 来自: acns
没有更多推荐了,返回首页