Перейти к публикации
iT4iT.CLUB

svchekalin

Пользователи
  • Публикации

    111
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    15

Сообщения, опубликованные пользователем svchekalin


  1. 20.02.2023 в 17:15, OLEG сказал:

    Автор Kitsum проект жив? Собрал, залил скетч, долго менял параметры 

    
    pinMode(PIN_RELAY, OUTPUT);
      digitalWrite(PIN_RELAY, HIGH) LOW

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

     Спасибо за ваш проект, как можно отблагодарить вас?

    https://www.paypal.com/paypalme/kitsum


  2. Уважаемые форумчане испытываю  желание нарисовать печатную плату под проект метеостанции для заказа на производстве  в связи с этим хотелось бы спросить как видите это вы ? какие элементы добавить ? на данный момент понятно одно - она должна быть круглая для того чтобы поместить ее в будку стивенсона , у платы центральное отверстие под шпильку которое будет обведено полигоном для возможности использовать саму шпильку если возникнет необходимость , питание 5 вольт чтобы меньше было проблем с подбором блока питания. Жду пожеланий и уточнений . 


  3. 10.11.2017 в 13:06, Kitsum сказал:

    @LogOFF хорошо, с гаражом мы разберемся. Но в любом случае, вся силовая часть ляжет на Ваши плечи и именно Вам решать, как управлять вентиляторами и нагревателями.

    Что касаемо метеостанции на улице, то в принципе все уже готово, плюс ко всему будет описание, как перевести все на единый датчик BME280. А значит уменьшится бюджет всего проекта. Пока ждем датчики. Теплицы тоже подпадают под этот пункт.

    А вот общение с центральным сервером это уже интересный вопрос связанный непосредственно с коммуникацией. Могу предположить, что имеются три разных объекта:

    1. Квартира с центральным сервером
    2. Удаленный участок с домиком и теплицей
    3. Гараж

    Таким образом на всех трех объектах должна быть инфраструктура, позволяющая выходить в интернет и если он есть, то не вижу никаких трудностей с организацией передачи данных. В противном случае, придется запланировать дополнительные расходы.

    У меня тоже малина с москитом и я искренне не понимаю зачем заставлять контроллер принимать решение когда это может сделать малина. Добавляем node-red и получаем гибкую систему настроек и логики событий доступных в браузере


  4. 12.04.2019 в 08:50, ykamerton сказал:

    А как быть у кого нет домофона и частный дом.  С почты приходит звонок что получено какое письмо и просьба забрать его, или использовать услуги доставки

    потом уже кидают квитанции

    и у нас почтальон разносит корреспонденцию примерно в одно и тоже время

    Тут проще, у почты России есть приложение по которому можно отслеживать ваши доставки а вот спамеры вам скорее всего не докучают 


  5. 3 часа назад, ykamerton сказал:

    Чего там мудрить. во внутрь на дно ящика радио звонок кнопка, до кнопки линейку на весь ящик ширина.Упало что то сигнал 100 метров.

    В принципе идея достойна внимания по крайней мере можно вместо автоматики самому реагировать и затолкать спамеру его спам в одно место

     


  6. 12.08.2017 в 13:14, alexd6969 сказал:

    Спасибо автору за проделанную работу. Отличная метеостанция, но не хватает измерения скорости ветра. Может подумать над реализацией....?

    533,64 руб.  11%СКИДКА | MPXV7002DP скорости полета Сенсор коммутационная плата преобразователя APM2.5 APM2.52 дифференциальный Давление Сенсор игровые джойстики
    https://s.click.aliexpress.com/e/c9kuxyBu

    14 часов назад, Convix_Maximus сказал:

    Друзья дайте пожалуйста прошивку с библиотеками. Я что-то не нашел. Функционал очень заинтересовал.

    Так там вроде все в архиве есть , в коде посмотри китсум обычно коментить ссылки


  7. Ну я понимаю что насиловать память контроллера не нужно но вот в mqtt можно по подробней сбрасывать . На данный момент нахожусь в состоянии бетатестера , вроде считает только что пока не понятно похоже сотнями литров хотя я так воду не лью ... Будем тестить дальше . А да настройки по дефолту. Внесу свою лепту ; собираю данные через node-red группирую через переменные данные с двух счетчиков дополнив текстом холодная вода и горячая вода а потом отправляю на мыло.

    Код для импорта в node-red watercounter 

    Скрытый текст

    [{"id":"2c7de2c3.9bc00e","type":"mqtt in","z":"da66859c.abc4c8","name":"","topic":"waterCounter/hot","qos":"2","broker":"54e6c737.26fcc8","x":426.58331298828125,"y":318.33334159851074,"wires":[["29b449ae.c601e6"]]},{"id":"ce313c65.e51fe","type":"mqtt in","z":"da66859c.abc4c8","name":"","topic":"waterCounter/cold","qos":"2","broker":"54e6c737.26fcc8","x":420.83331298828125,"y":378.33335876464844,"wires":[["896559df.03e9f8","d63099a.696fc68"]]},{"id":"29b449ae.c601e6","type":"function","z":"da66859c.abc4c8","name":"variables_hot","func":"flow.set(\"water_hot\",msg['payload']); // установить значение\nreturn msg;","outputs":1,"noerr":0,"x":782.7380676269531,"y":317.61903190612793,"wires":[[]]},{"id":"896559df.03e9f8","type":"function","z":"da66859c.abc4c8","name":"Variables_cold","func":"flow.set(\"water_cold\",msg['payload']); // установить значение\nreturn msg;","outputs":1,"noerr":0,"x":797.5000305175781,"y":379.5238609313965,"wires":[[]]},{"id":"d63099a.696fc68","type":"function","z":"da66859c.abc4c8","name":"hot+cold","func":"var vc_name, vh_hame, water_cold, water_hot, vhn, vcn, water_counter;\nvc_name = 'холодная вода:';\nvh_hame = ' горячая вода:';\nwater_cold = flow.get(\"water_cold\");\nwater_hot = flow.get(\"water_hot\");\nvhn = vc_name + water_cold;\nvcn = vh_hame + water_hot;\nwater_counter = vhn + vcn;\nmsg['payload'] = water_counter;\nnode.send([msg]);\n","outputs":1,"noerr":0,"x":792.8333625793457,"y":444.6666431427002,"wires":[["80435cd6.ace54"]]},{"id":"80435cd6.ace54","type":"blynk-api-out-email","z":"da66859c.abc4c8","name":"","x":795.0000076293945,"y":520.0000133514404,"wires":[]},{"id":"54e6c737.26fcc8","type":"mqtt-broker","z":"","broker":"127.0.0.1","port":"1883","clientid":"nodered","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","willTopic":"","willQos":"0","willPayload":""}]

     

    scr.jpg


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

    И так , немного по эксперементировав стало понятно что датчики dht-22 никуда не годятся , разница в показаниях двух лежащих рядом просто чудовищная и от оных решено отказаться в пользу bme-280 . Было заказано аж три и до кучи ccs-811 (прилетели достаточно быстро всего пару недель) два bme-280 управляются контроллером вытяжки а два других датчика будут принимать участие в дальнейшем развитии проекта по контролю домашнего микроклимата. В общем данные пересылаются в mqtt а оттуда обрабатываются мощнейшей софтинкой на андроид по имени tasker (подробней о возможностях чудо софта https://xakep.ru/2014/05/25/tasker-full-using/) и плагина к нему mqtt client . На данный момент имеются гибко настраиваемые действия по событию будь то сообщение в топике или голосовая команда. Скетч с разрешения уважаемого kitsum прикладываю.

    Скрытый текст
    
    #include <ESP8266WiFi.h>
    #include <PubSubClient.h>
    #include <Servo.h>
    #include <Wire.h>
    #include <BME280I2C.h> // https://github.com/finitespace/BME280
    /* Настройки подключения d1 white d2 black*/
    String ssid   = "точка достура";
    String pass   = "пароль точки доступа";
    String server = "ip адрес mqtt";
    String device = "AirPump"; // Обязательно уникальное имя для каждого MQTT клиента
    /* Сетевой клиент */
    WiFiClient espClient;
    PubSubClient client(espClient);
    /* Сервы */
    Servo myservo1;
    Servo myservo2;
    /* Таймеры */
    uint32_t timer_bme = 0;
    /* BME */
    BME280I2C::Settings
    settings1(
      BME280::OSR_X1,
      BME280::OSR_X1,
      BME280::OSR_X1,
      BME280::Mode_Forced,
      BME280::StandbyTime_1000ms,
      BME280::Filter_Off,
      BME280::SpiEnable_False,
      BME280I2C::I2CAddr_0x76
    ),
    settings2(
      BME280::OSR_X1,
      BME280::OSR_X1,
      BME280::OSR_X1,
      BME280::Mode_Forced,
      BME280::StandbyTime_1000ms,
      BME280::Filter_Off,
      BME280::SpiEnable_False,
      BME280I2C::I2CAddr_0x77
    );
    BME280I2C BME1(settings1), BME2(settings2);
    
    void setup() {
      /* Serial */
      Serial.begin(115200);
      /* i2c scaner */
      Wire.begin(4, 5);
      i2c_scaner();
      /* Сервы */
      myservo1.attach(14); myservo1.write(170);
      myservo2.attach(12); myservo2.write(103);
      /* Нагрузка*/
      pinMode(13, OUTPUT);
      digitalWrite(13, HIGH);
      /* BME */
      BME1.begin();
      BME2.begin();
      /* Режим клиента */
      WiFi.setAutoConnect(true);
      WiFi.setAutoReconnect(true);
      WiFi.mode(WIFI_STA);
      WiFi.begin(ssid.c_str(), pass.c_str());
      /* Подключаемся */
      while(!WiFi.isConnected()) {
        delay(500);
        Serial.print('.');
      } Serial.print("!\r\n");
      /* Подключаемся к брокеру */
      client.setServer(server.c_str(), 1883);
      client.setCallback(callback);
    }
    
    void loop() {
      client.loop();
      if (client.connected()) {
        /* Тут можно что-то свое слепить */
        
        /* Отправка показаний с сенсоров каждые 10 секунд */
        uint32_t currentTime = millis();
        if (currentTime - timer_bme > 10000 or currentTime < timer_bme) {
          /* BME */
          float humidity, temperature;
          
          temperature = BME1.temp(BME280::TempUnit_Celsius);
          humidity = BME1.hum();
          if (!isnan(humidity) and !isnan(temperature)) {
            mqttsend("bme1/humidity",    humidity);
            mqttsend("bme1/temperature", temperature);
          } else Serial.println("Ошибка данных полученых от BME 1");
    
          temperature = BME2.temp(BME280::TempUnit_Celsius);
          humidity = BME2.hum();
          if (!isnan(humidity) and !isnan(temperature)) {
            mqttsend("bme2/humidity",    humidity);
            mqttsend("bme2/temperature", temperature);
          } else Serial.println("Ошибка данных полученых от BME 2");
          
          /* Обновляем таймер */
          timer_bme = millis();
        }
      } else reconnect();
    }
    
    void reconnect() {
      while (!client.connected()) {
        if (!device.length()) device = WiFi.hostname();
        if (client.connect(device.c_str())) {
          /* На какие топики подписаться */
          client.subscribe((device + "/control/#").c_str());
          Serial.printf("Оформлена подписка: %s\r\n", (device + "/control/#").c_str());
        } else {
          Serial.printf("Подключение не удалось, ошибка %d. Повтор через 5 секунд\r\n", client.state());
          delay(5000);
        } 
      }
    }
    
    void callback(char *gtopic, byte *payload, unsigned int length) {
      String msg;
      for (unsigned int i = 0; i < length; i++) msg += (char)payload;
      Serial.printf("\r\nСообщение[%s]: %s ", gtopic, msg.c_str());
      /* Тут обрабатываются команды */
      if (find(gtopic, "gpio13")) gpio(13, msg, "on", "off", LOW, HIGH);
      else if (find(gtopic, "servo1")) servo(myservo1, msg, "open", "close", 80, 170);
      else if (find(gtopic, "servo2")) servo(myservo2, msg, "open", "close", 18, 103);
      else Serial.print("Топик не поддерживается");
    }
    
    void gpio(byte port, String msg, const char *c1, const char *c2, bool st1, bool st2) {
      if (msg == c1) digitalWrite(port, st1);
      else if (msg == c2) digitalWrite(port, st2);
      else Serial.print("Команда не поддерживается");
    }
    
    void servo(Servo s, String msg, const char *c1, const char *c2, byte g1, byte g2) {
      if (msg == c1) s.write(g1); 
      else if (msg == c2) s.write(g2);
      else Serial.print("Команда не поддерживается");
    }
    
    bool find(char *gtopic, char *topic) { 
      return (String(gtopic) == (device + "/control/" + topic));
    }
    
    void mqttsend(String subtopic, int32_t message)  { mqttsend(subtopic, String(message)); }
    void mqttsend(String subtopic, uint32_t message) { mqttsend(subtopic, String(message)); }
    void mqttsend(String subtopic, float message)    { mqttsend(subtopic, String(message)); }
    void mqttsend(String subtopic, String message)   { client.publish((device + "/" + subtopic).c_str(), message.c_str()); }
    
    void i2c_scaner() {
      byte count = 0;
      Serial.println("Scanning...");
      for (byte address = 1; address < 127; address++) {
          Wire.beginTransmission(address);
          byte status = Wire.endTransmission();
          if (status == 0) {
            Serial.print("I2C device found at address ");
            Serial.println(address, HEX);
            ++count;
          } else if (status == 4) {
            Serial.print("Unknow error at address ");
            Serial.println(address, HEX);
          }
      }
      if (!count) Serial.println("No I2C devices found");
      Serial.println("done\n");
    }

     


    Screenshot_2018-06-28-13-20-55-865_com.thn.iotmqttdashboard.png Screenshot_2018-06-28-13-20-44-147_com.thn.iotmqttdashboard.png Screenshot_2018-06-28-13-22-58-819_com.miui.home.png


  9. В 10.06.2018 в 21:07, Alex_DIY сказал:

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

    вот позволю себе не согласится с вами . Логично предположить что в доме разеток 220 гораздо больше чем rg45 и собственно отсюда все вытекающие . Я бы использовал wemos mini и шилд зарядки , стоит не дорого а марока сводится к нулю

    Screenshot_2018-06-27-22-11-04-573_com.alibaba.aliexpresshd.png Screenshot_2018-06-27-22-10-13-360_com.alibaba.aliexpresshd.png


  10. В общем тяга к автоматике давно у меня в оном месте свербит а в городской однушке много не автоматизируеш . С подачи уважаемого Kitsum узнал о преимуществах MQTT перед мускулом и родилась идея контроля качества воздуха с заменой оного в жилище (после 9го мая с утра это особенно актуально) Собрал из аргалита коробку и обклеил стеклотканью на эпоксидной смоле внутри и снаружи  ,поместил туда центробежный вентилятор (фоток нет так как я заклеил его в коробке раньше чем мысль оставить на память потомкам образ этого агрегата посетила меня) вклеил прямоугольные воздуховоды и модернизированные обратные клапана клапана . Клапана изготовил очень легко . До этого месяца два ждал с али потшипники и думал схему как этот самый клапан я сделаю но купив стандартные обратки понял что тут особо думать не нужно отрезав с одной стороны ось на которой качается запирающий лепесток я на это место поместил качалку из комплекта сервопривода . Рычаги кочалки распилены пополам так чтобы обеими своими концами захватывали лепесток а в корпусе клапана грубо прожжена дырень паяльником куда входит серва и вставляется в штатную качалку а чтобы серва держалась на корпусе применил холодную сварку из автомагазина , причем эта холодная сварка держит весь этот пластик не хуже горячей , покрайней мере когда я понял свой косяк (разместил под разными углами сервы ) и попытался оторвать серву от корпуса, мне это удалось далеко не сразу хотя дядька я не маленький. Ну в общем получилось то что получилось , агрегат вроде интересный но без мозгов... ESP8266 а точнее  NodeMcu ESP12e которая валялась у меня с незапамятных времен была призвана частично решить этот недостаток, прикрутил реле на включение мотора вытяжки а также добавил два датчика DHT22 для измерения температуры и влажности в помещении и за стенкой где расположена ванная и началась глубоко интелектуальная работа по поиску и копипаста чужого кода .после пары безсонных ночей на свет был рожден некий франкинштейн которого Kitsum безжалостно унизил и уничтожил родив при этом код в котором я тоже поучавствовал добавив пароль, имя точки и адрес сервера ! В общем теперь это полноценный умный агрегат который шевелит клапанами и включает мотор в зависимости от данных MQTT. А собственно чего я добиваюсь ? Малинка едет , едет датчик CJMCU-811 CCS811 для определения количества выпитого на днях витаемого в воздухе , проломлена стена куда помещен и запенян воздуховод (создание фильтра очитки воздуха , запирания и подогрева в скором времени тоже будет изложено сдесь)

     

     

    лепесток.jpg

    качалка.jpg

    клапан.jpg


  11. Уважаемые ! Хочу предложить вот такие качественные замки по демократичной цене ! Всего-то хочу 2500 . На форуме я проверенный человек кидалово не предвидится. https://www.perco.ru/products/vreznoy-elektromekhanicheskiy-zamok-lc85.4.php

    • Like 1

  12. В 17.05.2017 в 08:47, maxim сказал:

    Всем привет. Во-первых спасибо Kitsum за проделанную работу.

    Во-вторых переделываю это все на ESP8266, так как под рукой нет ethernet шилда для Arduino.

    Сразу с работой с MySQL.

    У меня вопрос такого плана: есть ли смысл UID переводить из 16 в 10 и писать в базу как число? Или проще в базу писать как varchar и потом просто сравнить посимвольно?

     

    И еще одна проблема: при работе по I2C в инете у всех используется только SDA, SCL. У меня на ESP8266 так работает, но через какое-то время перестает принимать карты пока не перезагрузишь ESP. И иногда не видит PN532, приходится ему питание передергивать. Получается что без IRQ и RESET по I2C все таки работать не будет? На Arduino такая-же ерунда. По SPI все работает.

    Уважаемый вы бы скинули свои наработки всё-таки Kitsum постить свои работы не просто так а для того чтобы тема развивалась

    • Like 1
×
×
  • Создать...