DS18B20

Тема в разделе "Arduino & Shields", создана пользователем Perun61, 15 ноя 2012.

  1. ИгорьК

    ИгорьК Гуру

    Код в студию на всеобщее обозрение.

    Если ТС одобрит и у него не останется вопросов - я перечислю Вам 500 рублей на Яндекс кошелек, обещаю при всех присутствующих.
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Что значит полностью забивает?А обьединить?Считывает температуру выводит на дисплей если ниже включает реле запуска Вебасто/отправляет GSM команду на запуск.Вебасто как включается?
     
  3. krimator

    krimator Нуб

    Простым замыкание двух проводов. За это отвечает реле.
    Код писал не я, он довольно большой. Просил человека объединить, говорит не хватает памяти ардуины, нужно оптимизировать код.
    Не хочется чтобы дисплей горел всю ночь, а только при запуске.
     
  4. rkit

    rkit Гуру

    Я так понял, что он вообще не умеет программировать. Так что успех сомнителен немного. Но код набросаю, ладно.
     
  5. ИгорьК

    ИгорьК Гуру

    Ну, я знал что съэкономлю.
     
  6. Airbus

    Airbus Радиохулиган Модератор

    Еще вопрос Запуск Вебасто от термодатчика или по GSM?И второй вопрос насколько актуальна и принципиальна передача температуры из под капота в Интернет?И третий в кучу смысл запуска от датчика показывающего температуру за бортом?Вот например температура упала датчик сработал Вебасто заработал.За ночь он выжрет весь бак и высосет весь аккумулятор.Потому как никогда не выключиться потому как нет данных от датчика температуры антифриза.Здесь лучше заюзать штатный датчик температуры ОЖ.А подсвет LCD индикатора можно включать от релюхи запускающей Вебасто.Сам по себе он потребляет очень мало.
     
    krimator нравится это.
  7. rkit

    rkit Гуру

    Код (C++):
    // Include the libraries we need
    #include <OneWire.h>
    #include <DallasTemperature.h>

    // Data wire is plugged into port 2 on the Arduino
    #define ONE_WIRE_BUS 23

    // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
    OneWire oneWire(ONE_WIRE_BUS);

    // Pass our oneWire reference to Dallas Temperature.
    DallasTemperature sensors(&oneWire);

    /*
    * The setup function. We only start the sensors here
    */

    void setup(void)
    {
      // start serial port
      Serial.begin(115200);
      while(!Serial);
      Serial.println("Master");

      // Start up the library
      sensors.begin();
    }

    /*
    * Main function, get and show the temperature
    */

    void loop(void)
    {
      // call sensors.requestTemperatures() to issue a global temperature
      // request to all devices on the bus
      Serial.print("Requesting temperatures...");
      sensors.requestTemperatures(); // Send the command to get temperatures
      Serial.println("DONE");
      // After we got the temperatures, we can print them here.
      // We use the function ByIndex, and as an example get the temperature from the first sensor only.
      Serial.print("Temperature for the device 1 (index 0) is: ");
      Serial.println(sensors.getTempCByIndex(0));

      digitalWrite(ONE_WIRE_BUS, LOW);
      pinMode(ONE_WIRE_BUS, OUTPUT);
      delay(1000);
      pinMode(ONE_WIRE_BUS, INPUT);
      delay(5000);
    }
    Код (C++):
    // Include the libraries we need
    #include <OneWire.h>
    #include <DallasTemperature.h>

    // Data wire is plugged into port 2 on the Arduino
    #define ONE_WIRE_BUS 2

    // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
    OneWire oneWire(ONE_WIRE_BUS);

    // Pass our oneWire reference to Dallas Temperature.
    DallasTemperature sensors(&oneWire);

    /*
    * The setup function. We only start the sensors here
    */

    void setup(void)
    {
      // start serial port
      Serial.begin(115200);
      while(!Serial);
      Serial.println("Slave");
    }


    void loop(void)
    {
      while (true) {
        while(digitalRead(ONE_WIRE_BUS)){};
        auto fallingEdge = millis();
        while(!digitalRead(ONE_WIRE_BUS)){};
        if (millis() - fallingEdge > 800) break;
      }

      sensors.begin();
      // call sensors.requestTemperatures() to issue a global temperature
      // request to all devices on the bus
      Serial.print("Requesting temperatures...");
      sensors.requestTemperatures(); // Send the command to get temperatures
      Serial.println("DONE");
      // After we got the temperatures, we can print them here.
      // We use the function ByIndex, and as an example get the temperature from the first sensor only.
      Serial.print("Temperature for the device 1 (index 0) is: ");
      Serial.println(sensors.getTempCByIndex(0));
    }

    Вот вам демонстрация работоспособности.Код коммерческого качества за бесплатно я писать не буду. Лучше что-нибудь свое напишу.
     

    Вложения:

    b707, krimator и ИгорьК нравится это.
  8. ИгорьК

    ИгорьК Гуру

    Да я только за delay() без разрешения ТС готов 500 р. заплатить.
    Пишите номер Яндекс кошелька и перевод завтра будет выполнен.
     
  9. krimator

    krimator Нуб

    Блин, долго всё объяснять))
    Да только по GSM. Там разные функции: Включение реле по звонку (по повторному вырубает), включение и выключение по DTMF, и мониторинг температуры (будет стоять три DS18B20) салона, ож, и забортом через народный мониторинг.
    плюс можно получать смс при запросе.
    Ну хотело бы знать не выходя из дома, насколько прогрелась машина, плюс какая температура в машине и забором)
    Я буду запускать вибасту по телефону, за полчаса, за час до выезда. Вторая ардуинка, будет запускатся только после запуска вибасты (через реле запуска вибасты) и выводить данные температуры на монитор.
    Как-то так))
    Как это возможно?
    Экранчик будет 128x64 l2c, тоже можно вырубить подсветку?
     
  10. krimator

    krimator Нуб

    Что такое ТС?))
     
  11. rkit

    rkit Гуру

    410011054590887
     
  12. Tomasina

    Tomasina Сушитель лампочек Модератор

    А что это за тип?
     
  13. rkit

    rkit Гуру

    Тот, который возвращает millis() - unsigned long
     
  14. ИгорьК

    ИгорьК Гуру

    Как и обещал:

    3331144.jpg
     
  15. ИгорьК

    ИгорьК Гуру

    ТС - это ТопикСтартер.
     
  16. ИгорьК

    ИгорьК Гуру

    Ок, сначала карточный долг, потом открываем мешок с котом. :)

    Итак, как это работает в исполнении тов. rkit. Никогда бы не додумался до такого "оригинального" решения, и за тупость заплачено :)

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

    То что называется "слэйвом" обязано в мертвом цикле ловить эту шину в нуле, после чего само спросить температуру.

    ЗачОт, новое слово арбитража 1-wire :)
     
    issaom нравится это.
  17. krimator

    krimator Нуб

    Тема не раскрыта :)
     
  18. ИгорьК

    ИгорьК Гуру

    Это вопросы к rkit. Он же обещал что все элементарно.
    Мне просто по приколу посмотреть что же он там пишет на самом деле. Платил за радость познания (человека).
     
    issaom нравится это.
  19. rkit

    rkit Гуру

    Ну показывайте свой код, я посмотрю что там можно сделать.
     
  20. Привет всем! Напишу свой вариант решения проблемы глюка датчика DS18B20. В общем у меня собрана система обогрева на двух конвекторах суммарной мощностью 4 кВт. В качестве терморегулятора используется отечественная приблуда на атмеге RT-12-30. Оригинальный зонд покупать было в лом и его я решил сделать сам. Купил датчик и 7 метров витой пары, но двухпарки. При включении терморегулятора (замыкании встроенного реле) на дисплее попеременно отображался код 85 и текущая температура, реле ритмично щёлкало, но щелчков через десять всё же включалось. Начал эксприментировать. Пробовал заземлять свободную жилу, свитую с проводом обмена данных - эффекта ноль. В итоге провод был заменён на четырехпарник и свободные жилы скручены между собой, со стороны датчика провод GND скручен с ними. Со стороны терморегулятора скрученные свободные жилы висят в воздухе. Заземлять ничего не нужно!!! Если их заземлить, то глюк возвращается. Вот так я победил путём экспериментирования. Всем удачи! PS: Едва ли выбор жил витухи на что-то влияет, но на всякий случай: Оранжевый +, Зеленый Data, Синий Gnd.
     
    Последнее редактирование: 24 сен 2017