Obsesi Radio (Sebuah Catatan)

Rupanya sudah 4 tahun yang lalu sejak saya ngoprek radio dengan Sparkfun Si4703 (Evaluation Board). Saat itu evaluation board ini harganya cukup mahal, yakni $19.95 belum termasuk ongkir dari luar. Dan memang Si4703 ini bagus dan handal. Saat di breadboard berjalan dengan baik. Sayangnya saat disolder ke PCB saya salah sambung sehingga board rusak. Hiks… Saat itu kebetulan sedang sibuk coding dan ketambahan kecewa akhirnya ngoprek radio terlupakan.

Radio Kotak Kardus
Radio Kotak Kardus

Empat tahun kemudian, tepatnya beberapa waktu belakangan ini saya teringat kalau saya masih punya 1 spare Evaluation Board Si4703. Iya memang, waktu itu saya belinya 2, hehehe…

Read More »

Iklan

Say It with Light! (Redesign)

Ketika mendesain “Say It with Light!” pertimbangan saya adalah murah, meriah dan mudah. Namun ketika saya mau membuat PCB, saya baru sadar kalau ternyata “Say It with Light!” tidak murah dan mudah.

Tidak murah lantaran ternyata saya tidak menjumpai penjual ATtiny85 di pasaran lokal. MCU ini termasuk murah, tapi ketika tidak ada yang jual, maka kita perlu beli dari luar yang sudah pasti jadi mahal. Apalagi kalau belinya partai kecil, bisa-bisa mahalan di ongkir.

Dengan ATmega8 lebih stabil
Dengan ATmega8 lebih stabil

Selain masalah ketersediaan ATtiny85, saya baru sadar kalau saya menggunakan komponen tambahan yang mungkin menjadi kesulitan tersendiri bagi pemula atau ABG yang baru belajar elektronika, yaitu karena saya menggunakan 2 buah Shift Register. Dua buah Shift Register ini digunakan untuk mengatasi keterbatasan I/O di ATTiny85. Dan saya baru sadar kalau ini bisa jadi penghalang tersendiri. Jadinya rangkaian “Say It with Light!” menjadi tidak mudah lagi.

Kemudian seharian kemarin saya mencari alternatif pengganti ATtiny85 yang sekiranya tersedia di pasaran lokal dengan harga terjangkau. Saya menemukan chip alternatif yang masih satu kerabat dengan ATtiny85, yaitu ATtiny2313. ATtiny2313 ini punya 20 pin dan tesedia 18 I/O yang programmable (dikurangi 1 pin untuk reset jadi 17 I/O).

Bisa jadi alternatif yang bagus karena saya bisa mendesain rangkaian jadi sederhana. Dengannya saya bisa menggunakan 16 I/O untuk pengaturan display dot matrix secara langsung tanpa perlu shift register. Tersisa 1 I/O untuk tombol. Benar-benar pas.

Namun ternyata tidak murah! Sebuah chip ATTiny2313 (soket PDIP) di pasaran lokal berharga Rp 27.500 di harga terendah. Banyak penjual lokal lain menjual di atas itu. Harga segitu hanya untuk MCU bisa jadi kendala sendiri bagi remaja yang masih dijatah uang jajannya.

Saya langsung teringat ATmega8 yang harga di pasaran lokal lebih murah dengan harga termurah yang tersedia di pasaran lokal adalah Rp 20.000 untuk soket PDIP. Sedangkan harga termahal yang saya temukan Rp 25.000. Saya heran, kok ATmega8 lebih murah dari ATtiny2313 ya? Mungkin karena Attiny2313 bisa ngebut sampai 20 MHz? Ah kapan-kapan saja deh komparasinya.

Jadi pilihan saya pun jatuh ke ATmega8. Pilihan ini menjadikan proses desain lebih mudah karena saya telah familiar dengan ATmega8. Tantangan ngoprek chip keluarga ATmega adalah karena kita harus burn bootloader. Bukan hal mutlak sebenarnya, tapi kalau ini dilakukan, pemrograman dengan IDE Arduino menjadi lebih fleksibel.

ATmega8 memiliki 23 programmable I/O yang setelah dikurangi keperluan internal Arduino jadi hanya punya 20 pin bebas. Ini sudah lebih dari cukup. Sirkuit “Say It with Light!” tanpa Shift Register cuma butuh 16 pin I/O.

Dan akhirnya prototype “Say It with Light!” dengan ATmega8 berhasil saya buat. Kali ini benar-benar memenuhi prinsip murah, meriah dan mudah untuk situasi, kondisi dan lokasi di Indonesia.

Tapi di luar itu, saya juga sedikit bangga dengan desain “Say It with Light!” versi ATtiny85 karena saya telah membuktikan bahwa konsep murah, meriah dan mudah sebenarnya bisa dilakukan dengan ATtiny85 jika di pasaran lokal ada. Karena harga ATtiny85 sebenarnya cuma di bawah Rp 10.000. Sedangkan 2 buah shift register cuma Rp. 5.000. POC (proof of concept) berhasil.

Say It with Light!

Bagi para ABG (*ABG tua?*) yang sedang kasmaran sudah selayaknya membangun proyek elektronika yang saya beri nama “Say it with Light!” ini. Karena dengan “Say it with light!” Anda bisa memperlihatkan isi hati Anda kepada pacar. Dijamin si dia bakal bilang “WOW” dan koprol (*gubrak*). Kalau pun tidak, coba disuruh push up atau lari keliling lapangan sepak bola 5×. (Ups… kok jadi ngelantur gini ya?)

Sirkuit di breadboard
Sirkuit di breadboard

Baiklah, kita kembali ke proyek sederhana ini. “Say it with light!” adalah sebuah piranti sederhana yang dapat menampilkan pesan yang berjalan dari kanan ke kiri. Bahasa kerennya scroll text atau running text. Rangkaian ini dibangun dengan pertimbangan murah, meriah dan mudah. Sehingga para ABG kasmaran yang baru belajar elektronika dapat membangunnya sendiri dengan biaya yang tidak mahal.

ATTiny85 sebagai otaknya
ATTiny85 sebagai otaknya

Saya sengaja memilih MCU Atmel ATTiny85 yang mungil dan murah. Walau pun cuma punya kaki 8, MCU ini sangat baik & handal. Saya sudah beberapa kali menggunakannya dalam proyek sederhana (lihat: Digital Temperature with ATtiny85 and LM35 dan Ngepot 85 (Pot Elektronik)).

Kalau saya memilih ATtiny85 karena dalam proyek ini saya cuma butuh penampilan pesan di dot matrix dan sebuah tombol untuk men-switch tampilan. Dan lagi harganya termasuk murah. Cocok kan?

Dua buah shift register 74HC595 untuk mengendalikan display dot matrix
Dua buah shift register 74HC595 untuk mengendalikan display dot matrix

Untuk mengendalikan display dot matrix, saya menggunakan 2 buah shift register 74HC595 yang digunakan untuk scanning column dan pengiriman data row. Dengan 2 buah shift register dirangkai cascade, saya cuma butuh 3 pin ATtiny85 untuk mengendalikan display dot matrix.

Sebuah pin dari ATtiny85 saya gunakan untuk tombol pengganti tampilan sehingga total kebutuhan pin cuma 4. Dari 5 pin yang tersedia di ATtiny85 tersisa 1 pin. Sementara ini saya belum ada ide pemanfaatan 1 sisa pin ini. Mungkin kelak bisa dimanfaatkan untuk suara. Tuh kan, cukup menggunakan ATtiny85 untuk proyek ini.

Show your heart
Show your heart

Catatan pribadi

Oke, proyek dot matrix sudah bertebaran dan semuanya bagus-bagus, bahkan berwarna-warni. Tapi hampir semua proyek dot matrix mahal. Di sinilah keunggulan dari desain “Say it with Light!” ini. Desain ini murah meriah dan mudah dibangun. Cocok untuk pemula elektronika (seperti saya ini). Dan karena ATtiny85 termasuk hemat energi, dia bisa ditenagai baterai sehingga bisa didesain portable.

Karena semua pemilihan komponen dan desainnya ekonomis, tentu ada kelemahannya. Yang paling tampak adalah kecepatan dari ATtiny85 ini yang termasuk lambat. Dengan clock internal, dia cuma memiliki kecepatan 1 MHz. Akibatnya penampilan di display dot matrix nampak flicker. Penggunaan Atmega8 dengan external crystal 16 MHz dapat mengatasi masalah flicker ini. Tapi sayangnya bakal banyak pin yang tidak terpakai.

Namun kelemahan ini justru bisa menjadi kekuatan karena tampilan flicker malah dapat mengundang perhatian si dia. “Wow ada blink-blink.”

Digital Temperature with ATTiny85 & LM35

Baiklah, saya sudah punya display 7-segment mungil, lalu mau dibuat apa? Saya pun memutuskan membuat “digital temperature” sederhana. Kebetulan saya punya spare LM35 sisa ngoprek Ngepot84.

Sebenarnya sederhana, hanya saja kabelnya itu yang bikin tampak ruwet
Sebenarnya sederhana, hanya saja kabelnya itu yang bikin tampak ruwet

Hanya saja saya ingin proyek ini sesederhana mungkin, dalam arti tidak menggunakan Arduino yang relatif lebih mahal. Maklum, saya ingin proyek ini cuma mengukur suhu, tidak lebih. Toh display yang tersedia cuma 7-segment standard nan mungil yang tentu saja tidak bisa menampilkan info yang kompleks.

Ada 4 opsi microcontroller yang tersedia, yaitu: ATTiny85, ATTiny84, ATtiny2313 dan ATtiny4313. Karena pertimbangannya adalah kesederhanaan, maka pilihan jatuh pada ATTiny85 yang cuma punya 8 kaki dengan 5 I/O. Tentu saja 5 pin I/O kurang untuk men-drive 2 digit 7-segment. Syukurlah saya punya stock chip shift register 74HC595 untuk membantu ATTiny85 men-drive display 7-segment.

Cukup menggunakan ATTiny85
Cukup menggunakan ATTiny85

Walau pun sederhana, saya ingin hasil dari proyek ini baik terutama dalam hal display-nya. Oleh karena itu saya mengambil 2 buah shift register 74HC595 untuk ke-2 digit display. Dengan 2 buah IC shift register, saya tidak perlu menggunakan teknik scanning. Kedua shift register ini dirangkai cascading. Walau pun menggunakan 2 buah shift register, pemrogramannya mudah kok. Cukup panggil 2 kali fungsi shiftOut di antara pemicuan pin latch (lihat source code untuk detailnya).

2 digit 7-segment untuk display suhu ruangan
2 digit 7-segment untuk display suhu ruangan

Di bawah ini adalah skema dari Digital Temperature with ATTiny85 ini. Jangan terkecoh dengan ruwetnya kabel. Sebenarnya ini proyek sederhana dengan beberapa komponen saja. Anda bisa merangkaikannya di breadboard dalam waktu kurang dari 30 menit.

Cuma membutuhkan beberapa komponen
Cuma membutuhkan beberapa komponen

(Klik pada gambar untuk memperbesar gambar)

Jika ada waktu luang, rencananya akan saya buatkan PCB-nya supaya sirkuit ini permanen. Juga penggunaan baterai supaya bisa lebih portabel.

Tampilan Temperature Digital versi breadboard
Tampilan Temperature Digital versi breadboard

Read More »

Membuat nge-Pot 85 (Open Hardware, Open Source)

Kalau kemarin membahas pengalaman mendesain & membuat nge-Pot 85 (Pot Elektronik), kini tibalah saatnya saya membagikan detail rangkaiannya. Namun mohon maaf, saya belum merapikan skema-nya dan tidak menyertakannya. Sekedar untuk diketahui, saya memulai desain justru dari layout PCB. Sedangkan layout breadboard dan skema otomatis tergambar di Fritzing. Hanya saja bertumpukan sehingga perlu dirapikan lagi tampilannya.

Layout PCB nge-Pot 85 tampak atas
Layout PCB nge-Pot 85 tampak atas

Di atas adalah tampilan atas dari PCB nge-Pot 85. Jika ingin membuat PCB sendiri, silakan download layout untuk etsa (etch) di sini: PCB copper bottom. Sedangkan di bawah ini daftar komponennya ditampilkan dalam 2 daftar, yaitu dalam format penamaan utk perakitan dan daftar belanjaan. Oh iya, jangan lupa menambahkan socket untuk ATtiny85 dan header female untuk titik-titik pengukuran.

Read More »

nge-Pot 85 (Pot Elektronik)

Setelah sebelumnya intensif bereksperimen dengan ATtiny85, kini tibalah saatnya membuat produk jadinya. Semalaman membuat PCB, menyolder, mengetest dan memperbaiki sehingga jadilah nge-Pot 85 (*ehm, tadinya mau diberi nama e-Pot. Tapi kok dikira nebeng popularitas produknya Apple*). Angka 85 diambil dari nomer seri microcontroller ATTiny85 dari Atmel.

Nge-Pot 85 adalah sebuah alat yang dapat membantu kita dalam menyirami tanaman. Nge-Pot 85 memiliki sensor Soil Moisture yang akan membaca kelembaban tanah. Pada titik bawah tertentu yang mengindikasikan tanah kekeringan dia akan memicu relay yang akan menyalakan pompa. Pada titik atas yang mengindikasikan tanah telah lembab dia akan mematikan pompa.

PCB Nge-Pot 85 sebelum direvisi
PCB Nge-Pot 85 sebelum direvisi

Penentuan titik referensi tanah kekeringan dan lembab menggunakan cara analog seperti yg saya tuliskan di “Membuat Nilai Referensi Analog”. Rupanya menggunakan ATtiny85 relatif lebih stabil pembacaan sensor dan penetapan nilai referensi.

Tampilan ngepot 85 sebelum direvisi
Tampilan ngepot 85 sebelum direvisi

Setelah jadi, tibalah saatnya mengetest Nge-pot 85 dan menentukan ambang batas bawah dan atas untuk menentukan pemicuan relay dan mematikannya. Untuk menentukannya, saya dibantu oleh multimeter digital. Kebetulan saya mendesain nge-Pot 85 untuk memiliki header pengukuran. Berikut urutan pin pengukuran:

Pin 1. Pengukuran tegangan sensor Soil Moisture
Pin 2. Pengukuran ambang batas bawah
Pin 3. Pengukuran ambang batas atas
Pin 4. Ground

Hasil pengukuran sensor Soil Moisture yang tertancap di tanah pot memberikan pembacaan antara 0.5 s/d 0.6 Volt. Kemudian saya mulai menentukan ambang batas bawah dan atas dengan memutar-mutar 2 potensiometer di sebelah kiri chip ATtiny 85. Ternyata sulit sekali menentukan ambang batas dengan potensiometer karena rentang tegangan dari potensio berkisar 0 s/d 5 Volt. Ternyata saya melupakan 1 hal, yaitu bahwa sensor memberikan feedback ke nge-Pot dalam bentuk tegangan 0 s/d 1.1 Volt. Jadi tegangan ambang seharusnya memiliki rentang penentuan segitu. Sebelumnya saya tidak memperhitungkan hal ini.

Penentuan nilai ambang setelah board direvisi jadi lebih mudah
Penentuan nilai ambang setelah board direvisi jadi lebih mudah

Jadi saya pun merevisi board nge-Pot 85 dengan menambahkan 2 resistor yang berfungsi sebagai pembagi tegangan. Hasil berhitung seharusnya menggunakan resistor 39K ohm. Tapi saya tidak punya resistor nilai segitu. Jadi saya pakai saja yang nilainya mendekati, yaitu 22K Ohm. Dengan resistor 22K Ohm bisa merevisi pembacaan tegangan referensi menjadi kurang lebih 1.2 Volt. Cukup mendekati angka 1.1 Volt. Dan penentuan nilai referensi bawah dan atas pun bisa dilakukan dengan mudah.

Tampilan nge-Pot 85 setelah direvisi
Tampilan nge-Pot 85 setelah direvisi

Kebetulan saya pakai sensor Soil Moisture dari DFRobot yang terdokumentasi dengan baik di sini. Dari situ saya mendapatkan angka:

0 ~300 : dry soil
300~700 : humid soil
700~950 : in water

Ini adalah angka pembacaan untuk Arduino. Jika kita ingin menyalakan pompa pada nilai ambang bawah 300, maka kita harus mengkonversinya terlebih dahulu ke tegangan untuk kemudian mengeset potensiometer penentu ambang batas bawah. Caranya dengan menggunakan formula ini:

Vsensor = ADC * (1100mV/1023)

Vsensor = 300 * 1.075 = 322.5mV atau 0.3225 Volt

Angka 1100mV itu tegangan output maksimal dari Soil Moisture Sensor (CMIIW). Kalau di DFRobot dituliskan output-nya 0~4.2V tapi saya menyangsikan hal ini. Karena dari pembacaan sensor tidak pernah menyentuh angka lebih dari 1.1 Volt. Mungkin nanti sore saya akan teliti lebih lanjut tentang tegangan output sensor ini dengan mencelupkannya ke air. Untuk sementara ini saya mengambil nilai umum output sensor yang biasanya di angka 1.1 Volt.

Tampilan nge-Pot 85 disandingkan dengan pot yg dirawatnya
Tampilan nge-Pot 85 disandingkan dengan pot yg dirawatnya

Saya menentukan nilai ambang bawah di tegangan 0.3 Volt sedangkan ambang atas di 0.4 Volt. Untuk mensimulasikan nge-Pot 85, saya menancapkan sensor dan kemudian mencabutnya. Saat mencabut setengah nge-Pot menganggap tanah kekeringan dan kemudian memicu relay. Saya menancapkan sensor kembali perlahan-lahan. Saat tertancap dengan baik, relay dimatikan. Pada saat itu sensor telah membaca nilai sensor di atas ambang atas sehingga relay dimatikan.

Pada program Nge-Pot 85 ini saya tidak menambahkan proteksi pompa seperti yang saya lakukan di Prototype Garduino ala Dewo versi 1. Mungkin nanti akan saya oprek lagi untuk menambahkan proteksi ini.

Untuk cara pembuatan Nge-Pot 85 akan saya tuliskan dalam postingan terpisah.

Programming ATtiny84

Setelah belajar Attiny85 dan membuat programmer versi socket Nano, saya pun melanjutkan pembelajaran ke pemrograman ATtiny84. Chip sample dari Atmel ini adalah versi kaya dari ATtiny85 karena ATtiny84 (dan ATtiny44) memiliki 12 pin I/O. Bandingkan dengan ATtiny85 yang cuma punya 6 pin I/O. Lebih kaya 2 kali lipat sehingga memungkinkan penggunaannya untuk hal yang lebih kompleks.

Programmer ATtiny84 with Arduino Nano
Programmer ATtiny84 with Arduino Nano

Seperti biasa, saya mengandalkan Arduino Nano dan breadboard. Di atas adalah foto programmer sederhana hasil adaptasi ke ATtiny84. Untuk referensi dasar bisa merujuk ke: Program an ATtiny with Arduino (instructable) atau ke Programming an ATtiny w/ Arduino 1.0.1 (high-low tech). Prinsipnya sama, hanya saja saya menggunakan Arduino Nano untuk memprogram ATtiny84.

Test Program ATtiny84
Test Program ATtiny84

Programmer ini dapat berjalan dengan baik dan lancar. Hanya saja ada sedikit catatan dari saya, saat mencoba PWM (pulse width modulator) yang mensimulasikan keluaran analog, pin 5 dan 6 yang bisa digunakan untuk output analog ternyata tidak menghasilkan output yang smooth. Incremental dan decremental tidak smooth ditampilkan di LED. Mungkin karena pin 5 & 6 ini digunakan juga sebagai pin yang digunakan untuk pemrograman (MISO dan MOSI).

Berbeda dengan pin 7 dan 8 yang bisa menghasilkan output PWM yang smooth karena kedua pin ini didedikasikan utk I/O dan tidak nyambi keperluan lain. Mungkin secara visual (via LED) akan nampak sekali bedanya antara yang smooth dengan yang tidak. Tapi mungkin secara elektronika tidak terlalu berpengaruh. Namun untuk keperluan visual atau jika berhubungan dengan piranti lain yang peka, sebaiknya menggunakan pin 7 dan 8.