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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Модератор
    Регистрация
    06.07.2008
    Возраст
    47
    Сообщений
    414
    Вес репутации
    451

    По умолчанию Re: Arduino и температурный сенсор

    Ардуино - это и есть С, расширенный несколькими библиотеками. Можно еще использовать линейную аппроксимацию, таблица будет короче.
    Вместо напряжения загоняй сразу снятые с АЦП значения. Напряжение питания соответствует 1023. Можешь сделать V=1023 и округлить напряжение, получишь значение АЦП.

  2. #2
    Новичок
    Регистрация
    22.10.2010
    Сообщений
    11
    Вес репутации
    184

    По умолчанию Re: Arduino и температурный сенсор

    Цитата Сообщение от SBorovkov Посмотреть сообщение
    Можно еще использовать линейную аппроксимацию, таблица будет короче.
    Ниасилю такое

    набросал код:
    Код:
    const int in = 0;
    int sensor = 0;
    int i;
    double temp[]={'-25','-24','-23','-22','-21','-20','-19','-18','-17','-16','-15','-14','-13','-12','-11','-10','-9','-8','-7','-6','-5','-4','-3','-2','-1','0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','65','66','67','68','69','70','71','72','73','74','75','76','77','78','79','80','81','82','83','84','85','86','87','88','89','90','91','92','93','94','95','96','97','98','99','100','101','102','103','104','105','106','107','108','109','110','111','112','113','114','115','116','117','118','119','120','121','122','123','124','125'};
    double sopr[]={'133.5','125.672','118.35','111.498','105.084','99.0773','93.4469','88.175','83.2296','78.5909','74.2384','70.1527','66.3162','62.7122','59.3254','56.1416','53.1475','50.3307','47.6799','45.1842','42.8339','40.6197','38.533','36.5656','34.7103','32.96','31.3081','29.7487','28.276','26.8848','25.5702','24.3274','23.1523','22.0407','20.9889','19.9934','19.0509','18.1582','17.3124','16.5109','15.7511','15.0306','14.3472','13.6987','13.0833','12.499','11.9441','11.4169','10.9161','10.44','10','9.55693','9.14743','8.75777','8.3869','8.0338','7.69753','7.37721','7.072','6.7811','6.50378','6.23934','5.98711','5.74646','5.5168','5.29758','5.08828','4.88838','4.69743','4.51498','4.3406','4.17391','4.01452','3.86207','3.71624','3.588','3.44314','3.31529','3.19287','3.07563','2.96331','2.85569','2.75256','2.65369','2.5589','2.46799','2.3808','2.29714','2.21686','2.1398','2.06583','1.9948','1.92658','1.86105','1.79809','1.73758','1.67942','1.62351','1.56975','1.51804','1.473','1.42045','1.37439','1.33007','1.2874','1.24632','1.20675','1.16864','1.13193','1.09655','1.06246','1.0296','0.997924','0.967376','0.937916','0.909498','0.882083','0.85563','0.830101','0.805459','0.78167','0.758701','0.736519','0.715094','0.694397','0.6744','0.655075','0.636398','0.618345','0.60089','0.584013','0.56769','0.551902','0.536629','0.521852','0.507552','0.493712','0.480316','0.467346','0.454788','0.442627','0.430848','0.419438','0.408384','0.397674','0.387294','0.377233','0.367481','0.358026','0.348859','0.339968'};
    
    
    void setup()
     {
       Serial.begin(9600);
     }
    
    void loop() {
    	sensor = analogRead(in);
            Serial.print("Analog = ");
    	Serial.print(sensor);
            Serial.print("Voltage = ");
            double voltage = sensor*5.0/1023;
            Serial.print(voltage);
            double khom = (11.0*(5.0-voltage)/voltage);
            //khom = 20.000-khom;
            Serial.print("khOm = ");
            Serial.print(khom);
            Serial.print(" temp= ");
            for (i=0;i<151;i++) {
              if (i!=151) {
                if (sopr[i]<=khom && khom<sopr[i+1]){
                  Serial.println(temp[i]); }
              }
              else if (i==151){
               if (sopr[i-1]<khom && khom<=sopr[i]) {
                Serial.println (temp[i]);}}
              }
            delay(1000);
            
     }
    Получаю в ответе какую то белиберду:
    Код:
    &#224;TF569F2\F78\F8\F80LF0\F00
    0\F00
    0\F00
    0\F00
    13881\F00
    Последний раз редактировалось Yo-Ya; 24.10.2010 в 21:04.

  3. #3
    Новичок
    Регистрация
    22.10.2010
    Сообщений
    11
    Вес репутации
    184

    По умолчанию Re: Arduino и температурный сенсор

    Посмотрел пример апроксимации из темы
    Получился следующий код:
    Код:
    #define Temp1Count 8
    #include <avr/pgmspace.h> 
    uint16_t Temp1[Temp1Count][2] PROGMEM = 
    {
      {77.95155709,-25,}, //первое число на входе, второе температура
      {80.18392652,-24.5},
      {256.232939,0},
      {536.3809524,25},
      {772.1414862,50},
      {903.0706326,75},
      {964.8461591,100},
      {993.3008629,125}
    };
      
    const int in = 0;
    int sensor = 0;
    int j;
    void setup()
    {
      Serial.begin(9600);
    }
    
    void loop() {
    	sensor = analogRead(in);
            Serial.print("Analog = ");
    	Serial.println(sensor);
            uint16_t InTemp; 
            uint16_t RealTemp; 
            uint16_t InLeftTemp; 
            InTemp= sensor; 
            j=Temp1Count; 
            do 
              { 
                j--; 
                InLeftTemp=pgm_read_word(&Temp1[j][0]); 
              } 
            while ((j>=0)&&(InTemp<InLeftTemp)); 
            uint16_t InRightTemp=pgm_read_word(&Temp1[j+1][0]); 
            uint16_t OutLeftTemp=pgm_read_word(&Temp1[j][1]); 
            uint16_t OutRightTemp=pgm_read_word(&Temp1[j+1][1]); 
            RealTemp=OutLeftTemp+(OutRightTemp-OutLeftTemp)*(InTemp-InLeftTemp)/(InRightTemp-InLeftTemp);
            Serial.println(RealTemp);    
            delay(1000);
     }
    Выводит целые значения температуры (24 28 30).
    Вопрос, можно ли сделать чтобы выводились промежуточные значения? (24,5 28,3 30,8)

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

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

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

Ваши права

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