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

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

  1. Круто? Заеб*сь! Тоесть очень круто!
     
  2. У меня подключён серво к 7. А pwm-ШИМ что такое?
     
  3. <Lame>

    <Lame> Гик

  4. Кстати, код вообще ужасный! Только не психовать и не злиться :)
     
  5. <Lame>

    <Lame> Гик

    Ну он хотя бы работает?
     
  6. Ну... Не проверял.
    У меня есть код получше:
    Код (Text):

    #include <LiquidCrystal.h> // LCD экран
    #include <Servo.h> // сервопривод
    #include <dht.h> // датчик темп. и влажности
    DHT sensor = DHT();
    Servo myservo;
    int calibrationTime = 30000;
    long unsigned int lowIn;
    long unsigned int pause = 5000;
    LiquidCrystal lcd( 6, 8, 12, 11, 10, 9);
    //
    // Начало настроек
    //
    int pirPin = 13; // пин для датчика движения
    const int servoPin = 7; // пин сервомашинки
    const int analogInPin = A0; // пин сенсора влажности почвы
    const int dhtPin = A2; // пин сенсора температуры и влажности
    int red = 8; // красный
    int green = 9; // зелёный
    int blue = 10; // голубой
    //
    // Конец настроек
    //
    boolean lockLow = true;
    boolean takeLowTime;
    boolean doorIsOpened = false;
    int sensorValue = 0;
    int pos = 0;
    void setup() {
    lcd.begin(16, 2);
    pinMode(pirPin, INPUT);
    pinMode(analogInPin, INPUT);
    pinMode(red, OUTPUT);
    pinMode(green, OUTPUT);
    pinMode(blue, OUTPUT);
    sensor.attach(dhtPin);
    myservo.attach(servoPin);
    lcd.print("Loading...");
    delay(calibrationTime);
    lcd.clear();
    }
    void loop() {
    sensor.update();
    lcd.clear();
    sensorValue = analogRead(analogInPin);
    if(sensorValue < 300){
    digitalWrite(red, HIGH);
    digitalWrite(green, LOW);
    digitalWrite(blue, LOW);
    }
    if(sensorValue < 700){
    if(sensorValue > 300){
    digitalWrite(red, LOW);
    digitalWrite(green, HIGH);
    digitalWrite(blue, LOW);
    }
    }
    if(sensorValue < 950) {
    if(sensorValue > 700) {
    digitalWrite(red, LOW);
    digitalWrite(green, LOW);
    digitalWrite(blue, HIGH);
    }
    }
    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;
    }
    }
    }
     
    switch (sensor.getLastError())
    {
    case DHT_ERROR_OK:
    char msg[128];
    sprintf(msg, "Temp=%dC, himidity=%d%%",
    sensor.getTemperatureInt(), sensor.getHumidityInt());
    lcd.print(msg);
    break;
    case DHT_ERROR_START_FAILED_1:
    lcd.print("Error 1");
    break;
    case DHT_ERROR_START_FAILED_2:
    lcd.print("Error 2");
    break;
    case DHT_ERROR_READ_TIMEOUT:
    lcd.print("Error:timeout");
    break;
    case DHT_ERROR_CHECKSUM_FAILURE:
    lcd.print("Error:checksum");
    break;
    }
    delay(2000);
    }
    Сравните этот код с вашим!
    Разница - налицо.
    Работает - так же.
     
  7. <Lame>

    <Lame> Гик

    Ну я не умею делать код аккуратно, мне главное, чтоб работало, а красота- н@ср@ть
     
  8. Unixon

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

    Если долго так делать, то через некоторое время сломать код будет легко, а починить невозможно. Лучше уж сразу писать нормально.
     
  9. <Lame>

    <Lame> Гик

    Буду учиться)
     
  10. работало? Где в вашем коде определение влажности почвы, как у меня:
    Код (Text):
    sensorValue = analogRead(analogInPin);
    ?
     
  11. И код у вас нечитаемый...
     
  12. Куча door()`ов...

    Кстати, ср@ч занимает много места в ардуинке. (размер скетча: блаблабла)
     
  13. Проект готов на 99 процентов - не готова серва(не хватило проводов-удлинителей).
    А пока - фотки:
    [​IMG]
    [​IMG]
    [​IMG]
     
  14. А вот и полкода готово:
    Код (Text):
    #include <LiquidCrystal.h>
    #include <dht.h>
    int green = 2;
    int blue = 6;
    int red = 7;
    int sensorValue = 0;
    DHT sensor = DHT();  
    LiquidCrystal lcd(4, 5, 10, 11, 12, 13);
    void setup()
    {
    sensor.attach(A5);
    pinMode(red, OUTPUT);
    pinMode(green, OUTPUT);
    pinMode(blue, OUTPUT);
    digitalWrite(red, LOW);
    digitalWrite(green, LOW);
    digitalWrite(blue, LOW);
    sensor.attach(A5);
    lcd.begin(16, 2);
    lcd.print("    \xA8p\xB8\xB3""e\xBF");
    lcd.setCursor(0, 1);
    lcd.print("  o\xBF A\xBC\xBE""ep\xBA\xB8");
    delay(3000);
    lcd.clear();
    }
    void loop()
    {
    sensor.update();
    lcd.clear();
    sensorValue = analogRead(A4);
    if(sensorValue < 300){
    digitalWrite(red, HIGH);
    digitalWrite(green, LOW);
    digitalWrite(blue, LOW);
    }
    if(sensorValue < 700){
    if(sensorValue > 300){
    digitalWrite(red, LOW);
    digitalWrite(green, HIGH);
    digitalWrite(blue, LOW);
    }
    }
    if(sensorValue < 950) {
    if(sensorValue > 700) {
    digitalWrite(red, LOW);
    digitalWrite(green, LOW);
    digitalWrite(blue, HIGH);
    }
    }
    int temp = sensor.getTemperatureInt();
    int him = sensor.getHumidityInt();
    lcd.print("\xA8p\xB8\xB3""e\xBF""!");
    lcd.setCursor(0,1);
        switch (sensor.getLastError())
        {
            case DHT_ERROR_OK:
    lcd.print(temp);
    lcd.print("C ");
    lcd.print(him);
    lcd.print("% ");
    if(temp < 1)
    {
    lcd.print("3uMA");
    }
    if(temp > 1)
    {
    if(temp < 15)
    {
    lcd.print("XOLODHO");
    }
    }
    if(temp > 15)
    {
    if(temp < 25)
    {
    lcd.print("HOPM");
    }
    }
    if(temp > 25)
    {
    lcd.print("CLISHKOM");
    }
                break;
            case DHT_ERROR_START_FAILED_1:
                Serial.println("Error: start failed (stage 1)");
                break;
            case DHT_ERROR_START_FAILED_2:
                Serial.println("Error: start failed (stage 2)");
                break;
            case DHT_ERROR_READ_TIMEOUT:
                Serial.println("Error: read timeout");
                break;
            case DHT_ERROR_CHECKSUM_FAILURE:
                Serial.println("Error: checksum error");
                break;
        }
    delay(2000);
    }
     
  15. <Lame>

    <Lame> Гик

    а чо вы на английском выводите на дисплей? а на русском не дано?
     
  16. <Lame>

    <Lame> Гик

  17. <Lame>

    <Lame> Гик

  18. Код (Text):
    а чо вы на английском выводите на дисплей? а на русском не дано?
    неа, не дано. :) Пусть так работает.
    Код (Text):
    Arduino LCD Informerhttp://habrahabr.ru/post/138013/
    Во первых , там через комп. А у меня автономно! Без компов!
    Во вторых, там экран больше, а у меня 16x2.
    Код (Text):
    2 DATASHEET http://files.amperka.ru/datasheets/MT-16S2H.pdf
    Даташит я уже over 9000 раз прочитал!