Portable Cooler Box

by jhnnls in Circuits > Arduino

986 Views, 7 Favorites, 0 Comments

Portable Cooler Box

1383116.jpg

Seperti yang kita tahu bahwa pengaplikasian Arduino sangatlah luas. Dalam project kami, arduino kami aplikasikan untuk mengatur cara kerja portable cooler. Portable cooler ini dapat digunakan di dalam transportasi pribadi ataupun umum. Dengan menggunakan peltier sebagai pendingin, alat kami menjadi compact dan ukurannya dapat disesuaikan dengan tempat yang relatif terbatas.

Peltier dilengkapi dengan sebuah heatsink di sisi bagian panas untuk membuang panas dengan bantuan kipas dan sisi bagian dingin untuk menyebarkan dingin di dalam cooler box. Alat kami juga memiliki tampilan menggunakan LCD 16x2 yang memiliki menu mode untuk pengaturan suhu, menghidupkan dan mematikan alat.

Siapkan Supplies

1381113.jpg
1381114.jpg

Komponen dan barang yang digunakan:

  • kipas 3 pin
  • heatsink
  • peltier 12706
  • cpu mounting
  • sensor suhu ds18b20
  • lcd keypad shield
  • arduino UNO
  • power supply 12v
  • termal paste
  • pcb
  • resistor 680 (2)
  • resistor 4,7k
  • mosfet 3205
  • LED
  • kabel jumper
  • screw terminal block 0,1" pitch, side entry
  • female molex adapter
  • female header pin
  • male header pin
  • kardus
  • sterofoam
  • vynil
  • industrial tape
  • kapasitor 100nf
  • regulator 7805

Menyiapkan Peltier

1381121.jpg
1381122.jpg
  1. Pasang Mounting CPU ke heatsink yang akan di pasang ke sisi peltier yang panas
  2. Pasang kipas pada heatsinknya dengan arah kipas menyembur ke dalam heatsink.
  3. Kemudian pasang peltier bagian panasnya ke heatsink tadi dengan diolesi oleh termal paste terlebih dahulu
  4. Pasang EVA foam sebagai insulator dengan menyesuaikan ukuran heatsink dan peltier.
  5. Pasang heatsink ke bagian peltier yang dingin dengan diolesi termal paste terlebih dahulu.
  6. Lalu jepit heatsink bagian dingin ke mounting CPU dengan strap.

Menyiapkan LCD Keypad Shield

1381120.jpg
  1. Solder female header pin pada keypad shield
  2. Mounting LCD Keypad Shield ke arduino UNO

Siapkan Rangkaian Pada PCB

1381123.jpg
WhatsApp Image 2021-01-04 at 20.29.25.jpeg
  1. Pasang komponen dan di rangkai di breadboard.
  2. Kemudian jika sudah benar rangkaian bisa langsung disolder di pcb.

Rangkaian dapat dilihat di gambar

Assembly Komponen Pada Rangkaian PCB Dan Pemograman

WhatsApp Image 2021-01-04 at 20.29.25.jpeg

1. Pasang peltier dan kipas pada rangkaian di PCB yang sudah disiapkan juga ke arduino

2. Sambungkan sensor suhu ke rangkaian pada PCB juga ke arduino

3. Siapkan program untuk diupload ke arduino UNO

4. Upload program ke arduino UNO

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

#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7);  

//--------LCD-------
int keypad_pin = A0;

byte btn_push = 0;

byte mainMenuPage = 1;
byte mainMenuPageOld = 1;
byte mainMenuTotal = 3;

byte menu2Page = 1;
byte menu2Total = 2;

byte curMenu = 0; // 0: root | 1: Main Menu | 2: Menu1 | 3: Menu2

float tempSensorVal;
float prevTempSensorVal = 0;
int menuTempVal = 20;
float setTempVal = 20;
byte statusCooler = 0;  // 0: Stop | 1: Running
//--------LCD-------

//--------Temperature Sensor-------
#define TempSensor 13
OneWire oneWire(TempSensor); 
DallasTemperature sensors(&oneWire);
//--------Temperature Sensor-------

int peltier = 3;
int fan = 2;
int fanElsa = 11;
float tempThreshold = 0.4;

void setup()
{
  pinMode(fan, OUTPUT);
  pinMode(fanElsa, OUTPUT);
  pinMode(peltier, OUTPUT);
  digitalWrite(fan, LOW);
  digitalWrite(fanElsa, LOW);
  digitalWrite(peltier, LOW);
  Serial.begin(9600);
 
  //--------Temperature Sensor-------
  sensors.begin();
  //--------Temperature Sensor-------
 
  //--------LCD-------
  lcd.begin(16,2);  //Initialize a 2x16 type LCD
  lcd.setCursor(0,0);
  lcd.print("HELLO");
  lcd.setCursor(0,1);
  lcd.print("COOLER ");
  delay(3000);
  showMainDisplay();
  delay(1000);
  //--------LCD-------
}

//void showMainDisplayRunVal(){
//  lcd.setCursor(12, 1);
//  if (statusCooler == 0) {
//    lcd.print("Stop");
//  } else {
//    lcd.print(" Run");
//  }
//}

byte ReadKeypad()
{
  /* Keypad button analog Value
  no button pressed 1023
  select  741
  left    503
  down    326
  up      142
  right   0 
  */
  int keypad_value = analogRead(keypad_pin);
  
  if(keypad_value < 60)
    return 1;  // Right
  else if(keypad_value < 200)
    return 2; // Up
  else if(keypad_value < 400)
    return 3;  // Down
  else if(keypad_value < 600)
    return 4;  // Left
  else if(keypad_value < 800)
    return 5;  // Select
  else 
    return 0;  // None
}

void WaitBtnRelease()
{
    while(analogRead(keypad_pin) < 800){} 
}

void MenuBtn()
{
    WaitBtnRelease();
    
    switch (curMenu){
      case 0: // Root
        if (btn_push == 5) {  // Select
          mainMenuPage = 1;
          MenuUtama();
          curMenu = 1;
        }
        break;
      case 1: // MainMenu
        switch (btn_push) {
          case 1:
            mainMenuPage++;
            if (mainMenuPage > mainMenuTotal)
            mainMenuPage = 1;
            MenuUtamaVal();
            break;
          case 4:
            mainMenuPage--;
            if(mainMenuPage == 0)
              mainMenuPage = mainMenuTotal;
            MenuUtamaVal();
            break;
          case 5:
            if (mainMenuPage == 1) {
              menu2Page = 1;
              Menu2();
              curMenu = 2;
            } else if (mainMenuPage == 2) {
              Menu1();
              curMenu = 3;
            } else {
              showMainDisplay();
              curMenu = 0;
            }
            break;
        }
        break;    
      case 3: // Menu2
        switch (btn_push) {
          case 2:
            if(menuTempVal < 25)
            menuTempVal++;
            Menu1Val();
            break;
          case 3:
            if(menuTempVal > 15)
            menuTempVal--;
            Menu1Val();
            break;
          case 5:
            setTempVal = menuTempVal;
            showMainDisplay();
            curMenu = 0;
            break;
        }
      
        break;
      case 2: // Menu1
        switch (btn_push) {
          case 2:
            menu2Page++;
            if (menu2Page > menu2Total)
              menu2Page = 1;
            Menu2Val();
            break;
          case 3:
            menu2Page--;
            if (menu2Page == 0)
            menu2Page = menu2Total;
            Menu2Val();
            break;
          case 5:
            if (menu2Page == 1)
            statusCooler = !statusCooler;
            showMainDisplay();
            curMenu = 0;
            break;
        }
        break;
    }
}

void loop()
{
    btn_push = ReadKeypad();
//    Serial.print(btn_push);
    MenuBtn();
    TempRead();
    coolerOption();
}

void coolerOption()
{
  switch (statusCooler){
    case 0:
      digitalWrite(peltier, LOW);
      digitalWrite(fanElsa, LOW);
      digitalWrite(fan, LOW);
      break;
    case 1:
      runCooler();
      break;
  }
}

void runCooler()
{   
    digitalWrite(fan, HIGH);
    if(tempSensorVal >= (setTempVal+tempThreshold)){
    digitalWrite(peltier, HIGH);
    digitalWrite(fanElsa, HIGH);
    }
    else if(tempSensorVal <= (setTempVal-tempThreshold)){
    digitalWrite(peltier, LOW);
    digitalWrite(fanElsa, LOW);
    }
}

void TempRead(){
  sensors.requestTemperatures();
  tempSensorVal = sensors.getTempCByIndex(0);
  if (curMenu == 0)
    if (prevTempSensorVal != tempSensorVal)
    {
      prevTempSensorVal != tempSensorVal;
      showMainDisplaySensorTempVal();
    }
}
  
void showMainDisplay() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("COOLER BOX");
  showMainDisplaySensorTempVal();
  lcd.setCursor(12, 1);
  if (statusCooler == 0) {
    lcd.print("Stop");
  } else {
    lcd.print(" Run");
  }
}

void showMainDisplaySensorTempVal(){
  lcd.setCursor(0, 1);
  lcd.print("T: ");
  lcd.print(tempSensorVal);
  lcd.print((char)223);
  lcd.print("C");
}

void MenuUtama() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("SELECT");
  MenuUtamaVal();
}

void MenuUtamaVal() {
  if (mainMenuPage == 1)
    MenuUtama2();
  else if (mainMenuPage == 2)
    MenuUtama1();
  else
    MenuUtama3();
}

void MenuUtama1() {
  lcd.setCursor(0, 1);
  lcd.print("Adjust Temp.");
}

void Menu1Val() {
  lcd.setCursor(0, 1);
  lcd.print(menuTempVal);
  lcd.print((char)223);
  lcd.print("C    ");
}

void Menu1() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Adjust Temp.:");
  Menu1Val();
}

void MenuUtama2() {
  lcd.setCursor(0, 1);
  if (statusCooler == 0)
    lcd.print("Start Cooler");
  else
    lcd.print("Stop Cooler ");
}

void Menu2() {
  lcd.clear();
  lcd.setCursor(0, 0);
  if (statusCooler == 0)
    lcd.print("Start Cooler?");
  else
    lcd.print("Stop Cooler?");
  Menu2Val();
}

void Menu2Val() {
  if (menu2Page == 1)
    Menu2_1Val();
  else
    Menu2_2Val();
}

void Menu2_2Val() {
  lcd.setCursor(0, 1);
  lcd.print("No ");
}

void Menu2_1Val() {
  lcd.setCursor(0, 1);
  lcd.print("Yes");
}

void MenuUtama3() {
  lcd.setCursor(0, 1);
  lcd.print("Return      ");

Bentuk Casing Cooler

1381119.jpg
1383116.jpg
1383117.jpg
  1. Potong sterofoam untuk membentuk cooler dengan 17 x 19 x 21,5 cm
  2. Potong kardus untuk melapisi sterofoam 21 x 21 x 25 cm
  3. Bolongi kardus dan sterofoam untuk heatsink bagian dingin dan untuk sensor suhu.
  4. Susun kardus tetapi sisakan bagian depan dan belakang, lalu masukkan sterofoam ke sisi-sisi di dalam kardusnya
  5. Lem kardus dan sterofoam yang sudah dibolongi
  6. Pasang heatsink dan sensor ke kardus dan sterofoam yang sudah dibolongi
  7. Pasang kardus dan sterofoamnya ke sisi belakang kotak
  8. Lem sterofoam dan kardus satu lagi untuk menjadi tutup cooler box
  9. Buat casing untuk lcd dan juga arduinonya
  10. Pasang vinyl ke sekeliling casing