Portable Cooler Box
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
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
- Pasang Mounting CPU ke heatsink yang akan di pasang ke sisi peltier yang panas
- Pasang kipas pada heatsinknya dengan arah kipas menyembur ke dalam heatsink.
- Kemudian pasang peltier bagian panasnya ke heatsink tadi dengan diolesi oleh termal paste terlebih dahulu
- Pasang EVA foam sebagai insulator dengan menyesuaikan ukuran heatsink dan peltier.
- Pasang heatsink ke bagian peltier yang dingin dengan diolesi termal paste terlebih dahulu.
- Lalu jepit heatsink bagian dingin ke mounting CPU dengan strap.
Menyiapkan LCD Keypad Shield
- Solder female header pin pada keypad shield
- Mounting LCD Keypad Shield ke arduino UNO
Siapkan Rangkaian Pada PCB
- Pasang komponen dan di rangkai di breadboard.
- Kemudian jika sudah benar rangkaian bisa langsung disolder di pcb.
Rangkaian dapat dilihat di gambar
Assembly Komponen Pada Rangkaian PCB Dan Pemograman
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
- Potong sterofoam untuk membentuk cooler dengan 17 x 19 x 21,5 cm
- Potong kardus untuk melapisi sterofoam 21 x 21 x 25 cm
- Bolongi kardus dan sterofoam untuk heatsink bagian dingin dan untuk sensor suhu.
- Susun kardus tetapi sisakan bagian depan dan belakang, lalu masukkan sterofoam ke sisi-sisi di dalam kardusnya
- Lem kardus dan sterofoam yang sudah dibolongi
- Pasang heatsink dan sensor ke kardus dan sterofoam yang sudah dibolongi
- Pasang kardus dan sterofoamnya ke sisi belakang kotak
- Lem sterofoam dan kardus satu lagi untuk menjadi tutup cooler box
- Buat casing untuk lcd dan juga arduinonya
- Pasang vinyl ke sekeliling casing