Operácie

Reglátor chladenia so snímačom teploty: Rozdiel medzi revíziami

Z SensorWiki

 
(37 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 7: Riadok 7:
 
Chcel som to použiť neskôr ako súčasť bakalárky kde by som snímal teplotu na heat sinku MOSFETou v ZVS driveri a chladil ich pri nejakej konkrétnej teplote. A ten driver by slúžil na spínanie rôznych transformátorov ale ako driver indukčného ohrievača.     
 
Chcel som to použiť neskôr ako súčasť bakalárky kde by som snímal teplotu na heat sinku MOSFETou v ZVS driveri a chladil ich pri nejakej konkrétnej teplote. A ten driver by slúžil na spínanie rôznych transformátorov ale ako driver indukčného ohrievača.     
  
[[Obrázok:Arduino-nano-pinout.png|400px|thumb|center|Arduino nano pin out]]
+
[[Obrázok:Zapojenie123.png|400px|thumb|center|Arduino nano zapojenie]] [[Obrázok:ZVS11.jpeg|400px|thumb|center|ZVS driver]]
  
  
  
'''Literatúra:'''
+
__TOC__
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]
+
 
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]
+
== Analýza  a opis riešenia ==
  
 +
Ako prvé čo som potreboval bol vybrať senzor teploty a micro procesor. Vybral som si termistorový senzor teploty s digitálnym a analógovým výstupom. Ešte sa tam nachádza trimer ktorým sa dá nastaviť výstupná hodnota čo bude podstatné neskôr pri ladení. Ako micro procesor som použil arduino nano.     
 +
 +
[[Súbor:SSS.png|400px|thumb|center|Termistorový senzor]]
  
__TOC__
 
  
== Analýza  a opis riešenia ==
+
Tento modul senzora bol napájaný z arduina s 5V na pine (+) ďalej pin označený ako (G) bol privedení na 0V. Tip signálu čo som použil bol analógový signál z pinu označeného AO, ktorý bol ďalej spracovaný procesorom. Ak došlo k prekročení prednastavenej teploty tak sa na jedom z pinov arduina objavila logická 1, pri poklese teploty pod prednastavenú hodnotu sa zmenil stav pinu na logickú 0. Tím sme zabezpečili logickú časť zapojenia, ďalej sme pridali jeden MOSFET konkrétne IRF510 na ktorého gate bola práve privedená log1 / log0 a ten už spínal samotní ventilátor. Nakoniec som ešte pridal 2 keramické kondenzátory (jeden 1mF spolu 2mF) keď že je ten vetráčik induktívna záťaž tak aby tranzistor neodišiel.   
  
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
 
  
[[Súbor:ledRGB.jpg|400px|thumb|center|RGB LED.]]
+
[[Súbor:Schema159.png|400px|thumb|center|Schéma zapojenia snímača teploty.]]
  
Nezabudnite doplniť schému zapojenia!
+
Tu môžeme vidieť zapojenie v zapojení je ešte navyše rezistor na odvedenie náboja z gatu MOSFETu pre jeho vypnutie ak z arduina ide log0. Napájanie bolo realizované z PC bolo napájané arduino a logická časť obvodu a vetráčik bol napájaný z adaptéra 12V, v scheme je však 9V batéria to kôly tomu ,že som nevedel simulátore nájsť iný zdroj.       
  
[[Súbor:schd.png|400px|thumb|center|Schéma zapojenia LCD displeja.]]
 
  
  
 
=== Algoritmus a program ===
 
=== Algoritmus a program ===
  
Algoritmus programu je....
+
Tento kód číta hodnotu zo senzora a následne cez sériovú linku vypíše na PC. Pri ladení som odčítal hodnotu 400 pri 22 stupňoch celozia čiže na 1 stupeň pripadá každým 18 bodom hodnoty zo senzora pri konkrétnom nastavený trimeru na senzory. Ďalej som mal problém že so zvyšujúcou sa teplotou klesala hodnota zo senzoru. To som vyriešil tak že som odčítaval od 400 hodnotu X ktorá bola pri zvýšenej teplote a tento rozdiel som pričítal k 400 a to dalo našu teplotu po podelení číslom 18.        
  
  
 
<tabs>
 
<tabs>
 
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
 
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
 +
 
#include <avr/io.h>
 
#include <avr/io.h>
 +
#include "uart.h"
 +
#include "adcch.h"
 +
#define LED_PIN PD4
 +
  
 +
#include <stdio.h>
 +
FILE mystdout = FDEV_SETUP_STREAM(uart_putc, NULL, _FDEV_SETUP_WRITE);
 +
                             
 
int main(void)
 
int main(void)
 
{
 
{
   unsigned int measuredValue;
+
 +
  DDRD |= (1 << PD6)|(1<<PD5);
 +
  TCNT0=0;
 +
  OCR0A=0;
 +
  TCCR0A|=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00);
 +
  TCCR0B|=(1<<CS02)|(1<<CS00);
 +
 +
 +
 +
  int pr1 = 0;
 +
  int pr2 = 0;
 +
   int vistup = 0;
 +
 
 +
  hw_init();
 +
  adc_init();
 +
  uart_init();
  
   while (1)
+
   stdout = &mystdout;         
  {
 
    /*  relax  */ 
 
  }
 
  
   return(0);
+
    
}
+
while(1)
 +
 +
  pr1 =  adc_read(4);
 +
  pr2 = 400/18;
  
</source></tab>
+
  vistup = pr2 + ((400 - pr1)/18);
<tab name="filename.h"><source lang="c++" style="background: LightYellow;">
+
  printf("%d\r", vistup);
#include <avr/io.h>
+
  /*printf("%d\r", pr1);*/
 +
 
 +
  DDRD |= (1 << LED_PIN);
 +
 +
  if (vistup >= 25)
 +
  {
 +
    PORTD |= (1 << LED_PIN);
 +
  }
 +
  else if ( vistup < 25)
 +
  {
 +
PORTD &= ~(1 << LED_PIN); 
 +
  }
 +
 
  
void adc_init(void);                                   // A/D converter initialization
+
}
 +
return(0);
 +
}
  
unsigned int adc_read(char a_pin);
 
 
</source></tab>
 
</source></tab>
 
</tabs>
 
</tabs>
  
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x ''zdrojaky.zip'':
 
  
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
 
  
 +
Zdrojový kód: [[Médiá:Zdrojové Kody.zip|zdrojaky.zip]]
  
 
=== Overenie ===
 
=== Overenie ===
  
Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia.
+
Na overenie som zapojil toto zapojenie v škole na doske ACROB kde som overil že funguje spínanie vetráčika pri teplote nad 23 stupňov v kóde je síce napísané 25 v podmienke ale to som zmenil aby som nemusel toľko na to dýchať.    
Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.  
 
  
[[Súbor:fotka.jpg|400px|thumb|center|Aplikácia.]]
 
  
 
'''Video:'''
 
'''Video:'''
<center><youtube>_l02MBu41n0</youtube></center>
+
<center><youtube>dnlHli1qv8g</youtube></center>
  
 
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.  
 
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.  
  
 
[[Category:AVR]] [[Category:MIPS]]
 
[[Category:AVR]] [[Category:MIPS]]

Aktuálna revízia z 16:49, 23. máj 2024

Záverečný projekt predmetu MIPS / LS2024 - Martin Bugár


Riadenie spínania pomocou termistorového senzora teploty

Mojím cieľom v tomto zadaní bolo nejaký spôsobom zabezpečiť zopnutie elektrického vetráčika ktorý by pri prednastavenej teplote začal tlačil vzduch na heat sink tranzistorov a tím ich ochladzovať. Chcel som to použiť neskôr ako súčasť bakalárky kde by som snímal teplotu na heat sinku MOSFETou v ZVS driveri a chladil ich pri nejakej konkrétnej teplote. A ten driver by slúžil na spínanie rôznych transformátorov ale ako driver indukčného ohrievača.

Arduino nano zapojenie
ZVS driver


Analýza a opis riešenia

Ako prvé čo som potreboval bol vybrať senzor teploty a micro procesor. Vybral som si termistorový senzor teploty s digitálnym a analógovým výstupom. Ešte sa tam nachádza trimer ktorým sa dá nastaviť výstupná hodnota čo bude podstatné neskôr pri ladení. Ako micro procesor som použil arduino nano.

Termistorový senzor


Tento modul senzora bol napájaný z arduina s 5V na pine (+) ďalej pin označený ako (G) bol privedení na 0V. Tip signálu čo som použil bol analógový signál z pinu označeného AO, ktorý bol ďalej spracovaný procesorom. Ak došlo k prekročení prednastavenej teploty tak sa na jedom z pinov arduina objavila logická 1, pri poklese teploty pod prednastavenú hodnotu sa zmenil stav pinu na logickú 0. Tím sme zabezpečili logickú časť zapojenia, ďalej sme pridali jeden MOSFET konkrétne IRF510 na ktorého gate bola práve privedená log1 / log0 a ten už spínal samotní ventilátor. Nakoniec som ešte pridal 2 keramické kondenzátory (jeden 1mF spolu 2mF) keď že je ten vetráčik induktívna záťaž tak aby tranzistor neodišiel.


Schéma zapojenia snímača teploty.

Tu môžeme vidieť zapojenie v zapojení je ešte navyše rezistor na odvedenie náboja z gatu MOSFETu pre jeho vypnutie ak z arduina ide log0. Napájanie bolo realizované z PC bolo napájané arduino a logická časť obvodu a vetráčik bol napájaný z adaptéra 12V, v scheme je však 9V batéria to kôly tomu ,že som nevedel simulátore nájsť iný zdroj.


Algoritmus a program

Tento kód číta hodnotu zo senzora a následne cez sériovú linku vypíše na PC. Pri ladení som odčítal hodnotu 400 pri 22 stupňoch celozia čiže na 1 stupeň pripadá každým 18 bodom hodnoty zo senzora pri konkrétnom nastavený trimeru na senzory. Ďalej som mal problém že so zvyšujúcou sa teplotou klesala hodnota zo senzoru. To som vyriešil tak že som odčítaval od 400 hodnotu X ktorá bola pri zvýšenej teplote a tento rozdiel som pričítal k 400 a to dalo našu teplotu po podelení číslom 18.


#include <avr/io.h>
#include "uart.h"
#include "adcch.h"
#define LED_PIN PD4 


#include <stdio.h>
FILE mystdout = FDEV_SETUP_STREAM(uart_putc, NULL, _FDEV_SETUP_WRITE);
                              
int main(void)
{
	
  DDRD |= (1 << PD6)|(1<<PD5);
  TCNT0=0;
  OCR0A=0;
  TCCR0A|=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00);
  TCCR0B|=(1<<CS02)|(1<<CS00);
	
	
	
  int pr1 = 0;
  int pr2 = 0;	
  int vistup = 0;

  hw_init();
  adc_init();
  uart_init();

  stdout = &mystdout;           

  
while(1)
{  
   pr1 =  adc_read(4);
   pr2 = 400/18;

   vistup = pr2 + ((400 - pr1)/18);
   printf("%d\r", vistup);
   /*printf("%d\r", pr1);*/
   
   DDRD |= (1 << LED_PIN);
	
   if (vistup >= 25)
   {
    PORTD |= (1 << LED_PIN);
   }
   else if ( vistup < 25)
   {
	PORTD &= ~(1 << LED_PIN);   
   } 
  

}
return(0);
}


Zdrojový kód: zdrojaky.zip

Overenie

Na overenie som zapojil toto zapojenie v škole na doske ACROB kde som overil že funguje spínanie vetráčika pri teplote nad 23 stupňov v kóde je síce napísané 25 v podmienke ale to som zmenil aby som nemusel toľko na to dýchať.


Video:

Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.