DW2 Sonoff Wifi Беспроводной датчик

Всем привет.

Сегодня рассмотрим что внутри у датчика DW2  фирмы Sonnoff.

OPL1000
ULTRA-LOW POWER 2.4GHZ WI-FI + BLUETOOTH SMART SOC




8M-BIT
SERIAL FLASH MEMORY WITH
DUAL AND QUAD SPI
Транзистор SI2301, A1SHB (20В, 2.2A, 1.25Вт) SOT23 smd P-Channel Enhancement Mode FET

Логический элемент. (Logic)

Всем привет.

 Делаю обзор данного устройства, в основном для того чтобы помнить, что было сделано такое устройство.

Встретился мне хороший человек, которому нужна была помощь. Помощь ему нужна была в плане сопряжения несколько устройств. В помещении стоит умная мойка для машин, которая моет машины и по завершению мытья машин нужно отрыть ворота. Вся загвоздка была в том, что электроника для ворот понимала определённый длинный импульс для открывания или закрывания ворот. А сама мойка выдавала просто короткий сигнал по завершению. На тот момент я принял решение пока поставить что было под рукой, это был (Авто ресет или можно назвать watch dogs). Само устройство выглядело как флэшка, но выполняла два условия, принимала входящий определенный сигнал и посылала дальше этот сигнал немного изменённый. После выполненной работы я решил взяться за своё придуманное устройство. Устройство должно было отвечать некоторым условиям:

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

И высокие условия стабильности.

В устройстве применяется котроллер PIC18F914. Гарвардская архитектура восьмиразрядных микроконтроллеров PIC. Архитектурой вычислительного устройства называют совокупность свойств и характеристик, определяющих модель вычислительного устройства с точки зрения пользователя. Архитектура ВУ включает в себя его внутреннюю структуру и систему команд. Гарвардская архитектура означает разделение памяти на память программ и память данных, которые имеют свое адресное пространство. Высокая скорость выполнения команд в PIC-контроллерах достигается за счет использования двухшинной гарвардской архитектуры вместо традиционной одношинной фон-неймановской. Даже на личном опыте сам помню, когда начинал первые разработки своих устройств 20 лет назад, контроллеры этого семейства, выносили такие мои многочисленные ошибки что сам поражаюсь как это все работало.

Устойчивое к перепадам влажности и температуры

Покрываю плату лаком и стараюсь устанавливать обвязку, которая работает в большом диапазоне температуре окружающей среды.

Устойчивое к статике

На входе была использована схема с гальванической развязкой и защищена супрессором (SMBJ6V5CA).

Входное питание для устройства в большом диапазоне, не имея полярности

По питанию было применена схема на модуле LM2596 которая работает в диапазоне от 0 до 40 вольт.

Интуитивное понятный интерфейс.

Здесь все просто, использовал только кнопки с разной цветовой маркировкой. И последующим нажатием кнопок.

Корпус разрабатывал в solidworks под DIN реку, для удобства установки.

Печатал PET пластиком.

Разработка платы.

Разработку устройства поделил на две части:

  1. Процессор, интерфейс управления, входящий сигнал, исходящий сигнал
  2. Питание, и возможно в будущем разработка на RS485 интерфейсе связи.

Разработку оформлял DIPTRACE, кстати скачивая последнюю версию 15.01.2023, наткнулся на вирус на русификации, но старый русификатор прекрасно установился.

Конечно не обошлось без косяков, можно увидеть провод припаянный.

Обзор работы данного прибора будет в следящей статье.

Свой способ избавиться от пробки в принтере , на горячую.

Всем здравствуйте.  Недавно  для себя я нашел новый способ избавиться от пробки в принтере.

Все знают что пробка состоит из грязи или мусора в пластике в фильере , но избавиться от неё можно только разобрав принтер и заметить фильеру. Или попытаться проколоть иглой из набора, но грязь все равно остаётся там. Я немного поразмыслив и пришел к выводу что нужно что-то  чем можно было достать остатки грязи. Это должно быть металлическое и гибкое. Что то что должно пройти через экструдер но не игла , я уже пробовал.

  И нашел, это тросик металлический  , от велосипедного тормоза. Процесс такой. Нагреваем сопло до 200 попугаев, проталкиваем тросик до носика фильеры через экструдер, и начинаем крутить тросик пальцами по часовой стрелке.

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

Извиняюсь за объяснения,  я не писатель.

Снова экономический кризис снами, все в порядке. Microchip запретили продавать.

Решил в тяжелые времена поднять свои закрома, И как оказалось они есть . Нашел не хилую такую стопку PIC18F25J10 в размере 80 шт. И оформил для них платки на JLCPCB. Вот и решил их запаять все сразу. Фотографию прилагаю , как я на утюге и усаживаю на платы.

ССЫЛКА для заказа платы

Счетчик импульсов, отладка и применение. PIC12F1822

Сборка телефона , на контроллере PIC12f1822 совместно с MP3-16 .

MP3 TF 16P Кодим. с++\pascal

Всем привет. Недавно столкнулся с тем что нужно было управлять звуками, подключил модуль , а кода нет чтоб управлять. Начал искать для Микропаскаля для PIC . Нашёл только для С++ , пришлось переделать , делюсь кодом со всеми.

PASCAL

Пример использования.

DFplayer(track, 0x0101); // 01 — папка 01-трэк
delay_ms(100); // выдержка
DFplayer(volume,30); // установка звука
delay_ms(100);// выдержка
DFplayer( play ,0);// команда проигрывание

  • PROCEDURE DFplayer (F: WORD; DAT : WORD );
  • PROCEDURE write_comand ( VAR _CMD :array[10] of char);




{
// FF+06+03+00+00+01=0109
// 0-0109=FE F7
// Sample #2: In case of the play command it would be:
//  0      1     2    3    4   5   6    7    8    9
// 0X7E, 0xFF, 0x06, 0X0D, 00, 00, 00, 0xFE, X, 0XEF
// 0x06+0X0D+0xFE= 100010001 (binary)  ---> negate 011101110 =0xEE
// So your checksum for byte 8 is 0xEE

// 7E FF 06 0F 00 01 01 xx xx EF
// 0        ->        7E is start code
// 1        ->        FF is version
// 2        ->        06 is length
// 3        ->        0F is command
// 4        ->        00 is no receive
// 5~6        ->        01 01 is argument
// 7~8        ->        checksum = 0 - ( FF+06+0F+00+01+01 )
// 9        ->        EF is end code
}

unit MP3_DF_PLAER;

CONST track   = 0x03;//PARA DEFINIR EL NURO DE LA PISTA A REPRODUCIR DE 0 A 2999
CONST pause   = 0x0E;//PAUSAR REPRODUCCION
CONST play    = 0x0D;//REPRODUCIR
CONST next    = 0X01;//SIGUIENTE PISTA
CONST previus = 0X02;//PISTA ANTERIOR
CONST volume  = 0x06;//VOLUMEN DE AUDIO DESDE 0 HASTA 30
CONST volume_up = 0x04;//SUBIR VOLUMEN UN PASO A LA VES
CONST volume_down = 0x05;//BAJAR VOLUMEN UN PASO A LA VES
CONST USB_SD = 0x09;//ESPECIFICA DISPOSITIVO A LEER USB - SD
CONST EQ     = 0x07;//Normal : Pop : Rock : Jazz : Classic : Bass
CONST repeat_track = 0X08;//REPITE LA PISTA INDICANDO CUAL DE 0 A 2999
CONST repeat_all_tr = 0X11;//REPITE TODAS PISTA
CONST sleep       =  0x0A;//MODULO A DORMIR
CONST reset       =  0x0C;//RECETEO DEL DFplayer mini
CONST randon      =  0x18;//PISTAS ALEATORIAS
CONST stop        =  0x16;//DETENER
CONST set_DAC     =  0x1A;// SALIDA DAC ENCENDER - APAGAR
CONST set_repeat  =  0x19;//REPRODUCCION REPETIDA DE LA PISTA ACTUAL ENCENDER - APAGAR
CONST _ON          =  0x0000;//ENCENDER
CONST _OFF         =  0x0001;//APAGAR
CONST _SD          =  0x0002;//MEMORIA SD
CONST USB         =  0x0001;//MEMORIA USB
CONST Normal      =  0x0000;//EQUALIZADOR NORMAL
CONST Pop         =  0x0001;//EQUALIZADOR POP
CONST Rock        =  0x0002;//EQUALIZADOR ROCK
CONST Jazz        =  0x0003;//EQUALIZADOR JAZZ
CONST Classic     =  0x0004;//EQUALIZADOR CLASSIC
CONST Bass        =  0x0005;//EQUALIZADOR BASS

const comandoDFplayer : array[10] of char = (0x7E,0xFF,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xEF);

PROCEDURE write_comand ( VAR _CMD : array[10] of  char);
PROCEDURE DFplayer (F: WORD; DAT : WORD );
  VAR
comDF : array[10] of char;
implementation

    PROCEDURE DFplayer (F: WORD; DAT : WORD );
      BEGIN
        comDF[0]:=0x7E;
        comDF[1]:=0xFF;
        comDF[2]:=0x06;
        comDF[3]:=F;//0x00;
        comDF[4]:=0x00;
        comDF[5]:=hi(dat);//0x00;
        comDF[6]:=lo(dat);//0x00;
        comDF[7]:=0x00;
        comDF[8]:=0x00;
        comDF[9]:=0xEF;
      write_comand(comDF);
      END;


      PROCEDURE write_comand ( VAR _CMD :array[10] of char);
        VAR
           checksum: WORD  ;
           i : BYTE ;
          BEGIN
           checksum := 0;
             for i:=1 TO i<7 DO
               BEGIN
                checksum :=checksum+_cmd[i];
                UART1_Write(_cmd[i]);
               END;
           checksum := 0xFFFF - checksum + 1;

            _cmd[7] := hi(checksum);
            _cmd[8] := lo(checksum);

            for i:=0 to i<10  do
            UART1_Write(comDF[i]);
          END;

end.

С++

Это писал не я.

  • void write_comand (unsigned char *cmd); //Funcion de comunicacion
  • void DFplayer(unsigned char funcion, unsigned int dato);//Funcion
 //***DEFINICIONES***********************************************************************
#define track         0x03//PARA DEFINIR EL NUMERO DE LA PISTA A REPRODUCIR DE 0 A 2999
#define pause         0x0E,0x0000//PAUSAR REPRODUCCION
#define play          0x0D,0x0000//REPRODUCIR
#define next          0X01,0x0000//SIGUIENTE PISTA
#define previus       0X02,0x0000//PISTA ANTERIOR
#define volume        0x06//VOLUMEN DE AUDIO DESDE 0 HASTA 30
#define volume_up     0x04,0x0000//SUBIR VOLUMEN UN PASO A LA VES
#define volume_down   0x05,0x0000//BAJAR VOLUMEN UN PASO A LA VES
#define USB_SD        0x09//ESPECIFICA DISPOSITIVO A LEER USB - SD
#define EQ            0x07//Normal : Pop : Rock : Jazz : Classic : Bass
#define repeat_track  0X08//REPITE LA PISTA INDICANDO CUAL DE 0 A 2999
#define repeat_all_tr 0X11//REPITE TODAS PISTA
#define sleep         0x0A,0x0000//MODULO A DORMIR
#define reset         0x0C,0x0000//RECETEO DEL DFplayer mini
#define randon        0x18,0x0000//PISTAS ALEATORIAS
#define stop          0x16,0x0000//DETENER
#define set_DAC       0x1A// SALIDA DAC ENCENDER - APAGAR
#define set_repeat    0x19//REPRODUCCION REPETIDA DE LA PISTA ACTUAL ENCENDER - APAGAR
#define ON            0x0000//ENCENDER
#define OFF           0x0001//APAGAR
#define SD            0x0002//MEMORIA SD
#define USB           0x0001//MEMORIA USB
#define Normal        0x0000//EQUALIZADOR NORMAL
#define Pop           0x0001//EQUALIZADOR POP
#define Rock          0x0002//EQUALIZADOR ROCK
#define Jazz          0x0003//EQUALIZADOR JAZZ
#define Classic       0x0004//EQUALIZADOR CLASSIC
#define Bass          0x0005//EQUALIZADOR BASS
////////////////////////////////////////////////////////////////////////////////////////
//***Variables**************************************************************************
static unsigned char comandoDFplayer[10] = {0x7E,0xFF,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xEF};
 //*************************************************************************************
////////////////////////////////////////////////////////////////////////////////////////
//***Procedimientos**************************************************************************
void write_comand (unsigned char *cmd); //Funcion de comunicacion
void DFplayer(unsigned char funcion, unsigned int dato);//Funcion control DFplayer
//**************************************************************************************
 ///////////////////////////////////////////////////////////////////////////////////////
//***Funciones**************************************************************************

void write_comand(unsigned char *cmd){
 unsigned int checksum = 0;
 unsigned short i = 0;

   checksum = 0;
   for(i=1; i<7; i++){
          checksum += cmd[i];
   }
        checksum = 0xFFFF - checksum + 1;
        cmd[7] = (unsigned char) (checksum >> 8);
        cmd[8] = (unsigned char) checksum;

     for(i=0; i<10; i++){
          UART1_Write(cmd[i]);
     }
}
//--------------------------------------------------------------------------------------
void DFplayer(unsigned char funcion, unsigned int dato){

    comandoDFplayer[3] = funcion;
    comandoDFplayer[5] = (unsigned char) (dato >> 8);
    comandoDFplayer[6] = (unsigned char) dato;

 write_comand(comandoDFplayer);
}
////////////////////////////////////////////////////////////////////////////////////////

10 Лет. ELEMENTUS.RU

Сайт был основан 10 лет назад.

Печать на заказ.

Отчет о работе за прошедшую неделю. Немного переделок в принтере.

0

Использование 3D печати в очистке воды для дома .

0

Доброго времени суток.

Столкнулся с такой проблемой,что просто нет фильтров под рукой для воды. Заказать можно, но без денег не дают. Начал думать головой,что делать.

Взял старый фильтр,  сделал его замер и начал печатать на принтере ту часть, которая больше по диаметру.

Печатал из SBS Fdplas, пластик можно использовать в медицине, а значит можно и в пищевой индустрии использовать.

Нашел в закромах немного активированного угля, он предназначен для очистки воды.

И собрал новый фильтр.

 

Go to Top