Показано с 1 по 10 из 184

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Новичок
    Регистрация
    27.04.2009
    Возраст
    40
    Сообщений
    17
    Вес репутации
    189

    По умолчанию Замена ручного управления печкой

    Всем привет. Задумался над переделкой ручного управления печкой на электронный с дальнейшим вкорячиванием туда климата. Действо сие назрело уже давно, поскольку при установке дисплея в Фокус I пришлось переносить все крутилки под руль и стало очень неудобно туда тянуться.Информацию по переделке нашёл здесь - http://forum.2112.ru/showthread.php?t=18165 и на форуме где-то была инфа про леокар. В итоге купил два фокусовских сервопривода и установил их вместо ручного регулятора.Силовая схема для регулятора воздушных потоков и температуры выполнена на L293E с допустимым током 1А, для вентилятора пока не определился, скорее всего будет ШИМ с драйвером IR2121 + IRF1405.
    Уровни положения заслонки откалибровал через ардуино, который выводил значения напрямую в ком-порт.Соответственно при повторе конструкции калибровка должна быть заново.
    Код для ардуино :

    PHP код:
    #define m1_l  5
    #define m1_r  6
    #define m2_l  8
    #define m2_r  9
    #define chip1  4
    #define chip2  7
    int pos[5] = {560630720810910};                   //значения получены с переменных резисторов обратной связи двигателя
    #define tMIN 220                                          //-----
    #define tMAX 560                                          //-----
    int t_center = (tMAX-tMIN)/2+tMIN;
    int pwm[5] = {51102153204255};                
    int data 0;
    #define sensor1 1
    #define sensor2 2
    #define pwm 10
    void rigth (int posit);
    void left (int posit);



    void setup()
    {
      
    Serial.begin(9600);
      
    pinMode(m1_l,OUTPUT);
      
    pinMode(m1_r,OUTPUT);
      
    pinMode(m2_l,OUTPUT);
      
    pinMode(m2_r,OUTPUT);
      
    pinMode(chip1,OUTPUT);
      
    pinMode(chip2,OUTPUT);
      
    pinMode(sensor1,INPUT);
      
    pinMode(sensor2,INPUT);
      
    pinMode(pwm,OUTPUT);
     
     
     
    }


    void loop()
    {
      if (
    Serial.available() > 1)
      {
         switch (
    Serial.read())
        
        {
         case 
    0x01:
         
    flowloop();
         break;
         case 
    0x02:
         
    temploop();
         break;
         case 
    0x03:
         
    pwmloop();
         break;
        }
      }
    }



    void left (int posit)                                                 //левый двигатель цикл
    {
           
    digitalWrite(m1_l,HIGH);                                            
           
    digitalWrite(m1_r,LOW);            
           while (
    analogRead(sensor1)> pos[posit-1])
           {}
           
    digitalWrite(m1_l,LOW);

    }



    void rigth (int posit)                                                //правый двигатель цикл
    {
           
    digitalWrite(m1_r,HIGH);                                           
           
    digitalWrite(m1_l,LOW);                                        
           while (
    analogRead(sensor1)< pos[posit-1])
           {}
           
    digitalWrite(m1_r,LOW);
    }
        
    void flowloop()                                                        //цикл заслонки регулировки направления потоков 
    {
      
    data=Serial.read();                                                 //получаем данные с порта
      
    digitalWrite(chip1,HIGH);                                           //разрешаем управление двигателем 1
      
    {

       if (
    data == 0x01)                                                  //принимаем с ком порта команду на положение заслонки 1 (ноги)
       
    {
          if (
    analogRead(sensor1) > pos[0])                               
          {
           
    left(data);                                                     
          }
       }
      
       if (
    data == 0x02)                                                   //принимаем с ком порта команду на положение заслонки 1 (ноги-салон)                                      
       
    {
          if (
    analogRead(sensor1) > pos[1])                   
         {
           
    left(data);
         }
         else
           {
           
    rigth(data);
           }
        }
      
        if (
    data == 0x03)                                                   //принимаем с ком порта команду на положение заслонки 1 (салон) 
       
    {
          if (
    analogRead(sensor1) > pos[2])                                 
         {
           
    left(data);
         }
         else
           {
           
    rigth(data);
           }
        }
       
        if (
    data == 0x04)                                                     //принимаем с ком порта команду на положение заслонки 1 (салон-лобовое стекло) 
       
    {
          if (
    analogRead(sensor1) < pos[3])
         {
           
    rigth(data);          
         }
         else
           {
           
    left(data);
           }
        }
       
        if (
    data == 0x05)                                                     //принимаем с ком порта команду на положение заслонки 1 (лобовое стекло) 
       
    {
          if (
    analogRead(sensor1) < pos[4])
          {       
           
    rigth(data);
          }
       }
        
    delay(100);                                                           //задержка для АЦП                                                          
      
    }
    }
      
      
    void temploop()                                                           //цикл управления заслонкой регулировки температуры
    {
      
    data=(Serial.read())*4;                                                 //т.к температурой управляем с трекбара (диапазон значений 0-255) приводим данные в диапазон значений с сопротивления обратной связи двигателя
      
    digitalWrite(chip2,HIGH);                                               //разрешаем управление двигателем 2
        
            
    if (analogRead(sensor2)> data)
            {
            
    digitalWrite(m2_l,HIGH);                                            
            
    digitalWrite(m2_r,LOW);            
            while (
    analogRead(sensor2)> data)
            {}
            
    digitalWrite(m2_l,LOW);
            }                                       
            
          if  (
    analogRead(sensor2)< data)
            {
            
    digitalWrite(m2_r,HIGH);                                            
            
    digitalWrite(m2_l,LOW);            
            while (
    analogRead(sensor2)< data)
            {}
            
    digitalWrite(m2_r,LOW);
            }
         
          
    delay(100);
    }  
     
    void pwmloop()                                                             //цикл управления скоростью вентилятора
       
    {
             
    data=Serial.read();
             
    analogWrite(pwmdata);
       } 
    реализовано пока управление заслонкой распределения потоков на 5 положений, управляться будет в итоге с ПК через ком-порт + отдельный пульт(резистивные копки)на случай неисправности компьютера.
    принимаю вопросы, советы и альтернативые решения
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	flow.JPG 
Просмотров:	9952 
Размер:	69.9 Кб 
ID:	7882  
    Последний раз редактировалось interhard; 24.03.2010 в 00:52.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •