Помогите с автоматикой на колонку Очень нужно

Помогите с автоматикой на колонку Очень нужно

Сообщение persidski » 25 апр 2016, 15:53

Есть алгорит, который автоматически управляеи колонкой по температуре.
Но он крутит в противоположную сторону от нужной. В алгоритме нужно что -то поменять. Чтоб стало правильно. Думаю надо что-то поменять в конце
После слов " //смотрим на температуру и куда ее крутить". Помогите пожалуйста с вопросом :cry_ing:

Код: Выделить всё
/*
  Автоматизация регулирования температуры колонки

  Сделано распознование включения и выключения колонки
  и зажигаются соответственно светодиоды

  красный-выключена колонка
  зеленый- включена колонка
 
 
 */

//Сервопривод
#include <Servo.h> //используем библиотеку для работы с сервоприводом
#define servoPin 3 //указали адрес подключения сервы
Servo servo; //объявляем переменную servo типа Servo

// Температура
   #include "DHT.h"  //подключаем библиотеку для работы с датчиком температуры
   #define DHTPIN 2     // what pin we're connected to
   #define DHTTYPE DHT11   // DHT 11
   DHT dht(DHTPIN, DHTTYPE); //инициализируем

// задаем константы
   const int buttonPin = 4;  // номер входа, подключенный к кнопке(микрик на колонке)
   int ledVkl = 8;//адрес вывода на светодиод зеленый колонка включена
   int ledVikl = 7;//адрес вывода на светодиод красный колонка выключена

// переменные
   int buttonState = 0;  // переменная для хранения состояния кнопки(микрика на колонке)

//Устанавливаем нужную температуру
   static float needTemp=60;
   float temp;
   static float minAngle=0;  //устанавливаем минимальное положение
   static float maxAngle=180; // устанавливаем максимальное положение
   
void setup()
{
  Serial.begin(9600); //задаем скорость передачи порта
 
  dht.begin();//открываем функцию для работы с температурой
 
  pinMode(buttonPin, INPUT);  // инициализируем цифровой адрес 4, подключенный к кнопке, как вход

  servo.attach(servoPin);//сервопривод

  //При запуске сразу ставим на центр(это минимум на колонке)
      servo.write(90); //ставим положение сервы на середину

}

void loop(){
 
  buttonState = digitalRead(buttonPin); // считываем значения с входа кнопки
 
  // если нажата, то buttonState будет HIGH:
  if (buttonState == HIGH) // проверяем нажата ли кнопка
  {   
   
     // включаем светодиод красны
        pinMode(ledVikl, OUTPUT);
        digitalWrite(ledVikl, HIGH);
        pinMode(ledVkl, INPUT);
        digitalWrite(ledVkl, LOW);

     // выводим информацию , что колонка выключена
        Serial.println("kolonka vikluchina");
        delay(1000); // ждем 1 секунду
        servo.detach(); //отключаем серву от порта
   
  }
  else
     {
         /*
         Все вычисления по автоматизации колонки проводить здесь
         */
         servo.attach(servoPin);//сервопривод включаем пин
         
         // читаем температуру с датчика
            float temp = dht.readTemperature();
       
         // включаем светодиод зеленый   
            pinMode(ledVikl, INPUT); // инициализируем пин, подключенный к светодиоду, как вход
            pinMode(ledVkl, OUTPUT); // инициализируем пин, подключенный к светодиоду, как выход
            digitalWrite(ledVkl, HIGH);
            digitalWrite(ledVikl, LOW);
         
         //выводим информацию , что колонка включена
            Serial.println("kolonka vkluchina");
           
         // выводим температуру
            Serial.print("Temperature: ");
            Serial.print(temp);
            Serial.println("*C");
       
         //ждем пока колонка разогреется
           // delay(2000); //2 секунд
            //Serial.println("Kolonka gotova");
     
        // работаем с сервоприводом

         //смотрим на температуру и куда ее крутить
      if(temp>needTemp)
             {
              decTemp();
             }
      if(temp<needTemp)
             {
              incTemp();
              }
           
       delay(30); // ждем 30 мс
     }
}

void incTemp()
{
  float temp = dht.readTemperature();
  float p=needTemp-temp;
  Serial.print("Increasing TEMP. P=");
  Serial.println(p);
  float pos=servo.read();
  float newpos=pos-p;
  for(float i=pos;i>=newpos;i--)
  {
    if(i>minAngle) servo.write(i);
    if(i<minAngle) servo.write(minAngle);
    delay(50);
  }
  if(p>5)
  {
  delay(p*1000);
  }
  else
  {
    if(p<=3) delay(p*3000);
    else
  delay(p*2000);
  }

}

void decTemp()
{
 float temp = dht.readTemperature();
 float p=temp-needTemp;
  Serial.print("Decreasing TEMP. P=");
  Serial.println(p);
  float pos=servo.read();
  float newpos=pos+p;
  for(float i=pos;i<=newpos;i++)
  {
    if(i<maxAngle) servo.write(i);
    if(i>maxAngle) servo.write(maxAngle);
    delay(50);
  }
  if(p>5)
  {
  delay(p*1000);
  }
  else
  {
     if(p<=3) delay(p*3000);
     else
  delay(p*2000);
  }
 }
persidski
 
Сообщения: 1
Зарегистрирован: 25 апр 2016, 15:49

Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron
© 2009-2019 |  О проекте  |  Политика Конфиденциальности  |