Ovdje pročitajte kako se registrirati na forum.

Damba kao notebook cooler

Tvoj projekt je upravo dovršen? Podijeli s nama što si napravio u ovom podforumu! Upute drugima kako napraviti isti projekt su uvijek dobrodošle!
Odgovorite
domagoj#3140
Hobist
Hobist
Postovi: 59
Pridružen/a: ned tra 15, 2018 2:59 pm
Lokacija: Zagreb

Damba kao notebook cooler

Post Postao/la domagoj#3140 » sub srp 14, 2018 9:41 pm

Pozdrav svima!
Ovaj projektić nije ništa spektakularno jedino što u praksi prikazuje nekoliko tema obrađenih u KKM, a imam i praktične koristi jer mi se notebook ne pregrijava. Ovdje sam tih nekoliko tema spojio u jedan zadatak i namjerno odabrao Dambu, a ne Basic2 jer mi je jako simpatična, a za ovaj zadatak ne treba ništa jače. Dakle, ovdje imamo Dambu, senzor temperature DS18B20, mosfet IRF540N i PC ventilator. Moj ventilator je 12V (takav sam imao) premda se napaja iz USBa, ali svejedno i pri manjem naponu odlično odrađuje posao. Zadatak je u biti jednostavan. Kada senzor postigne određenu temperaturu (33°C), upali ventiator preko mosfeta, a kada temperatura padne ispod neke vrijednosti (30°C), ugasi ga. Senzor temperature je postavljen ispod notebooka koji je na stalku i pri tome vrh senzora dodiruje donju plohu notebooka. Poziciju senzora sam odredio po mjestu gdje se notebook najviše grije. To je obično tamo gdje i on ima svoj ventilator. Na slikama se vidi da ventilator stoji pored notebooka i puše na stranu. Na tom mjestu je ispuh iz samog notebooka, a moj ventilator puše od notebooka prema van (nikako ne prema njemu). Naime ventilator unutar notebooka topli zrak izbacuje van a moj ventilator mu pomaže u tome i zato puše od njega. Naravno da sam probao da puše i prema njemu ali tada je sporije hlađenje (očekivano) jer na taj način moj ventilator otežava ispuhivanje toplog zraka iz notebooka prema van. U ovom primjeru se neću osvrtati na to kako radi mosfet ili senzor temperature, jer to već ima u KKM-u. Ovaj primjer je viiše zamišljen kao praktična primjena. Slijedi nekoliko slika:

slika
Shema sklopa

slika
Ventilator i senzor temperature montirani na stalak. Za nosač ventilatora sam koristio običnu spajalicu :D

slika
Kabel s kojeg se sve napaja. Morao sam zalemiti dvije žice jer nisam mogao pronaći tako mali konektor, mislim da je 3mm.

slika
Sklop montiran na malu eksperimentalnu pločicu koju sam kasnije zalijepio na stalak sa zadnje strane.

slika

U trenutku izrade fotografije zaboravio sam povezati + napajanja s ventilatorom pa sam to ručno dodao na sliku:
slika


I to je to, a sada program. Ali prije samog koda, nekoliko napomena. U programu se nalazi linija #define Croduino koja kada se program kreira za Dambu mora biti u komentaru ili izbrisana. Naime, da bi odredio raspon temperatura na koji mi sklop treba reagirati sve sam prvo napravio na Croduinu Basic2 kako bi imao sve blagodati Serial Moniora kojeg u Dambi ne mogu koristiti. Zato se na nekim mjestima u programu nalazi #ifdef Croduino. Kada sam sve provjerio da radi kako treba liniju #define Croduino sam stavio u komentar i napravio compile za Dambu. Nadalje, budući da s Dambom nisam povezivao nikakav display trebalo mi je nešto što će ukazati na grešku senzora temperature. Za to sam iskoristio ugrađenu ledicu na pinu 0, pa tako ako ona konstantno svijetli, znači da je greška senzora. Ako trepće onda je sve ok.
Slijedi program:

Kod: Označite sve

//#define Croduino //za Dambu ovu liniju stavi u komentar

#include <OneWire.h>
#include <DallasTemperature.h>

// ********************* Dallas Temperature Sensor *********************
// Data wire is plugged into port 8 on the Croduino
// Data wire is plugged into port 1 on the Damba
#define ONE_WIRE_BUS 1 

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

// arrays to hold device address
DeviceAddress insideThermometer;
// ********************* Dallas Temperature Sensor *********************

// ********************* Moje varijable *********************
#define Fan_pin 4 //dig. izlaz ventilatora
#define Error_pin 0 //ugrađena ledica kao indikator kreške senzora, HIGH=error
boolean Fan_run=false; //stanje ventilatora, radi/ne radi
boolean sensorError=LOW; //greška na senzoru temperature
float TT; //trenutno izmjerena temparatura
float TT_prev=-1; //prethodno izmjerena temperatura
float TH=33; //gornja granica temperature
float TL=30; //donja granica temperature
float TT_max=0;
float TT_min=100;
unsigned int br_uk=0; //broj ukljucenja ventilatora
unsigned long vrijeme_rada=0; //vrijeme rada ventilatora u sec.
unsigned long vrijeme_stajanja=0; //vrijeme stajanja ventilatora u sec.
// ********************* Moje varijable *********************

void setup() 
{
// Inicijalizacija portova i komponenti
#ifdef Croduino
  Serial.begin(9600);
#endif
  pinMode(Fan_pin,OUTPUT);
  pinMode(Error_pin,OUTPUT);
  digitalWrite(Fan_pin,LOW); //za svaki slučaj ugasi ventilator
  digitalWrite(Error_pin,LOW);

// ********************* Dallas Temperature Sensor *********************
  // locate devices on the bus
  sensors.begin();
#ifdef Croduino
  Serial.print("Locating devices...");
  Serial.print("Found ");
  Serial.print(sensors.getDeviceCount(), DEC);
  Serial.println(" devices.");

  // report parasite power requirements
  Serial.print("Parasite power is: "); 
  if (sensors.isParasitePowerMode()) Serial.println("ON");
  else Serial.println("OFF");
#endif
  //find sensor address
  if (!sensors.getAddress(insideThermometer, 0))
  { //ako ne prepoznaje senzor
    digitalWrite(Error_pin,HIGH);
#ifdef Crouino
    Serial.println("Unable to find address for Device 0"); 
#endif
  exit(0);
  }
  // show the addresses we found on the bus
#ifdef Croduino
  Serial.print("Device 0 Address: ");
  printAddress(insideThermometer);
  Serial.println();
#endif
  // set the resolution to 9 bit (Each Dallas/Maxim device is capable of several different resolutions)
  sensors.setResolution(insideThermometer, 9);
#ifdef Croduino
  Serial.print("Device 0 Resolution: ");
  Serial.print(sensors.getResolution(insideThermometer), DEC); 
  Serial.println();
#endif
// ********************* Dallas Temperature Sensor *********************

} //end setup()


void loop() 
{
  sensors.requestTemperatures(); // Send the command to get temperatures
  TT=sensors.getTempC(insideThermometer);

  if(TT_max<TT) TT_max=TT; //postavi novu max temp.
  if(TT_min>TT) TT_min=TT; //postavi novu min temp.
  if(!sensorError)//ako nema greške na senzoru
  {
    if(TT>=TH)
    {
      if(!Fan_run) br_uk++;
      Fan_run=true; //upali ventilator
    }
    else if(TT<=TL) Fan_run=false; //ugasi ventilator
    if(Fan_run)
    {
      digitalWrite(Fan_pin,HIGH);
      vrijeme_rada+=2;
    }
    else
    {
      digitalWrite(Fan_pin,LOW);
      vrijeme_stajanja+=2;
    }
  } //end if DeviceEnable
  
#ifdef Croduino
    if(TT_prev!=TT) //ispiši samo ako je različita od prethodne
    {
      TT_prev=TT;
      Serial.print(TT); Serial.print("'C  "); Serial.print(br_uk); Serial.print("  "); Serial.print(vrijeme_rada); Serial.print("/"); Serial.print(vrijeme_stajanja); Serial.print("s"); Serial.print("  "); Serial.print(TT_min); Serial.print("/"); Serial.print(TT_max); Serial.println("'C");
    }
#endif
  digitalWrite(Error_pin,HIGH);
  delay(1000); //pauziraj 1000ms
  digitalWrite(Error_pin,LOW);
  delay(1000); //pauziraj 1000ms
} //end loop()

// ********************* Dallas Temperature Sensor *********************
// function to print a device address
#ifdef Croduino
void printAddress(DeviceAddress deviceAddress)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    if (deviceAddress[i] < 16) Serial.print("0");
    Serial.print(deviceAddress[i], HEX);
  }
}

// function to print the temperature for a device
void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  Serial.print("Temp C: ");
  Serial.println(tempC);
}
#endif
// ********************* Dallas Temperature Sensor *********************
Zadnja izmjena: domagoj#3140, dana/u pon srp 16, 2018 11:07 am, ukupno mijenjano 1 put.
Avatar
david.zovko#5077
e-radionica.com team
e-radionica.com team
Postovi: 193
Pridružen/a: ned tra 15, 2018 2:59 pm
Lokacija: Osijek, Croatia
Kontakt:

Re: Damba kao notebook cooler

Post Postao/la david.zovko#5077 » pon srp 16, 2018 9:10 am

Super primjer spajanja nekoliko KKM-ova u jedan mali projektić. Ekipa e-radionice lajka! :clap: :clap:

Sviđa mi se kako si odradio prebacivanje između dviju pločica koristeći define. Ja radim istu stvar, samo što napravim jednu bool varijablu te u kodu radim if(bool). Tvoje rješenje je bolje, jer ako nije definirano, compiler neće uopće uzeti u obzir te će finalni kod biti manji, a i procesor će imati par koraka manje svaku iteraciju, dok će se kod mene stvar provjeravati svaku iteraciju, bez obzira na vrijednost bool-a.

Keep up the good work!
Avatar
dekip#5967
Hobist
Hobist
Postovi: 44
Pridružen/a: pon srp 30, 2018 10:04 pm
Lokacija: Beograd
Kontakt:

Re: Damba kao notebook cooler

Post Postao/la dekip#5967 » pon srp 30, 2018 10:08 pm

Da li je do mene, ali ja ne vidim ni jednu sliku.
domagoj#3140
Hobist
Hobist
Postovi: 59
Pridružen/a: ned tra 15, 2018 2:59 pm
Lokacija: Zagreb

Re: Damba kao notebook cooler

Post Postao/la domagoj#3140 » uto srp 31, 2018 10:04 am

Pozdrav dekip!
Vjerojatno nije. Ja koji sam uploadao slike ih vidim u browseru s kojim radim, a kad odem na drugo računalo ne vidim ih ni ja. Slijedio sam upute za upload slika i kontaktirao ekipu iz e-radionice, ali i dalje nešto ne štima.
Pokušat ću naći nego drugo rješenje pa revidirati post. U međuvremenu mogu poslati slike na mail.
Pozdrav, Domagoj
Avatar
david.zovko#5077
e-radionica.com team
e-radionica.com team
Postovi: 193
Pridružen/a: ned tra 15, 2018 2:59 pm
Lokacija: Osijek, Croatia
Kontakt:

Re: Damba kao notebook cooler

Post Postao/la david.zovko#5077 » pon kol 06, 2018 12:51 pm

Sorry ekipa. :doh: Ispravljeno, dajte provjerite jel sada sve štima.
Odgovorite