"Умная комната" на Arduino

Тема в разделе "Глядите, что я сделал", создана пользователем Злая Птичка, 4 сен 2012.

  1. Проект "Умная комната на Arduino" закрыт.
     
  2. Mihail

    Mihail Надзиратель Администратор

    От себя могу сказать что для открывания двери одной сервы точно не хватит
     
  3. А сколько же серв надо?
     
  4. Tony Stark

    Tony Stark Нерд

    В принципе если сустав подлиннее сделать то все ок будет и одной сербы вполне хватит наверное
     
  5. <Lame>

    <Lame> Гик

    Нужна вот такая серва
     
  6. <Lame>

    <Lame> Гик

    Тогда и без сустава можно
     
    leo141198 нравится это.
  7. Помощнее тоесть?
     
  8. <Lame>

    <Lame> Гик

    Да=))
     
  9. <Lame>

    <Lame> Гик

    Только она, с*к@, дорогая...
     
  10. У меня дверь не тяжелая.
    Ниточку к двери и к серве :D
    И всё окей :D
     
  11. А лучше обычный мотор или серву по:D стоянного вращения...
    Один конец нитки - к сервоприводу, второй - к двери!
    :D:D
     
  12. <Lame>

    <Lame> Гик

  13. <Lame>

    <Lame> Гик

    а я только мотор хотел предложить...
     
  14. <Lame>

    <Lame> Гик

    что касается lcd я вам помогу щас...
     
  15. Никто код не читал? Никто на стоимость внимания не обратил? (4760 р.)
    :D
     
  16. А с LCD уже вы помогли!
     
  17. <Lame>

    <Lame> Гик

    Нет, я с точки зрения программирования
     
  18. <Lame>

    <Lame> Гик

    я тож умный дом делаю, ток стоит он штук эдак 20, помимо ардуино уно там есть ещё МК atMega168 на бредборде, которая подключена к дюжине всяких сенсоров, реле, в том числе там есть и WiFi Bee, она используется как третий МК с функцией WiFi, и связяна с компом, а мк меда168 связан с ардуино по i2c, а ардуина с текстовым экраном 20х4 и подключена к датчикам для ик пульта по всему дому, разный пульт на разную комнату, и кароче у меня там метеостанция, gsm сигнализация, и прочие прелести, вроде авто-дверей, и у меня в комнате управление светом, открытием форточки и т.д. происходит простым нажатием кнопки на пульте от телика, сидя в кресле перед компом, а на компе ещё строятся всякие графики и строится прогноз погоды, а ещё есть робот помошник, на двухколёсной платформе, который ориентируестя по квартире сам, но есть возможность управления с компа, а на роботе только WiFi bee, motor shield и wireless shield, на котором собственно bee и сидит. Фух. Дописал-таки. Ну чо, круто?
     
  19. <Lame>

    <Lame> Гик

    Скоро отправлю модифицированный код, ждите:)
     
  20. <Lame>

    <Lame> Гик

    PHP:

    ///////////////////////////////////////
    //                                                            //
    // Умный Дом на Arduino v.3.0        //
    //                                                          //
    // обновлен 04.09.2012              //
    //                                                //
    // Создан злой птичкой            //
    // Оптимизирован под LCD и  RGB//
    //светодиод by <Lame.Jake>          //
    //Оставляйте свои отзывы:            //
    // khimki-forest.ru/guestbook.php    //
    ////////////////////////////////////
     
     
     
    /////////////////////////////////////
    // Требования:                    //
    // ------------------------------  //
    // Arduino Uno и USB кабель        //
    // Датчик влажности почвы          //
    // Troyka Shield                  //
    // Датчик температуры и влажности  //
    // Сервопривод                    //
    // LCD 16x2                        //
    // Резистор                        //
    // Трехцветный светодиод          //
    // Датчик движения                //
    // Разьём для батарейки Крона      //
    // ------------------------------  //
    // Всё это можно купить            //
    // в магазине Амперка - amperka.ru //
    // ------------------------------- //
    /////////////////////////////////////
     
     
     
     
     
    /////////////////////////////////////
    //  Возможности:                  //
    // -----------------------------  //
    // Открывание двери при подходе    //
    // к ней                          //
    // Отображение влажности почвы    //
    // выбранного вами растения на    //
    // трёхцветном светодиоде          //
    // Вывод текущей температуры и    //
    // влажности на LCD дисплей.      //
    // -----------------------------  //
    //      Планы:                    //
    // 1. пока нету планов            //
    /////////////////////////////////////
     
     
    /////////////////////////////////////
    // Общая стоимость                //
    // с учётом доставки:              //
    // 4 760.00 руб в Амперке          //
    // на 27.08.2012, понедельник      //
    /////////////////////////////////////
     
     
     
     
     
    /////////////////////////////////////
    //  Код скетча:                  //
    /////////////////////////////////////
     
     
     
     
    // #include <LiquidCrystal.h>
     
    // Я включил LCD экран)) <Lame.Jake>
    #include <LiquidCrystal.h>
    #include <Servo.h> // сервопривод
    #include <dht.h> // датчик темп. и влажности
    DHT sensor = DHT();
    Servo myservo;
    int calibrationTime = 30;
    long unsigned int lowIn;    
    long unsigned int pause = 5000;
    char msg1[128];
    char msg2[128];
    int ledr;
    int ledg;
    int ledb;
    int pirPin = 13;
    int sensorValue = 13;
    #define servoPin 9 // пин сервомашинки
    //Восьмой пин не pwm выход!!!! Как вы собираетесь к нему серво-то подключать?! <Lame.Jake>
    #define analogInPin A0 // пин сенсора влажности почвы
    #define dhtPin A2 // пин сенсора температуры и влажности
    #define ledcolor1 3 //Red
    #define ledcolor2 5 //Green
    #define ledcolor3 6 //Blue
    //Синий-залили горшок, зелёный-норм, красный-засуха)
    //Трёхцветный светодиод я сделал с PWM, тоесть с оттенками цветов))
    //#define попроще, чем const int <Lame.Jake>
    boolean lockLow = true;
    boolean takeLowTime;
    boolean doorIsOpened = false;
    int pos;
    LiquidCrystal lcd( 6, 8, 12, 11, 10, 9);
    void setup() {
      pinMode (pirPin, INPUT);
      pinMode (ledcolor1, OUTPUT);
      pinMode (ledcolor2, OUTPUT);
      pinMode (ledcolor3, OUTPUT);
    sensor.attach(A2);
    myservo.attach(9);
    lcd.begin(16, 2);
    lcd.print("SMART HOME v.3.0");
    lcd.setCursor(0, 1);
    lcd.print("by Vadim Andreev");
    delay(2000);
    lcd.setCursor(0, 0);
    lcd.print("by Vadim Andreev");
    lcd.setCursor(0, 1);
    lcd.print("and <Lame.Jake>");
    delay(2000);
    }
    void loop() {
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    //ждем 1 секунду, и каждые 100 миллисекунд проверяем наличие движения для открытия двери (мой способ, всегда им пользовался :)
    sensor.update();
    lcd.clear();
    // time from start это излишество, я его убрал, у вас итак инфы на экране слишком много будет, товарищ Злой Птиц =)  <Lame.Jake>
    lcd.print("Temp: ");
    lcd.print(msg1);
    lcd.setCursor(0, 1);
    lcd.print("Humidity: ");
    lcd.print(msg2);
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    delay(100);
    door();
    //ждем ещё 2 секундs перед показом 2-го сообщения, и каждые 100 миллисекунд проверяем наличие движения для открытия двери
    switch (sensor.getLastError())
    {
    case DHT_ERROR_OK:
    lcd.clear();
    lcd.print("DHT11:");
    lcd.setCursor(0, 1);
    lcd.print("OK.");
    break;
    case DHT_ERROR_START_FAILED_1:
    lcd.clear();
    lcd.print("DHT11:");
    lcd.setCursor(0, 1);
    lcd.print("Error:(stage 1)");
    break;
    case DHT_ERROR_START_FAILED_2:
    lcd.clear();
    lcd.print("DHT11:");
    lcd.setCursor(0, 1);
    lcd.print("Error:(stage 2)");
    break;
    case DHT_ERROR_READ_TIMEOUT:
    lcd.clear();
    lcd.print("DHT11:");
    lcd.setCursor(0, 1);
    lcd.print("Error:timeout");
    break;
    case DHT_ERROR_CHECKSUM_FAILURE:
    lcd.clear();
    lcd.print("DHT11:");
    lcd.setCursor(0, 1);
    lcd.print("Error:checksum");
    break;
    }
    ledr = map(sensorValue, 0, 300, 1, 255);
    ledg = map(sensorValue, 300, 700, 1, 255);
    ledb = map(sensorValue, 650, 950, 1, 255);
    analogWrite(ledcolor1, ledr);
    analogWrite(ledcolor2, ledg);
    analogWrite(ledcolor3, ledb);
    }
    void door() {
    if(digitalRead(pirPin) == HIGH){
    if(lockLow){
    if(doorIsOpened == false)
    {
    lockLow = false;
    for(pos = 0; pos < 180; pos += 1)
    {
    myservo.write(pos);
    delay(15);
    }
    doorIsOpened = true;
    }
    }    
    takeLowTime = true;
    }
    if(digitalRead(pirPin) == LOW){
    if(takeLowTime){
    lowIn = millis();
    takeLowTime = false;
    }
    if(!lockLow && millis() - lowIn > pause){
    if(doorIsOpened == true)
    {
    lockLow = true;
    for(pos = 180; pos>=0; pos-=1)
    {                          
    myservo.write(pos);          
    delay(100);
      }
    doorIsOpened = false;  
    }
    }
    }
    }
     
    Вот оно!
    радуйтесь, покровитель злых птиц и зелёных свиней:D