Spiediena un temperatūras mērīšanas sistēma, izmantojot ATMEGA328P


Bieži vien ir nepieciešamība izmērīt temperatūru un spiedienu vienlaikus, tāpēc šoreiz autors ir izveidojis vienkāršu elektrisko principiālo shēmu, ar kuras palīdzību, izmantojot temperatūras un spiediena sensorus kopā ar mikrokontrolleri (ATmega328P), ir iespējams izmērīt šos parametrus.


1.1.att. Elektriskā principiālā  shēma temperatūras un spiediena mērīšanai


Shēmas darbības princips ir balstīts uz mikrokontrollera, kurš veic sensoru datu nolasīšanu, izmantojot ACP (analogo-ciparu pārveidotāju), kur tālāk programmas kodā notiek to apstrāde, lai noteiktu temperatūras un spiediena vērtības. 

Apstrādātie dati tiek attēloti, izmantojot 16x2 LCD, kurš darbojas 4 bitu režīmā (tiek izmantoti tikai vecākie biti (D4, D5, D6 un D7)).

Spiediena mērīšanai tiek izmantots MPXA6115A sērijas spiediena sensors, kurš spēj noteikt spiedienu robežās no 15 līdz 115 kPa.

Temperatūras mērīšanai tiek izmantots LM35 sērijas termosensors, kurš spēj noteikt temperatūru robežās no −55  līdz 150 °C.



int main(){
    
   DDRD=0xFF;                                         // LCD 
   DDRB=0x0F;                                         // Takts avots un citām vajadzībām
   DDRC=0x00;                                         // Sensori
   
   _delay_ms(50);                                      // Inicializācijas daļa
   InitLCD(0);
   _delay_ms(50);  
   Init_ADC(); 
   float temperature=0, pressure=0;
   char spiediens[6], temperatura[6];
   
   while(1){                                              // Cikls, kurā tiek nolasīti un apstrādāti sensoru dati 
                                                                // Temperatūras un spiediena aprēķināšana, pārveidošana

  temperature = Read_ADC(0)/2.05;
  pressure = (((Read_ADC(1)*5.0/1024.0)-0.475)/0.045)+21.1;  
  float_to_string(pressure,spiediens,2);
  float_to_string(temperature,temperatura,2);
  
          _delay_ms(500);                           // Datu attēlošana uz LCD
          LCDClear();
          LCDWriteStringXY(3,0,temperatura);
          LCDWriteStringXY(10,0," oC");
          LCDWriteStringXY(3,1,spiediens);
          LCDWriteStringXY(10,1," kPa");
   }
  
 return 0; 
};





UZ SĀKUMU