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