Touchscreen Radio & Clock with Arduino Uno (Source Code)

Saatnya mendokumentasikan Touchscreen Radio & Clock. Mengenai komponen, saya menggunakan semua komponen stock lama, sisa proyek sebelumnya. Dulu kalau beli memang selalu sekalian beli beberapa untuk cadangan.

Read More »

Iklan

Kehabisan Memori Arduino Uno

Jadi ceritanya saya mau meneruskan ngoprek TouchRadio seperti yang sudah saya tuliskan sebelumnya di “Mendesain User Interface Radio FM Touchscreen.” Dan ternyata saya kehabisan memory utk program. Saya baru sadar kalau Arduino Uno memiliki memory untuk kode yang sangat kecil, cuma 32 Kb. Ups… saya jadi teringat pernah mengalami coding untuk ATMega8 dan ATTiny85/84 yang juga punya memory sangat kecil. Dan berakhir mentok juga. Memory yang kecil memang sangat membatasi kreativitas, hehehe…

Solusi paling keren ya pakai Arduino Mega yang punya memory 256 Kb. Tapi konsekuensinya ya jadi membesar board-nya. Atau menggunakan Wemos D1 Mini yang punya 4 Mb dan punya clock jauh lebih cepat. Tapi Wemos D1 Mini kekurangan pin untuk display TFT 2.8″ Touchscreen. Kecuali jika menggunakan OLED I2C yang hemat pin. Dan sebenarnya saya punya stock-nya. Tapi berarti tidak touchscreen, hiks…

Sejatinya saya memang suka pakai Wemos D1 Mini yang lebih banyak memory, lebih cepat, dan sudah punya modul WiFi. Lebih bisa dikembangkan lebih jauh, seperti pengendalian dari network, dll. Dan tentu saja karena ukurannya sangat kecil dan lebih hemat energi. Tapi ya itu tadi, kekurangan pin untuk menggunakan display TFT Touchscreen.

Di lain pihak, saya memang mengakui kalau saya tidak menyadari sejak awal coding kalau Uno ini terbatas memory-nya. Jadi saya codingnya ngasal. Maksudnya ngasal ini adalah karena saya menggunakan banyak variabel dan konstanta. Dan saya banyak menggunakan perhitungan saat menggambar sesuatu. Ambil contoh:

#define MAX_HEIGHT 240
#define MAX_WIDTH 320
#define RADIUS 20

void tombol_on(boolean pressed) {
  tft.drawCircle(MAX_WIDTH/2, MAX_HEIGHT/2, RADIUS, BLACK);
}

Mestinya kan tidak perlu dijadikan konstanta max_height, max_width, radius, offset, dan lain-lain. Dan saat menggambarkan tidak perlu melakukan operasi matematis seperti max_width/2, dll. Karena angka-angka ini sudah diketahui, absolute, atau tidak relatif. Mungkin relatif itu diperlukan jika ada animasi atau pergerakan. Tapi ini kan tidak. Jadi saya rada boros dalam coding. Gubrak…

Seharusnya bisa lebih praktis lagi. Harus dioptimasi code-nya. Tapi saya sudah terlanjur menulis panjang lebar dan malas meng-optimasinya. Hahaha…

Ah besok lagi saja optimasinya. Toh versi minimalnya sudah berhasil jalan dengan baik, hehehe…

Mendesain User Interface Radio FM Touchscreen

{Posting ini adalah lanjutan dari “TouchRadio Berhasil!”, “TouchRadio Gagal?”, “Ngoprek TouchRadio Yuk?”}

Masih ingat proyek TouchRadio tempo hari kan? Tulisan ini adalah lanjutan dari tulisan-tulisan tersebut. Kali ini fokusnya adalah di user interface. Karena saya menggunakan LCD TFT 2.8″ Touchscreen, maka saya bisa mendesain tampilan (user interface) yang lebih atraktif. Dan lagi tidak perlu menambahkan tombol-tombol fisik karena kita bisa menggunakan fitur touchscreen-nya.

Saya pun dengan leluasa bisa merombak tampilannya. Kalau tadinya sederhana saja, serba kotak, maka kali ini saya buat lebih menarik dan sebebas-bebasnya. Namun menjadi sedikit kepenuhan karena kemudian saya menambahkan modul RTC DS3231 sehingga saya bisa menampilkan tanggal dan jam. Dan tentu saja harus ada fitur untuk mencocokkan tanggal dan jam.

Namun saat ini saya sudah merasa cukup puas dengan desain user interface-nya.

Selanjutnya yang bisa dikerjakan adalah:

  1. Memindahkan semua komponen ke PCB. Sepertinya cukup pakai perfboard saja. Rasanya males bikin PCB custom, kan cuma dibikin 1 unit saja, kecuali kalau mau diproduksi masal, hehehe… Sedangkan kalau pakai breadboard tidak handal, rawan terganggu koneksinya kalau dipindah-pindah.
  2. Menambahkan fitur alarm. Saat ini sedang googling bagaimana memanfaatkan fitur Alarm1 dan Alarm2 di DS3231. Bakal seru kalau pagi-pagi dibangunin lagu-lagu dari radio.
  3. Mengubah tampilan Off menjadi lebih elegan. Rencananya sih semua tampilan radio dan jam hilang. Cuma tersisa tampilan Tanggal dan Jam yang besar memenuhi layar, tentu saja plus tombol besar untuk On.
  4. Pengen bisa menambahkan relay untuk mematikan modul PAM8403 dan Si4703 saat Off. Jadi lebih hemat daya sekaligus bisa lebih hening. Mungkin ini jadi sedikit lebih ribet secara pin Arduino Uno sudah terpakai semua. Oh iya, masih tersisa D1. Sedangkan D0 sudah terpakai untuk reset-nya Si4703. Sepertinya masih bisa menambahkan relay. Cuma mungkin relay-nya yang elektronik saja ya? Kalau yang mekanik mungkin jadi boros tempat.
  5. Mendesain box radio. Ini yang rada sulit secara keterbatasan peralatan dan material untuk membuat box/case yang keren. Tempo hari sempat membuat box dengan kotak generik tapi hasilnya kurang rapi. Mungkin untuk demo bisa menggunakan kardus ya? (Baca: Simple CardBoard Radio). Idealnya sih bikin box pakai printer 3D ya? Ahhh indahnya kalau punya printer 3D.

Ah pengen segera weekend untuk bisa ngoprek lagi. Tunggu update selanjutnya yaaa… Sampai jumpa.

NB: Kalau ada pertanyaan atau masukan silakan dituliskan di bagian komentar di bawah. Saya akan jawab jika sempat (dan niat).

TouchRadio Berhasil!

{ Ini adalah sambungan dari tulisan “TouchRadio Gagal?” dan “Ngoprek TouchRadio Yuk?” }

Dua hari ini saya ngoprek TouchRadio yang hampir gagal itu. Saya tidak boleh menyerah. Mosok begitu saja menyerah? Justru kesulitan ini menjadi tantangan bagi saya. Hehehe…

Saya pun mencoba berbagai alternatif, mulai dari mengganti komponen hingga library coding. Bahkan hampir beralih menggunakan Raspberry Pi dengan display LCD 16×2. Tapi kalau cuma menggunakan LCD 16×2 maka tujuan saya gagal karena tidak touchscreen. Dan lagi kalau menggunakan Raspberry Pi biayanya jadi terlalu mahal dan kesannya overkill, seperti membunuh nyamuk dengan bom.

Jadi pagi ini pun saya kembali ke tujuan semula, yaitu menggunakan Arduino Uno dan TFT Touchscreen. Hanya saja kali ini saya mengganti modul radio dengan Si4703. Saya merasa ada yang salah dengan modul TEA5767 karena saya mencoba 3 modul TEA5767 hasilnya tidak akur dengan TFT. Lagian penerimaannya tidak sensitif. Jadi saya mengganti dengan Si4703.

Dan ternyata feeling saya benar. Si4703 bisa bekerja sama dengan TFT Touchscreen dengan baik setelah dilakukan sedikit tweaking, yaitu dengan mengganti pin reset TFT ke pin Reset Arduino dan pin reset Si4703 ke D0 Arduino. Semua berjalan dengan sempurna. Jadi saya bisa fokus mengerjakan software-nya.

TouchRadio #ArduinoUNO #Arduino #Si4703 #TFT #TouchScreen

A post shared by Emanuel Setio Dewo (@setiodewo) on

Saya menggunakan library Si4703 standard yang tersedia di program Arduino. Memperbaiki sedikit ketidaksesuaian dan mengganti pin reset ke D0 (aslinya di D2, tapi pin D2 dipakai oleh TFT).

Saat ini saya sudah cukup senang dengan hasilnya. Coba lihat video di instagram di atas ya. Nampaknya cukup handal. Masih ada 1 PR, yaitu menyambungkan ke modul RTC. Ah besok lagi deh. Sekarang sudah kelaparan. Rupanya belum makan dari tadi. Dan untuk merayakan keberhasilan ini, saya pun memesan pizza, hahaha…

TouchRadio Gagal?

{ Ini adalah sambungan dari tulisan sebelumnya: Ngoprek TouchRadio Yuk? }

Kemarin malam saya mencoba menyatukan beberapa komponen untuk merealisasikan TouchRadio, yaitu modul radio FM Tea5767 dan Amplifier PAM8403. Sayangnya berantakan karena saya salah menyambung kabel power yang berakibat rusaknya PAM8403, hahaha… Modul ini rupanya sensitif terhadap besar tegangan. Harus 5V.

Sedangkan Modul TEA5767 rusak karena kelamaan nyolder. Mungkin koneksi ke board inti TEA5767 lumer. Untungnya saya masih memiliki beberapa stok TEA5767 dan PAM8403 jadi proyek ini masih jalan.

Masalah timbul ketika menyambungkan TEA5767 yang membutuhkan pin A4 dan A5 untuk koneksi I2C (inter-integrated circuit, two wire interface). Sedangkan shield TFT 2.8″ juga membutuhkan A4 untuk reset. Jadi ketika library untuk ke-2 modul ini diaktifkan layarnya jadi putih semua. Saya coba menjalankan reset untuk TFT setelah setiap perintah ke TEA5767. Tapi jadi tidak nyaman. Setiap kali mengeset radio harus mengalami layar putih dulu baru kemudian muncul lagi tampilan di display TFT. Tentu bukan UX (user experience) yang menyenangkan.

Malam ini mendadak saya teringat kalau Arduino Leonardo memiliki pin tambahan SDA-SCL. Jadi saya pun mengganti board UNO ke Leonardo. Saya menyolder pin modul radio ke board Leonardo & meng-upload sketch TouchRadio. Ternyata gagal juga, teman-teman… #Gubrak.

Setelah saya googling, ternyata  pin SDA-SCL ini sama-sama terhubung ke pin microcontroller dimana A4-A5 juga terhubung. Jadi kedua set pin ini terhubung ke sumber yang sama. Hanya saja memang di Leonardo diberikan tambahan header. #GubrakLagi

Walau pun modul radio dan display sudah bisa berjalan saat ini, tapi pengalaman menggunakan TouchRadio jadi tidak nyaman. Buat apa kalau tidak nyaman dipakai? Apalagi saya belum menyambungkan modul RTC DS3231 yang sama-sama menggunakan SDA-SCL namun lebih intensif komunikasinya dengan microcontroller.

Hampir saja saya menggagalkan proyek TouchRadio ini dan menggantinya dengan proyek lain. Namun saya masih penasaran dengan hal ini. Mosok begitu saja gagal? Mesti ada solusinya. Saya tidak boleh menyerah!

Baiklah… biar pembaca penasaran seperti halnya saya saat ini yang SANGAT penasaran dengan solusinya, maka tulisan ini saya potong di sini dulu. Saya mau mencoba solusi yang terpikir saat ini. Anda juga boleh menuliskan ide solusi di bagian komentar. Siapa tahu kita bisa bertukar pikiran mengenai hal ini.

Ngoprek TouchRadio Yuk?

Semalam bongkar-bongkar kotak komponen elektronika. Nemu banyak komponen yang sudah lama saya beli tapi tidak pernah terpakai. Mungkin saya belinya sudah 1-2 tahun yang lalu. Menemukan banyak komponen lawas tapi masih baru seperti menemukan harta karun. Mata langsung berbinar dan otak langsung berpendaran penuh pertanyaan: mau dibuat apa?

Saya menemukan 3 buah display keren, 2 buah OLED display (monokrom dan warna) dan sebuah shield TFT dengan fitur touchscreen. Ada Wemos D1 mini, Arduino UNO, beberapa Arduino Mini dan Nano, dan bahkan board ATTiny85. Asyik banget yak? Tapi lagi-lagi, mau bikin apa ya?

Lalu saya membuka 1 kotak lagi dan di situ menemukan 2 tipe modul radio FM, RTC dan Amplifier mini. Mosok saya membuat Radio FM lagi? Kan bosen.

touchradio

Tapi sepertinya tidak! Karena saya jadi tertantang untuk membuat radio versi touchscreen. Tidak perlu pakai tombol-tombol atau rotary encoder, karena semua kontrol bisa memanfaatkan touchscreen. Jadi menghemat banyak komponen, hehehe…

Saya pun memilih Arduino Uno dan TFT 2,8″ dengan fitur touchscreen untuk proyek malam ini. Googling sana-sini untuk menemukan driver untuk display ini. Akhirnya nemu, lengkap dengan contoh dan penggunaan touchscreen. Test fungsionalitas dengan program contoh bisa berhasil. Horeee…

Selanjutnya adalah mendesain tampilan. Kurang lebih seperti foto di atas. Semua tombol untuk pengaturan frekuensi dan volume, termasuk untuk on/off radio diletakkan di layar touchscreen. Rencananya tampilan bisa diubah ke jam. Nanti pada saat mode jam ada fasilitas pengaturan jam dan alarm.

Memang sih belum jadi. Masih desain tampilan. Langkah selanjutnya adalah menyambungkan modul radio FM, amplifier dan RTC. Mungkin nanti malam targetnya adalah menyambungkan modul radio dulu. Jadi tulisan ini memang bersambung, hehehe…

Oh iya, saya ngoprek Arduino ini pakai Raspberry Pi loh. Tadinya saya malah mau buat program pakai python yang mengontrol Radio Arduino dari Raspberry Pi via serial USB. Jadi pengaturan radio dan apa yang ditampilkan di display Arduino dikirim dari Raspi. Tapi sepertinya lebih asyik kalau stand alone saja. Jadi saya pun memilih membuat TouchRadio.

Yang Tertunda: Eldario Mini Berbasis Web

Sebenarnya saat membuat Eldario Mini, saya merencanakan kalau Eldario Mini ini bisa dikendalikan secara nirkabel (wireless). Jadi kita bisa mengubah volume dan frekuensi dari browser, baik dari PC mau pun smartphone yang 1 jaringan dengannya. Cocok bagi programmer kayak saya yang lebih banyak menatap layar laptop tapi kadang perlu mengubah frekuensi radio.

Itulah mengapa saya menggunakan Wemos D1 Mini yang sudah memiliki modul WiFi build in. Karena jika alasannya cuma membuat radio berukuran mini, sebenarnya saya bisa menggunakan Arduino Mini Pro (versi 5 Volt) yang kebetulan ada beberapa stok.

Namun ternyata saya belum punya waktu untuk mengerjakannya. Padahal ini cuma semacam upgrade firmware di Eldario Mini. Tapi ya menuangkannya ke dalam kode membutuhkan sejumlah waktu, hiks…

Belakangan waktu, tenaga dan pikiran banyak dialokasikan untuk mengerjakan hal lain. Rupanya saya perlu manajemen waktu yang lebih baik. Dan tulisan ini untuk mengingatkan saya juga agar kelak jika ada waktu, saya harus meneruskan Eldario Mini versi Web. Atau harus segera mengalokasikan waktu supaya bisa segera terealisasi.