Проекты на заказ, от новичка :)(БЕСПЛАТНО )

Тема в разделе "Сделаю проект", создана пользователем ZaikaBlogs, 11 авг 2014.

  1. vvr

    vvr Инженерище

    Получается нужен альтруист для написания кода:D
    А перед тем, как показали как скетчи соединять, нужно что то в них понять. Помигать светиком, поиграться с кнопками - это и есть части вашего проекта.
     
  2. vvr

    vvr Инженерище

    Кстати, а почему автор темы молчит?
     
  3. CrazyWinD

    CrazyWinD Нуб

    возможно вы и правы, больше терпение может что то и выйдет!
     
  4. vvr

    vvr Инженерище

    Всё зависит от того, насколько вам это нужно или интересно.
    Если это затея одноразовая, то два варианта
    - довольно много времени потратить на обучение и эксперименты, пока что то получится
    - кто то сделает вам бесплатно или за денежку.
     
  5. ZaikaBlogs

    ZaikaBlogs Нерд

    Я просто ленивый :)
     
  6. гдеже сейчас взять трудолюбивых программеров?
     
  7. &Anton

    &Anton Нерд

    А может мне поможете переделать код , ну и кое что дописать. Проект будет применяться для управления топки с водяным контуром.
    Оборудование:
    Arduino uno
    2x ds18b20
    Lcd 2x16 с кнопками
    arduino relay shield

    Код (Text):
    #include <EEPROM.h>
    #include <OneWire.h>
    #include <LiquidCrystal.h>

    #define OUT1 2 // выходы для реле
    #define OUT2 3

    byte tempOUT1, tempOUT2;

    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    OneWire  ds(11); // 11 вход датчика 18b20

    byte gradus[8] = {
      0b00110,
      0b01001,
      0b01001,
      0b00110,
      0b00000,
      0b00000,
      0b00000,
      0b00000
    };


    void erorr(){ // останавливает работу программы и сигнализирует ошибку
      digitalWrite(OUT1, LOW); // выключаем реле
      digitalWrite(OUT2, LOW);
        while(1){ // крутим бесконечный цикл
          digitalWrite(13, !digitalRead(13));
          delay(500);
        }
    }
    ////

    byte key(){ //// для кнопок ЛСДшилда
      int val = analogRead(0);
        if (val < 50) return 5;
        else if (val < 150) return 3;
        else if (val < 350) return 4;
        else if (val < 500) return 2;
        else if (val < 800) return 1;
        else return 0;
    }
    ////

    void setMenu(){ // установка температуры
      byte pos;  
      digitalWrite(OUT1, LOW); // выключаем реле
      digitalWrite(OUT2, LOW);

      lcd.clear();
      lcd.setCursor(0, 0); // что нужно отрисовать один раз
      lcd.print("OUT1: ");
      lcd.setCursor(0, 1);
      lcd.print("OUT2: ");
      lcd.blink();
     
      while(1){ // крутим бесконечный цикл    
        byte KEY = key(); // читаем состояние кнопок
       
        lcd.setCursor(6, 0); // выводим на экран
        lcd.print(tempOUT1);
        lcd.write(1);
        lcd.print("C  ");
        lcd.setCursor(6, 1);
        lcd.print(tempOUT2);  
        lcd.write(1);
        lcd.print("C  ");
       
        ////// обработка кнопок
        if (pos == 0){  // если в первой позиции
          lcd.setCursor(5, 0); // устанавливаем курсор
          if (KEY == 2) { // если нажата кнопка
            tempOUT1--;  // изменяем значение
            EEPROM.write(1, tempOUT1); // сохраняем в еепром
          }
          else if (KEY == 5){
            tempOUT1++;
            EEPROM.write(1, tempOUT1);  
          }  
        }
        if (pos == 1){
          lcd.setCursor(5, 1);
          if (KEY == 2) {
            tempOUT2--;
            EEPROM.write(2, tempOUT2);
          }
          else if (KEY == 5){
            tempOUT2++;
            EEPROM.write(2, tempOUT2);  
          }  
        }
       
        if (KEY == 3) pos--; // крутим позицию
        else if (KEY == 4) pos++;  
        if (pos > 1) pos = 0;
      delay(200);
      }
    }

    float getTemp(){  // возвращает температуру с датчика
      byte data[12];  // и останавливает программу на секунду
      byte addr[8];
     
      if (!ds.search(addr)) {
        lcd.clear();
        lcd.print("No sensor.");
        erorr();
      }
     
      ds.reset_search();
      if (OneWire::crc8(addr, 7) != addr[7]) {
        lcd.clear();
        lcd.print("Sensor CRC erorr");
        erorr();
      }
     
      ds.reset();          
      ds.select(addr);      
      ds.write(0x44);    
      delay(1000);
     
      ds.reset();
      ds.select(addr);  
      ds.write(0xBE);        

      for (int i = 0; i < 9; i++) data[i] = ds.read();
      int raw = (data[1] << 8) | data[0]; // Переводим в температуру
      if (data[7] == 0x10) raw = (raw & 0xFFF0) + 12 - data[6];
     
      return raw / 16.0;
    }

    void setup() {
    //  Serial.begin(9600);
      lcd.createChar(1, gradus);
      lcd.begin(16, 2);
      lcd.clear();
     
      pinMode(13, OUTPUT);
      pinMode(OUT1, OUTPUT);
      pinMode(OUT2, OUTPUT);
     
      tempOUT1 = EEPROM.read(1); // читаем настройки
      tempOUT2 = EEPROM.read(2); // из еепром
    }

    void loop() {
      if (key() == 1) setMenu(); // если нажата селект, уходим в меню
      else if (key() == 4) analogWrite(10, 20); // если вниз, глушим подсветку
      else if (key() == 3) digitalWrite(10, HIGH);
     
      float temperature = getTemp(); // читаем температуру
      if (temperature > tempOUT1) digitalWrite(OUT1, HIGH); // сверяем температуру
      else digitalWrite(OUT1, LOW);                        // и управляем выходами
      if (temperature > tempOUT2) digitalWrite(OUT2, HIGH);
      else digitalWrite(OUT2, LOW);
         
      lcd.setCursor(0, 0); /// вывод инфы на экран
      lcd.print("1:");
      lcd.print(tempOUT1);
      lcd.write(1);
    //  lcd.print("C");
        if (digitalRead(OUT1)) lcd.print(" ON "); // показываем состояние выхода
        else lcd.print(" OFF");
      lcd.setCursor(0, 1);
      lcd.print("2:");
      lcd.print(tempOUT2);
      lcd.write(1);
        if (digitalRead(OUT2)) lcd.print(" ON ");
        else lcd.print(" OFF");  
       
      lcd.setCursor(9, 0); // показываем температуру с датчика
      lcd.print("|");
      lcd.print(temperature, 1);
      lcd.write(1);
      lcd.print("C");
      lcd.setCursor(9, 1);  
      lcd.print("|");
    }
    Работать будет это так , при включении два выхода будут отключены , после первой заданной температуре включаться вентилятор при второй водяной насос .Еще бы хотелось чтоб к примеру при 95 градусах подавался звуковой сигнал и отключался вентилятор .

    Адреса сенсоров
    DeviceAddress sensor1 = {0x28, 0xFF, 0xE6, 0x25, 0x2E, 0x04, 0x00, 0xA4};
    DeviceAddress sensor2 = {0x28, 0xFF, 0x37, 0x1F, 0x4B, 0x04, 0x00, 0xF4};


    Код взятый с arduinoLab
     
  8. vvr

    vvr Инженерище

    А вы на макетке собрали всё до кучи и этот код проверили?
     
  9. &Anton

    &Anton Нерд

    Да конечно собрал и все работает вчера дописал ошибку при 95ºС и еще один выход к которому подключу LED error
     
  10. vvr

    vvr Инженерище

    Тогда в чём суть вопроса если всё работает?
     
  11. &Anton

    &Anton Нерд

    Вопрос в том , что код написан для одного датчика , а мне надо чтоб второй датчик показывал температуру в комнате в правом нижнем углу lcd.
     
    Последнее редактирование: 5 окт 2014
  12. здравствуйте! я недавно увлекся ардуино и мне очень нужна помощь. интересует следующая идея: когда в радиусе действия блютуз модуля появляется мой телефон, нужно чтобы ардуино включала реле. и выключала его когда я отходил за пределы действия BT. И чтобы только мой телефон являлся неким ключом. Я знаю что такое возможно, видел в инете, замок на дверь, с открыванием без ключей, просто подходишь, замок видит телефон и добро пожаловать. а вот как реализовать, не знаю.
    http://homegadgets.ru/jelektronnyj-zamok-kwikset-kevo.html
    Заранее благодарен если сможете помочь, а то у меня пока мозгов не хватает для написания такого скетча)))
     
  13. vvr

    vvr Инженерище

    Интересно, а мозгов хватает сделать сам замок?
    А то как то программа без замка зачем?
     
  14. Megakoteyka

    Megakoteyka Оракул Модератор

    Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня.
    — Larry Wall
    http://habrahabr.ru/post/111348/
     
  15. Не переживай, хватит))) Хотя делать самодельный замок на входную дверь своей квартиры - это колхоз))) Поэтому если что я рассматриваю вариант покупки готового варианта электро замка. А ардуино к нему приладить это уже ерунда)
    Ну а вообще замок на дверь это не основная задача.

    Хочу некое подобие сигналки в машину с режимом свободные руки. Подошел к авто, ардуино распознала телефон и релюхой дала плюс на кнопку центрального замка расположенную на водительской двери. Нажал на кнопку - машина открылась. Сел, выжал сцепление, нажал на кнопку запуска двигателя - включилось зажигание и через три секунды запустился двиг.
    Все практически решаемо, и блок запуска, и центральный замок (мозгов на это хватает с лихвой), а вот программы писать извините не каждый умеет!!!
    В дальнейшем хочу GSM модулем дополнить и получать смс о проникновении в авто. И отправлять смс чтобы предпусковой обогреватель включать)))
    и будет мне тогда счастье)))
     
  16. &Anton

    &Anton Нерд

    Так а чтож получается , сел телефон и домой не попал .А не проше делать на rfid или ibutton ?. http://m.instructables.com/id/Easy-Bluetooth-Enabled-Door-Lock-With-Arduino-An/all/ .
    Ну а если хочется на юлютутс вот есть пример
     
  17. давай по порядку:
    1. севший телефон не рассматриваем, у меня лично ни разу не садился в ноль!
    2. я писал уже что дверной замок меня не сильно интересует. хочу доступ к авто без ключей.
    3. ссылка которую ты скинул. я уже делал такое дома, настольную лампу включал с телефона через блютуз. Мне не охото подойдя к машине достовать телефон, включать прогу типа bluetooth terminal и открывать тачку нажатием кнопки на экране. надо чтобы как ключ метка работало - подошел, сел и поехал.
    Вот.
     
  18. geher

    geher Гуру

    Имеем три варианта:
    1. Пишем на телефон программу, которая постоянно сканирует доступные БТ устройства и по MAC адресу, имени и еще каким-то признакам определяет "своего", в качестве которого выступает ардуина с БТ модулем, соединяется с ним по последовательному порту и передает команду открытия.
    Ардуина же просто ждет команду с последовательного порта, к которому подключен БТ модуль (не припомню БТ модулей для ардуины, работающих иначе, чем последовательный порт).
    Данная программа в активном режиме запросто будет высаживать батарею телефона в ноль за считанные часы. А поскольку предполагается, что телефон вытаскивать не хочется, то придется держать эту программу постоянно активной.
    2. Ардуиной тут не обойдешься, придется делать на RPi или чем-то подобном.
    Пишем программу не на телефоне, а на устройстве, которая постоянно сканирует доступные БТ устройства и по MAC адресу, имени и еще каким-то признакам (например, поддерживаемые профили) определяет "своего", в качестве которого выступает телефон.
    3. Берем "продвинутый" БТ модуль, который понимает AT команды. С помощью этих АТ команд с ардуины пинаем модуль на предмет попыток найти и/или соединиться с устройством, имеющим нужное имя/нужный MAC адрес и нужный профиль (не уверен, что это будет что-то кроме RFCOMM или чего-то похожего).
     
  19. исчерпывающий ответ!
    я разочарован (((
    думал получиться на ардуино, зря покупал получается, хотя поигрался немного)
    и все же может кто нибудь помочь написать данную прогу для андроида?????
    и еще один главный момент!!! нужно чтобы когда телефон оказывался вне зоны действия блютуз, ардуино возвращала реле в исходный вариант. а то получается подошел к машине, телефон нашел модуль, отправил команду, ардуино включила реле и все. а как поставить обратно на "охрану"?
     
  20. geher

    geher Гуру

    Почему же сразу зря. Первый и третий варианты как раз на ардуине делаются.
    Правда первый не энергоэффективный, а третий требует особого БТ модуля.

    Можно еще по третьему варианту воспользоваться не БТ, а RFID сканером и RFID меткой, которую прилепить тем или иным образом к телефону. Только пара сканер-метка должна быть достаточно дальнобойной, чтобы в пределах авто и его окрестностей надежно определять ее наличие, или расставлять сканеры по всей машине, чтобы при любом положении водителя метка определялась.

    Выключение по предложенным вариантам можно реализовать так:
    1. Если в течении некоторого времени не поступило команды от телефона - все закрыть.
    2 и 3. Если очередная попытка соединения или поиска не обнаружила телефон - все закрыть.
    Все это чревато запиранием в машине, если просто сел телефон или аккумулятор в авто, что настоятельно требует оставить возможность ручного открывания.