Masih meneruskan tulisan tentang nge-Pot 84 with LCD (Pot Elektronik), kali ini saya akan membahas desain prototype ini. Mohon maaf jika skema-nya tidak saya sertakan, karena saya belum sempat merapikannya. Di bawah ini adalah tampilan desain PCB nge-Pot 84 with LCD.

Sedangkan di bawah ini tampilan bagian bawah untuk etsa (etching). Saya mengexportnya ke format JPG. Jika ada yg membutuhkannya dalam format SVG atau PDF bisa menghubungi saya. Oh iya, untuk mencetaknya harus dengan skala 1:1 alias tidak boleh resize supaya presisi. Jangan lupa menggunakan socket 16 pin untuk chip Attiny84.

Dalam desain ini relay sengaja saya pindah ke sebelah kiri supaya tidak tersentuh tangan saat mengeset nilai-nilai ambang dengan tombol di sebelah kanan. Berikut adalah daftar penggunaan pin ATtiny84.
Pin fisik Attiny84 | Pin I/O Arduino | Fungsi Pin |
---|---|---|
13 | 0 | Soil Moisture sensor |
12 | 1 | Relay utk pompa air |
11, 10, 9, 8 | 2, 3, 4, 5 | LCD – Data |
7 | 6 | Tombol Minus |
6 | 7 | Tombol Plus & Sensor Suhu |
5 | 8 | Tombol Mode |
3 | 9 | LCD – Enable |
2 | 10 | LCD – RS |
Di bawah ini adalah Bill of Materials dalam 2 format, yaitu Assembly List yang berguna saat perakitan dan daftar komponen yang berguna saat belanja komponen.
Assembly List
Label | Part Type | Properties |
---|---|---|
7805 | Voltage Regulator – 5V | package TO220 [THT]; voltage 5V |
AC | Screw terminal – 2 pins | package THT; hole size 1.0mm,0.508mm; pins 2; pin spacing 0.137in (3.5mm) |
ATTiny84 | DIP – 14 pins | package DIP (Dual Inline) [THT]; hole size 1.0mm,0.508mm; true; chip label IC; pins 14; pin spacing 300mil |
C1 | Electrolytic Capacitor | package 100 mil [THT, electrolytic]; capacitance 10µF; voltage 6.3V |
C2 | Tantalum Capacitor | package 100 mil [THT, tantalum]; capacitance 1 μF; voltage 6.3V |
C3 | Electrolytic Capacitor | package 100 mil [THT, electrolytic]; capacitance 10µF; voltage 6.3V |
D1 | Rectifier Diode | package 300 mil [THT]; type Rectifier; part # 1N4001 |
DC | Power plug | |
Kecerahan | Trimmer Potentiometer | package THT; size Trimmer – 6mm; track Linear; type Trimmer Potentiometer; maximum resistance 10kΩ |
Kecerahan1 | Trimmer Potentiometer | package THT; size Trimmer – 6mm; track Linear; type Trimmer Potentiometer; maximum resistance 10kΩ |
LCD1 | LCD screen | type Character; pins 16 |
LED2 | Green LED – 5mm | package 5 mm [THT]; leg yes; color Green (570nm) |
LED3 | Red LED – 5mm | package 5 mm [THT]; leg yes; color Red (633nm) |
Min | Pushbutton | package [THT] |
MODE | Pushbutton | package [THT] |
NPN | NPN-Transistor | package TO92 [THT]; type NPN |
Plus | Pushbutton | package [THT] |
R1 | 10k Ω Resistor | package THT; tolerance ±5%; bands 4; resistance 10kΩ; pin spacing 400 mil |
R2 | 10k Ω Resistor | package THT; tolerance ±5%; bands 4; resistance 10kΩ; pin spacing 400 mil |
R3 | 10k Ω Resistor | package THT; tolerance ±5%; bands 4; resistance 10kΩ; pin spacing 400 mil |
R4 | 10k Ω Resistor | package THT; tolerance ±5%; bands 4; resistance 10kΩ; pin spacing 400 mil |
R5 | 1k Ω Resistor | package THT; tolerance ±5%; bands 4; resistance 1kΩ; pin spacing 400 mil |
R7 | 220 Ω Resistor | package THT; tolerance ±5%; bands 4; resistance 220Ω; pin spacing 400 mil |
R8 | 220 Ω Resistor | package THT; tolerance ±5%; bands 4; resistance 220Ω; pin spacing 400 mil |
Relay | Relay T73 | voltage 5V |
SOIL | Generic female header – 3 pins | package THT; hole size 1.0mm,0.508mm; row single; form ♀ (female); pins 3; pin spacing 0.1in (2.54mm) |
T1 | LM35 Temperature Sensor | package TO92 [THT]; type LM35 |
Shopping List
Amount | Part Type | Properties |
---|---|---|
1 | Power plug | |
2 | Electrolytic Capacitor | package 100 mil [THT, electrolytic]; capacitance 10µF; voltage 6.3V |
1 | Tantalum Capacitor | package 100 mil [THT, tantalum]; capacitance 1 μF; voltage 6.3V |
1 | Rectifier Diode | package 300 mil [THT]; type Rectifier; part # 1N4001 |
1 | Green LED – 5mm | package 5 mm [THT]; leg yes; color Green (570nm) |
1 | Red LED – 5mm | package 5 mm [THT]; leg yes; color Red (633nm) |
1 | DIP – 14 pins | package DIP (Dual Inline) [THT]; hole size 1.0mm,0.508mm; true; chip label IC; pins 14; pin spacing 300mil |
1 | Screw terminal – 2 pins | package THT; hole size 1.0mm,0.508mm; pins 2; pin spacing 0.137in (3.5mm) |
1 | Generic female header – 3 pins | package THT; hole size 1.0mm,0.508mm; row single; form ♀ (female); pins 3; pin spacing 0.1in (2.54mm) |
2 | Trimmer Potentiometer | package THT; size Trimmer – 6mm; track Linear; type Trimmer Potentiometer; maximum resistance 10kΩ |
4 | 10k Ω Resistor | package THT; tolerance ±5%; bands 4; resistance 10kΩ; pin spacing 400 mil |
1 | 1k Ω Resistor | package THT; tolerance ±5%; bands 4; resistance 1kΩ; pin spacing 400 mil |
2 | 220 Ω Resistor | package THT; tolerance ±5%; bands 4; resistance 220Ω; pin spacing 400 mil |
1 | Voltage Regulator – 5V | package TO220 [THT]; voltage 5V |
1 | LM35 Temperature Sensor | package TO92 [THT]; type LM35 |
1 | NPN-Transistor | package TO92 [THT]; type NPN |
3 | Pushbutton | package [THT] |
1 | LCD screen | type Character; pins 16 |
1 | Relay T73 | voltage 5V |
Sedangkan di bawah ini adalah source code yang saya pakai. Anda bisa turut mengembangkan hardware & software nge-Pot 84 ini.
/* Soil Moisture Sensor with LCD Dewo, 27/09/2012 */ #include <LiquidCrystal.h> //LiquidCrystal lcd(10, 9, 5, 4, 3, 2); LiquidCrystal lcd(10, 9, 2, 3, 4, 5); #include <EEPROM.h> #define soil_pin 0 // pin sensor soil moisture #define temp_pin 7 // pin sensor humidity & temp DHT11 #define tombol_pin 8 // pin tombol mode #define up_pin 7 // tombol + #define down_pin 6 // tombol - #define jeda_sensor 1000 // jeda pembacaan sensor #define jeda_tombol 150 // jeda penekanan tombol #define relay1_pin 1 // relay 1 //#define relay2_pin 6 // relay 2 int mode = 0; unsigned long prev_millis = 0; unsigned long prev_sensor = 0; int batas_bawah; int batas_atas; int relay1_state = LOW; byte derajat[8] = { 0b00100, 0b01010, 0b00100, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000 }; void setup() { // initial threshold //write_batas(0, 300); //write_batas(4, 500); // create custom char lcd.createChar(0, derajat); for (int i=2; i<=5; i++) pinMode(i, OUTPUT); pinMode(8, INPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(relay1_pin, OUTPUT); digitalWrite(relay1_pin, LOW); // Baca EEPROM batas_bawah = read_batas(0); batas_atas = read_batas(4); // Init LCD lcd.begin(16, 2); lcd.print("Ngepot Attiny 84"); lcd.setCursor(0, 1); lcd.print(" by Dewo"); delay(5000); // tampilkan sensor2 lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 0); lcd.print("Soil Temp Pump"); lcd.setCursor(0, 1); lcd.print(" "); } void loop() { read_button(); read_sensors(); if (mode == 0) { // } else if (mode == 1) { read_button2(); } else { read_button2(); } } void read_sensors() { if (millis() - prev_sensor > jeda_sensor) { // mengindera soil moisture read_soil(); // mengindera DHT read_temp(); delay(10); prev_sensor = millis(); } } void read_soil() { int soil_val = analogRead(soil_pin); if (mode == 0) { // hapus baris lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(soil_val); } //lcd.setCursor(0, 0); if (soil_val <= batas_bawah) { lcd.blink(); // jalankan pompa if (relay1_state == LOW) { relay1_state = HIGH; digitalWrite(relay1_pin, relay1_state); if (mode == 0) { lcd.setCursor(12, 1); lcd.print(" "); lcd.setCursor(12, 1); lcd.print("ON"); } } } else if (soil_val >= batas_atas) { lcd.noBlink(); // matikan pompa if (relay1_state == HIGH) { relay1_state = LOW; digitalWrite(relay1_pin, relay1_state); if (mode == 1) { lcd.setCursor(12, 1); lcd.print(" "); lcd.setCursor(12, 1); lcd.print("x"); } } } } void read_temp() { if (mode == 0) { long samples = 0; int temp_val; for (int i = 0; i <5; i++) { temp_val = analogRead(temp_pin); //long c = ((100 * 1.1 * temp_val) / 1024) * 10; samples += 5.0 * temp_val * 100.0 / 1024.0; delay(1); } samples /= 5; lcd.setCursor(6, 1); lcd.print(" "); // tuliskan nilai sensing lcd.setCursor(6, 1); lcd.print(samples); lcd.write((byte)0); lcd.write("C"); } } void refresh_batas(int v) { lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(v); delay(50); } void read_button2() { int btn_up = digitalRead(up_pin); if (btn_up == HIGH && millis() - prev_millis > jeda_tombol) { if (mode == 1) { batas_bawah++; if (batas_bawah > 1020) batas_bawah = 1020; refresh_batas(batas_bawah); } else if (mode == 2) { batas_atas++; if (batas_atas > 1020) batas_atas = 1020; refresh_batas(batas_atas); } prev_millis = millis(); } int btn_down = digitalRead(down_pin); if (btn_down == HIGH && millis() - prev_millis > jeda_tombol) { if (mode == 1) { batas_bawah--; if (batas_bawah <= 0) batas_bawah = 0; refresh_batas(batas_bawah); } else if (mode == 2) { batas_atas--; if (batas_atas <= 0) batas_atas = 0; refresh_batas(batas_atas); } prev_millis = millis(); } } void read_button() { int btn = digitalRead(tombol_pin); unsigned long mi = millis(); if (btn == HIGH && mi - prev_millis > jeda_tombol) { // Action sebelum ganti mode if (mode == 1) { int prev_bawah = read_batas(0); if (prev_bawah != batas_bawah) { write_batas(0, batas_bawah); lcd.setCursor(0, 1); lcd.print(batas_bawah); lcd.print(" -> B"); delay(1000); } } else if (mode == 2) { int prev_atas = read_batas(4); if (prev_atas != batas_atas) { write_batas(4, batas_atas); lcd.setCursor(0, 1); lcd.print(batas_atas); lcd.print(" -> A"); delay(1000); } if (batas_bawah > batas_atas) { lcd.clear(); lcd.print("ERROR NilaiBatas"); lcd.setCursor(0, 1); lcd.print("Bawah > Atas ???"); delay(2000); } } // Ganti mode mode++; if (mode >= 3) mode = 0; // Action setelah ganti mode lcd.clear(); if (mode == 0) { lcd.setCursor(0, 0); lcd.print("Soil Temp Pump"); lcd.noBlink(); delay(1); } else if (mode == 1) { lcd.setCursor(0, 0); lcd.print("Batas BAWAH Soil"); lcd.setCursor(0, 1); batas_bawah = read_batas(0); refresh_batas(batas_bawah); } else { lcd.setCursor(0, 0); lcd.print("Batas ATAS Soil "); lcd.setCursor(0, 1); batas_atas = read_batas(4); refresh_batas(batas_atas); } prev_millis = millis(); } } int read_batas(int a) { int hsl = 0; for (int i = a; i < a+4; i++) { hsl += EEPROM.read(i); } return hsl; } int tuliskan(int nilai, int i) { if (nilai < 255) { if (nilai > 0) { EEPROM.write(i, nilai); return 0; } else { EEPROM.write(i, 0); return 0; } } else { EEPROM.write(i, 255); return nilai - 255; } } void write_batas(int mulai, int b) { int sisa = b; for (int i = mulai; i < mulai+4; i++) { sisa = tuliskan(sisa, i); } }
Semoga proyek ini dapat bermanfaat bagi banyak orang. Sampai jumpa lagi di ngoprek selanjutnya. Salam…
Peringatan:
- Seperti biasa, desain & prototype ini mengikuti azas Open Source Hardware. Anda bisa meneruskan lisensi ini untuk membuat & mengembangkannya.
- Rangkaian ini menggunakan relay yang bisa digunakan untuk mengontrol piranti lain dengan tegangan tinggi (s/d 240 Volt). Berhati-hatilah saat bekerja dengan tegangan tinggi karena dapat mencederai Anda atau orang lain, bahkan bisa menyebabkan kematian. Jangan hubungkan dengan tegangan tinggi jika Anda tidak yakin atas apa yang Anda lakukan.
gan, minta skemanya dong…..
Saya rapikan dulu skemanya ya, gan.
Gan en roses 😛