IC timer 555 adalah sirkuit terpadu (chip) yang digunakan dalam berbagai pembangkit timer, pulsa dan aplikasi osilator. Komponen ini digunakan secara luas, berkat kemudahan dalam penggunaan, harga rendah dan stabilitas yang baik
Kami bantu anda untuk memahami lebih jelas mengenai migrasi tv digital, apa sebabnya dan bagaimana efek terhadap kehidupan. Jasa teknisi juga tersedia dan siap membantu instalasi - setting perangkat - pengaturan antena dan distribusi televisi digital ke kamar kos / hotel
Project Sederhana dengan Dot Matrix dan Attiny2313. Bisa menjadi hadiah buat teman atau pacarmu yang ulang tahun dengan tulisan dan animasi yang dapat dibuat sendiri.
Jika anda pencinta IC TTL datau CMOS maka project jam digital ini akan menunjukkan bahwa tidak ada salahnya balik kembali ke dasar elektronika digital , sebab semuanya BISA dibuat dengan teknologi jadul
Sudah lama gak pegang komponen lagi, lama banget pokoknya. Tapi karena kebetulan minggu lalu kedatangan keponakan yang bete karena HP nya rusak dan gak bisa main game (alasan bapaknya aja dibilang HP nya diservis) , kita kenalkan aja dengan proyek lampu flip-flop jaman jadul...kita pake 2 LED aja dulu..begini nih skematiknya ...
Untuk Transistor pada rangkaian FLIP-FLOP bisa menggunakan transistor universal model NPN maupun PNP. Kebetulan di kotak komponen saya cuman ada transistor PNP BC 557 sisa proyek jaman dulu, dan saya buatkan di breadboard dulu nih seperti di video dibawah ini.
Untuk rangkaian LED flasher 3 buah, tinggal menambahkan 1 set komponen lagi, dan kemudian kapasitor dari Colector transistor terakhir menuju ke Basis transistor pertama. Hasilnya akan terjadi efek 3x charge discharge. Sayangnya untuk lebih dari 3 tidak akan berhasil karena charge dichargenya berulang setelah 4 periode.
Untuk mengatur kecepatan pergeseran LED bisa menggunakan potensio 10K dengan gabungan resistor 4k7 dan capasitor 100uF seperti pada gambar. Kapasitor positif dihubungkan ke tegangan baterai (+) dan potensio yang tengah (ada kabel kuningnya ) masuk ke ujung resistor basis. Jadi ke 3 resistor 10k antara basis dan positif baterai di putuskan dari koneksi ke baterai, dan diganti atau disela oleh rangkaian potensio-capasitor-resistor ini.
Raspberry pi merupakan komputer mini yang menjadi perhatian orang banyak sejak pertama kali muncul di pasaran tahun 2012. Penulis saat itu yang masih merasa antipati terhadap arduino yg lumayan "membodohi" para pelajar yg memulai mengenal elektronika digital, merasa semakin gerah dengan kehadiran raspi karena teman-teman yg dulunya tidak suka solder menyolder kini rajin unggah foto kegiatan hariannya bersama raspi. Kenapa begitu ? Karena 20 tahun yg lalu penulis sudah terlebih dahulu mengenal "interfacing" solderan ke PC dan itu bukan hal gampang. Jadi ketika dunia opensource merajai semua platform maka tak ada lagi kata susah dan mungkin perasaan "spesial" saya sebagai tukang solder mulai terancam.
Perasaan itu pun pudar 8 tahun setelahnya ketika menyadari saya tetap "spesial" kok karena dengan berbekal kemampuan dasar elektronika yang kuat, maka tidak akan menjadi masalah jika saya diminta untuk memecahkan kesulitan orang lain yang berhubungan dengan raspberry pi. Apalagi ketika disumbangkan oleh teman sebuah raspberry pi zero w yang menurut dia kesusahan karena error melulu. Dan dengan bergembira saya menemukan bahwa yang bikin error adalah kelas storage SD CARD yang terlalu rendah untuk mendapatkan hasil yg stabil tiap saat, tersolusikan dengan saya membeli SD CARD yang kelas tinggi untuk videography 4K seharga 200rb.
Penggunaan raspberry pi lebih menitik beratkan ke fungsinya sebagai komputer berbasis linux dan penulis juga merasakan kemudahan karena dapat membantu ketika mengerjakan proyek berbasis MQTT dengan memanfaatkan raspi sebagai brokernya. Kemampuan python sebagai motor utama dari programming nya yang juga open source menjadikan dunia raspi sangat berkembang terutama di bidang IOT. Untuk itu seri pembuka dari tutorial menyolder raspberry pi kita akan berhubungan dengan fungsi Input dan Output dan praktek pertama adalah menggunakan Switch push button.
Raspberry pi memiliki I/O yang berlevel 3.3 volt sehingga harus menyesuaikan kalau anda terbiasa dengan arduino yang levelnya 5v. Dari gambar diatas tiap pin I/O sudah memiliki fasilitas Pull up down internal sehingga untuk rangkaian tombol cukup mengikuti gambar diatas aja. Untuk script pythonnya bisa di cari di seantero internet dan umumnya seperti berikut ini :
import RPi.GPIO as GPIO #library Rpi sebagai input output lewat python
import time
GPIO.setmode(GPIO.BCM)
#pilih GPIO pin yang dekat-dekat ground aja
#semua GPIO di Pull UP
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)#TombolGPIO17
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)#TombolGPIO27
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)#TombolGPIO22
try:
while True:
button_state1 = GPIO.input(17)
button_state2 = GPIO.input(27)
button_state3 = GPIO.input(22)
if button_state1 == False: #logic 0 ketika ditekan
print('Tombol 1 ditekan...')
elif button_state2 == False:
print('Tombol 2 ditekan...')
elif button_state3 == False:
print('Tombol 3 ditekan...')
time.sleep(0.2)
except:
GPIO.cleanup()
Dan hasilnya bisa dipastikan lancar keluar text pada console/terminal saat tombol ditekan
Terlalu gampang bagi saya dan kini ingin mengeluarkan suara dan menampilkan gambar saat menekan tombol. Kita gunakan library pygame sebagai pemutar mp3 dan aplikasi linux feh untuk menampilkan gambar. Hubungkan raspberry pi dengan kabel HDMI menuju TV Monitor dan Scriptnya seperti berikut ini :
import RPi.GPIO as GPIO
import time
import pygame
import os
os.system ('xset s activate') #membunuh screen saver, tapi ini dulu export DISPLAY=:0.0
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)#Button to GPIO
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)
pygame.mixer.init() #mixer suara
try:
while True:
button_state1 = GPIO.input(17)
button_state2 = GPIO.input(27)
button_state3 = GPIO.input(22)
if button_state1 == False:
print('Ini tombol 1 broo...')
os.system ('feh --hide-pointer -x -q -B black -F -Z "satu.png" &')
pygame.mixer.music.load("nomer1.mp3")
pygame.mixer.music.play(1)
elif button_state2 == False:
print('Iki tombol 2 jeeehh...')
os.system ('feh --hide-pointer -x -q -B black -F -Z "dua.png" &')
pygame.mixer.music.load("nomer2.mp3")
pygame.mixer.music.play(1)
elif button_state3 == False:
print('Kepencet tombol telu boz...')
os.system ('feh --hide-pointer -x -q -B black -F -Z "tiga.png" &')
pygame.mixer.music.load("nomer3.mp3")
pygame.mixer.music.play(1)
time.sleep(0.2)
while pygame.mixer.music.get_busy() == True:
pass
except:
GPIO.cleanup()
Sesuaikan gambar yang anda punya dan juga suara yang ingin didengarkan sebaiknya dalam satu folder aja. Jangan lupa jika anda menggunakan terminal ssh untuk terhubung dengan raspberry pi maka jalankan dulu "export DISPLAY=:0.0" agar output seperti video berikut tampil pada layar TV :
Masih kurang puas kita tampilkan video + mp 3 yuk saat tombol ditekan...gunakan VLC sebagai pemutar videonya.
import RPi.GPIO as GPIO
import time
import pygame
import os
import subprocess
os.environ['DISPLAY'] = ":0"
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)#Button to GPIO23
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)
pygame.mixer.init()
# =================================
# >>>> code here to turn screen ON
# =================================
# forse display on, disable dpms and set screensaver off
subprocess.call('XAUTHORITY=~pi/.Xauthority DISPLAY=:0 xset dpms force on && xset -dpms && xset s off', shell=True)
#vlc
vid = subprocess.Popen(['vlc','bali.mp4','-L','-f','-q','&'], shell=False)
def putar(musik):
pygame.mixer.music.load(musik)
pygame.mixer.music.set_volume(1.0)
pygame.mixer.music.play(1)
time.sleep(5)
try:
while True:
button_state1 = GPIO.input(17)
button_state2 = GPIO.input(27)
button_state3 = GPIO.input(22)
if button_state1 == False:
print('Button 1 is Pressed...')
putar("survey1.mp3")
elif button_state2 == False:
print('Button 2 is Pressed...')
putar("survey2.mp3")
elif button_state3 == False:
print('Button 3 is Pressed...')
putar("survey3.mp3")
time.sleep(0.2)
while pygame.mixer.music.get_busy() == True:
pass
except:
vid.terminate()
GPIO.cleanup()
Pingin tau hasilnya ?
Tutorial lengkap melalui yotube dapat anda simak di video berikut ini :
Dalam sebuah piramida Internet Of Things, bagi developer kelas rumahan seperti penulis yang tukang solder ini, ruang geraknya terbatas pada 2 tingkat yaitu piramida paling bawah pembacaan sensor via microcontroller dan piramida paling atas pada tampilan hasil IOT melalui grafik web dan apps smartphone. Level priramida "connectivity" umumnya merupakan posisi yang hanya bisa dikerjakan oleh dunia telekomunikasi sedangkan level "platforms" merupakan ranah para raksasa IT.
Standar komunikasi MODBUS bisa digambarkan berada pada perbatasan piramida 1 dan 2 dimana para pengembang modbus mulai mengeluarkan standar modbus TCP untuk meng-akomodir standar jaman now yang serba IP. Lalu alat berbasis modbus yang masih menggunakan standar serial com membutuhkan sebuah bridge IOT yang akan membuat loncatan dari piramida 1 ke piramida 3. Tulisan saya serial pembahasan modbus yang ke-3 dan selanjutnya akan membahas perancangan dan praktek arduino sebagai bridge MQTT sederhana yang akan menghubungkan modbus ke dalam piramida IOT.
Jika anda memerlukan sensor suhu kelembaban standar modbus untuk industri yang harganya terjangkau maka gambar diatas merupakan salah satu pilihan. Diperlukan pembacaan datasheet atau manual yang didapat dari produsennya yang merupakan ciri khas dari alat ber-Protokol modbus. Tiap desainer alat menggunakan alamat register bebas dimanapun sesuai pemahaman mereka begitu juga pemetaan data yang dikirim seperti apa prosedurnya dilakukan tanpa pola yang seragam antar alat yang berbeda. Seperti biasa saya lebih suka menjelaskan dengan praktek langsung dimana kali ini saya berusaha menduplikasi alat SHT20 modbus diatas dengan menggunakan sensor sejuta umat DHT11.
Langkah awal yang perlu diperhatikan adalah mengukur kemampuan microcontoller arduino sebagai bridge IOT dengan memposisikannya sebagai modbus master dan hasilnya penulis beberapa kali kesulitan untuk memperoleh library modbus master yang sesuai dengan keinginan. Ini dikarenakan ternyata akibat saking banyaknya standar yang harus diakomodir maka lebih mudah untuk membuat bridge sesuai dengan karakteristik dari masing-masing alat modbus. Pada penjelasan part1 dan part2 yang saya tulis sebelumnya, alat modbus yang saya buat memiliki deretan perintah dan respon serial sebagai berikut:
Untuk perintah mode function 5 force coil / menghidupkan LED maka yang dikirim akan sama dengan apa yang di reply oleh alat modbus, sedangkan function lainnya memiliki karakteristik yang selalu sama. Sehingga jika kita ingin membuat master modbus pada arduino cukup mengirim 5 jenis perintah serial seperti pada array berikut :
Perhatikan reply dari pembacaan DHT 11 seperti berikut :
05 04 06 00 1D 00 4F 00 5F CF BE
05 = Alamat device id slave
04 = Perintah baca input analog/ function 04
06 = 6 byte data berikut akan muncul (format 2 byte per data)
00 1D = 2 byte pertama adalah 001D = 29
00 4F = 2 byte kedua adalah 004F = 79
00 5F = 2 byte ketiga adalah 005F = 95
CF BE = Checksum / CRC 16 modbus
Jadi butuh parsing pada byte ke-4 dan ke-6 untuk mendapatkan pembacaan suhu dan parsing byte ke-8 untuk mendapatkan kelembaban. Checksum tidak begitu critical sehingga mungkin untuk diabaikan, dan urutan script pembacaan DHT 11 yang kemudian akan dilempar ke serial monitor adalah seperti berikut ini :
void loop()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= 5000) {
// timer baca dht11 tiap 5 detik
previousMillis = currentMillis;
//kirim perintah ke modbus baca dht 11
mod.write(humitemp, sizeof(humitemp));
}
//check modbus timeout
long millisResponModbus = millis() + 1000;
while (!mod.available())
{
if (millisResponModbus < millis())
{
break;//timeout
}
}
// baca data serial yang masuk dari modbus lalu simpan pada pointer
while (mod.available())
{
byte b = mod.read();
*ptr++ = b;
Serial.print("0x");
Serial.print(String(b, HEX));
Serial.print(" ");
delay(2);
}
//proses komparasi data yg masuk (DHT11) dengan array jawaban lalu parsing
if (memcmp(bufferDataModbus, dhtOK, sizeof(dhtOK)) == 0) {
ptr = bufferDataModbus;
Serial.println("");
Serial.print(F("SUHU :"));
Serial.print(ptr[4]); //alamat byte ke 4
Serial.print(F(","));
Serial.print(ptr[6]); //alamat byte ke 6
Serial.print(F(" C HUMI :"));
Serial.print(ptr[8]); //alamat byte ke 8
Serial.println(" %");
memset(bufferDataModbus, 0x00, sizeof(bufferDataModbus));
}
}
Jadi jika ingin melihat visualisasinya anda bisa menontonnya pada video berikut ini :
Lama banget gak utak-atik LED MATRIX padahal barang satu ini favorit saya sejak kuliah 20 tahun yang lalu. Kekaguman saya pada benda ini berawal saat tahun 90an saya sering diminta teman membuat LED susun menjadi tulisan tertentu dan kemudian digabung dengan IC 4017 agar menjadi efek gerak kedip kanan kiri, sayangnya karakter yg dibentuk gak bisa diubah. Dan saat saya kuliah ketemu dot matrix yang gak lain led disusun yang bisa diubah ubah tampilannya sesuai keinginan. Bahkan ingatan saya masih clink pada tahun 1998 di atas atap kampus Elektro ITS terpampang text berjalan dari Bohlam yg disusun menjadi seperti LED matrix berukuran super besar.
Tuh saya masih inget bikin generator susunan led ke bit / hex yang nantinya dimasukkan ke script atmel studio. Dulu saya pake IC legendaris ATTINY 2313 dan banyak yang belajar dari modul pembelajaran (yang saya jual paketan) dimana praktek terakhirnya bikin teks berjalan pada satu marix yang bisa dibaca disini atau versi excel disini . Kini sudah tahun 2020 saya ingin membagi ilmu nya kembali dengan format lebih jaman now menggunakan Arduino. Lanjut kumpulin bahan-bahannya yuk...
Bahan-bahan dapat disesuaikan dengan yang ada dirumah aja jangan kaku sampe harus beli (walau murah tinggal klik olshop). Rangkaian nya sangat simple karena akan menggunakan pin I/O nomer 2-8 sebagai BARIS dan pin 9-13 sebagai KOLOM dari led matrix. Sebaiknya jika bingung prinsip penyalaan LED MATRIX bisa dibaca dulu dasarnya disini.
Karena Arduino Pro Mini yg saya gunakan memakai header cowok maka sangat simple menyambungkannya ke Led Matrix dengan menggunakan kabel jumper cewek ke cewek. Tinggal colok seperti gambar dibawah. Kalau pake arduino jenis lain tinggal sesuaikan saja.
Mari kita bahas scriptnya secara mendalam..jangan sampe pusing ya ! Pegangan kalau kepala sudah muncul bintang nya..hehehe
Untuk menyusun karakter diatas anda butuh mengunduh software TextToBit yang saya kerasikan disini. Jadi saya ingin membuat animasi jantung berdenyut dengan 2 frame karakter yang dinyalakan bergantian (kalau mau banyak ya lebih keren juga). Jadi prinsipnya menyusun BIT sedemikian rupa agar karakter terwakili pada led dengan kombinasi 7 output BARIS (HIGH) vs 5 output KOLOM (LOW). Perhatikan gambar berikut ya ...
Dari gambar dapat dibayangkan bahwa BIT biner pada array (BARIS) diatas menunjukkan nilai 1 berarti LED NYALA dan sebaliknya. Selanjutnya akan di scanning KOLOM nya satu persatu secara cepat dan mata melihat sebagai satu gambar utuh. Karena Matrix yg kita gunakan 7x5 maka cukup menggunakan 7 bit saja per baris.
Tujuan membuat array yang isinya PIN I/O untuk kolom dan baris adalah memudahkan proses geser BIT saat scanning dan penyalaan LED. Ini karena arduino menggunakan penamaan PIN sebagai Port I/O tersendiri bukan seperti Attiny dan microcontroler AVR lainnya yg PORT disesuaikan dengan register portnya masing-masing selebar 8 bit sehingga mudah melakukan operasi geser bit. Ini bedanya tukang solder yg pernah belajar microcontroller menggunakan bahasa assembly dengan yang langsung lompat menggunakan arduino. Kalau anda langsung menggunakan Arduino mungkin akan kebingungan memahaminya.
Kita akan bahas baris per baris fungsi diatas agar gampang memahaminya.
void tulis(int lama, byte *dot)
Lama = waktu lama for loop dijalankan agar menunjukan lama tampilnya sebuah karakter.
*dot = Pointer ke array yang akan melewatkan 7 bit baris karakter
Terdapat 4 buah FOR LOOP yaitu :
a = Loop lama tampil sebuah karakter
b = Scanning KOLOM
c = Geser kolom (LOW)
d = Geser baris (HIGH)
Kita akan breakdown for loop C dan D :
for( int c=0;c<5 ; c++){
if( c == b) digitalWrite(kolomnya[c],LOW );
else digitalWrite(kolomnya[c],HIGH );
}
Ketika scanning kolom satu persatu maka yg bergerak adalah memberikan pin i/o sebagai LOW / 0, jadi kalau diberikan perintah secara manual akan menjadi :
if ( b == 0 ) {
digitalWrite(KOLOM1, LOW);
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, HIGH);
}
else if ( b == 1 ) {
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, LOW);
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, HIGH);
}
else if ( b == 2 ) {
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, LOW);
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, HIGH);
}
else if ( b == 3 ) {
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, LOW);
digitalWrite(KOLOM1, HIGH);
}
else if ( b == 4 ) {
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, HIGH);
digitalWrite(KOLOM1, LOW);
}
Terlalu panjang, namun mudah dimengerti dan merupakan terjemahan isi dari FOR LOOP C yang hanya 4 baris saja.
for(int d=0;d<7;d++) {
digitalWrite(barisnya[d], ((1<<d) & dot[b]) >> d );
}
For Loop D memiliki keunggulan geser bit dengan hanya sebaris script, tapi untuk memahaminya butuh penjabaran yaitu :
GESER BIT 1 : (1<<d) & dot[b]
GESER BIT 2 : >> d
Semisal nih..7 BIT baris yg akan dinyalakan adalah 0b0001100 , dimana 0 = mati , 1 = nyala. Sehingga kita perlu mengetahui bit yg sesuai dengan PIN i/o yg bersesuaian juga. Inilah hubungan kita membuat ARRAY yg berisikan nomer PIN.
Jadi dengan 7 kali loop maka kita akan tau PIN BARIS ke X itu mati atau nyala. Penejelasannya seperti berikut :
saat d=0 , maka angka 1 geser kiri sebanyak 0 kali = 0000001 , lanjut di AND dengan isi semuanya 0001100 hasilnya = 00000000, kemudian geser kanan semuanya sebanyak 0 kali hasilnya PIN BARIS1 = 0 /MATI
saat d=1 , maka angka 1 geser kiri sebanyak 1 kali = 0000010 , lanjut di AND dengan isi semuanya 0001100 hasilnya = 00000000, kemudian geser kanan semuanya sebanyak 1 kali hasilnya PIN BARIS2 = 0 /MATI
saat d=2 , maka angka 1 geser kiri sebanyak 2 kali = 0000100 , lanjut di AND dengan isi semuanya 0001100 hasilnya = 00000100, kemudian geser kanan semuanya sebanyak 2 kali hasilnya PIN BARIS3 = 1 /NYALA
saat d=3 , maka angka 1 geser kiri sebanyak 3 kali = 0001000 , lanjut di AND dengan isi semuanya 0001100 hasilnya = 00001000, kemudian geser kanan semuanya sebanyak 3 kali hasilnya PIN BARIS4 = 1 /NYALA
saat d=4 , maka angka 1 geser kiri sebanyak 4 kali = 0010000 , lanjut di AND dengan isi semuanya 0001100 hasilnya = 00000000, kemudian geser kanan semuanya sebanyak 4 kali hasilnya PIN BARIS5 = 0 /MATI
saat d=5 , maka angka 1 geser kiri sebanyak 5 kali = 0100000 , lanjut di AND dengan isi semuanya 0001100 hasilnya = 00000000, kemudian geser kanan semuanya sebanyak 5 kali hasilnya PIN BARIS6 = 0 /MATI
saat d=6 , maka angka 1 geser kiri sebanyak 6 kali = 1000000 , lanjut di AND dengan isi semuanya 0001100 hasilnya = 00000000, kemudian geser kanan semuanya sebanyak 6 kali hasilnya PIN BARIS7 = 0 /MATI
Seperti itulah proses geser BIT sehingga tiap LED dapat ditentukan mati dan nyalanya .
delay(2);
blank();
delay(1);
Fungsi blank mengatasi kelembaman mata yg menyebabkan efek LED berbayang (saking cepetnya ) dengan cara mematikan semua LED saat akan pindah 7 bit Baris selanjutnya
void blank ()
{
digitalWrite(BARIS1,LOW);
digitalWrite(BARIS2,LOW);
digitalWrite(BARIS3,LOW);
digitalWrite(BARIS4,LOW);
digitalWrite(BARIS5,LOW);
digitalWrite(BARIS6,LOW);
digitalWrite(BARIS7,LOW);
}
- Sedangkan untuk LOOP utama cukup singkat aja
void loop() {
tulis(10,love1);
tulis(10,love2);
}
- Hasilnya :
Selanjutnya ada fasilitas text geser kanan dan naik
Tinggal mengolah sedikit script pada tulisan sebelumnya di 2011 di link disini.
#daring #daringadalah daring adalah mpls #sekolah #guru #google classroom google classroom sekolah online guru kelas zoom webcam
Modul Bluetooth HM10 MLT-BT05-BLE4.0 yang saya beli ternyata merupakan emulator komunikasi serial pada BLE dan cocok untuk proses belajar mengenal parameter dan pengaturan dari device BLE pada umumnya. Harapan saya untuk dapat mengoprek UUID dan Service / Characteristic yg ada ternyata terbatas pada CHAR nama Bluetooth serta UUID 0xFFE0 yang merupakan layanan TX RX Serial seperti yg bisa dilihat di hasil scan pada aplikasi android BLE console ( gunakan google play).
Beberapa kali saya temukan kerancuan dalam mengartikan mana yg UUID dan mana CHARACTERISTIC, tapi dari kenyataan hasil praktek dan manual book maka modul saya ini memang hanya mempunyai 1 UUID dan 1 CHAR yaitu 0xFFE0 dan 0xFFE1. Ada beberapa blog yg mengatakan bahwa angka itu muncul dari kombinasi parameter serivis yg bisa read write dan notify. Daripada bingung kita ikut aja aturan seperti contoh yg ada di internet sana dimana harus disertakan AT command berikut ini :
AT+ROLE0 ==> Sebagai mode slave
AT+UUID0xFFE0 ==> atur UUID
AT+CHAR0xFFE1 ==> atur Characteristic
Kembali ke kelanjutan praktek sebelumnya, kita kembali menghubungkan Arduino Uno dan modul BLE dan kali ini akan disertakan 2 buah lampu LED.
Jadi tujuan dari prakteknya adalah untuk menghidupkan dan mematikan LED melalui terminal android. Scriptnya bagaimana ? Kita bahas satu persatu bagian yuk..
#include <SoftwareSerial.h> // library serial
#define merah 5 // pin LED merah
#define hijau 6 // pin LED hijau
SoftwareSerial mySerial(3, 4); // RX, TX
void setup() {
pinMode(merah, OUTPUT); //inisialisasi led merah
pinMode(hijau, OUTPUT); //inisialisasi led merah
digitalWrite(merah, HIGH); //test led saat awal
digitalWrite(hijau, HIGH); // Nyala lalu mati
delay(500);
digitalWrite(merah, LOW);
digitalWrite(hijau, LOW);
mySerial.begin(9600); // inisialisasi serial BLE
Serial.begin(9600); // inisialisasi serial UNO
// inisialisasi UUID dan BLE sebagai slave mode
sendCommand("AT");
sendCommand("AT+ROLE0");
sendCommand("AT+UUID0xFFE0");
sendCommand("AT+CHAR0xFFE1");
sendCommand("AT+NAMEwww.aisi555.com");
}
Nah begitu aturan awal menginisialisasi modul BLE pembaca cukup ikuti saja aturan ini. Lalu untuk mengirim AT command secara serial ke BLE digunakan function / routine bernama sendCommand() void sendCommand(const char * command){ Serial.print("Command kirim :"); // menulis command ke monitor Serial.println(command); mySerial.println(command); // kirim AT command ke BLE //tunggu bntar delay(100); char reply[100]; //kumpulkan reply dalam char array int i = 0; while (mySerial.available()) { reply[i] = mySerial.read(); i += 1; } //akhir string selalu '\0' reply[i] = '\0'; Serial.print(reply);
Serial.println("Pesan Dibalas");
Untuk menerima perintah dari lawan yaitu Smartphone Android dengan aplikasi BLE Console maka diperlukan pembacaan perintah dan dicompare sesuai kata "kunci" yg dipakai. Misal "LED ON" maka akan di compare melalui script STRCMP seperti berikut :
if (strcmp(reply,"merah on")==0) digitalWrite(merah, HIGH);
else if (strcmp(reply,"merah off")==0) digitalWrite(merah, LOW);
else if (strcmp(reply,"hijau on")==0) digitalWrite(hijau, HIGH);
else if (strcmp(reply,"hijau off")==0) digitalWrite(hijau, LOW);
if(strlen(reply) > 0){
Serial.println(reply);
Serial.println("Perhatikan LED nya");
}
}
Simple bukan ? Dengan kreasi menambahkan delay maka kita bisa juga menambahkan fasilitas flip- flop pada hijau merah seperti pada script dan video dikakhir tulisan ini
void loop() {
readSerial();
delay(500);
if( flip == true) {
if(flop == false) {
digitalWrite(merah, LOW );
digitalWrite(hijau, HIGH);
flop = true;
}
else {
digitalWrite(merah, HIGH );
digitalWrite(hijau, LOW);
flop = false;
}
}
}
Bagaimana jika kita tambahkan DHT11 dan akan membaca suhu udara? Kita cukup menambahkan proses pembacaan DHT11 saat ada perintah serial masuk dari BLE yg dikirim smartphone, misalnya seperti gambar dibawah. Saya menggunakan aplikasi BLE console dengan setting Notify centang dan Send Enter jangan di centang.
Jadi modifikasi script sama saja seperti pembahasan pembacaan DHT 11 pada percobaan yang lalu lalu, yg ditambahkan hanya reply ke BLE melalui serial port.
void SendTempHumid(bool jenis){ // jenis suhu apa humi
//script umum pembacaan DHT11 float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); //return; This will ensure that data is always sent } if(jenis == false) // baca suhu { Serial.print("Temperature: "); Serial.print(t); Serial.println(" °C "); mySerial.print("T: "); //kirim suhu ke BLE mySerial.print(t); mySerial.println("°C "); } else { Serial.print("Humidity: "); Serial.print(h); Serial.println(" %"); mySerial.print("H: "); //kirim humi ke BLE mySerial.print(h); mySerial.println(" %"); } }
Sedangkan pada function readSerial() kita tambahkan seperti ini untuk menangkap pengiriman kata "suhu" dan "humi" yg dikirimkan oleh smartphone. else if (strcmp(reply,"suhu")==0) SendTempHumid(false); else if (strcmp(reply,"humi")==0) SendTempHumid(true); Hasil selengkapnya bisa dilihat pada video berikut ini :
BLE alias bluetooth low energy merupakan pengembangan terbaru teknologi wireless jarak dekat yaitu versi bluetooth 4.0 keatas dimana merupakan salah satu penggerak dunia IOT yang sangat digemari. Apabila anda jalan-jalan ke MALL dan melakukan scan bluetooth melalui perangkat HP smartphone maka anda akan terkejut melihat banyaknya perangkat disekitar kita yang menggunakan komunikasi BLE. Contohnya dapat saya gambarkan disebuah mall di surabaya dengan hasil scan pada toko sepatu dan saya terkejut melihat hasilnya ...
Kira-kira barang apa yg ada disekitar saya ya ? Kok bisa banyak banget..dan ternyata setelah saya menengadah diatas kepala saya terdapat ratusan lampu LED dengan bentuk yg sedikit "oversize" dan ketika saya googling hasilnya lampu itu merupakan smartlamp BLE yang secara IOT dapat mengatur posisi dan kecerahannya sesuai kondisi yang diinginkan. Canggih bukan ?
Blog ini sempat juga berkenalan dengan modul bluetooth versi jadul yang bisa anda baca disini : http://www.aisi555.com/2013/09/tutorial-avr-bluetooth-android-its-easy.html , dan dapat diperoleh penjelasan dari praktek tentang kemudahan berkomunikasi serial secara wireless. Bagaimana dengan versi terbaru yang sudah mengadopsi teknologi BLE 4.0 ? Ternyata ada istilah baru yg harus digoogling apabila pertama mengenal BLE yaitu ADVERTISING, UUID, SERVICE, GATT, CHARACTERISTIC dan sebagainya. Untuk mempersingkat pemahaman bisa dilihat pada hasil scanning di smart TV berikut.
dan ketika kita bonding dengan alat BLE semacam smart watch bisa dilihat akan muncul beberapa UUID dan Characteristicnya dalam format yg sedikit menakutkan bagi orang awam.
Jadi biar tidak bingung cukup dibayangkan UUID sebagai bapaknya, Characteristic sebagai anaknya. Prosesor yg terhubung dengan BLE akan menentukan properties dari masing CHAR apakah bisa dibaca, ditulis atau memberikan notifikasi. Nah data CHAR inilah yg nanti akan diisikan data oleh prosesor Input Output BLE dan pihak lawan membacanya atau merubah nya seperti umumnya client/server yg berkomunikasi secara wireless.
Dipasaran modul siap pakai BLE hanya ditemukan satu model yaitu "clone" yg mengaku BT09-AT . Tetapi ketika penulis mencoba berkenalan "hello world" ternyata modul ini lebih ke versi MLT-BT05 yang memang sudah ber versi BLE 4.0 . Mari kita bahas cara berkenalan dengan modul BT05 ini. Kesan saya pertama kalinya memegang alat ini:
Power supply bisa gunakan 5Volt jadi aman menggunakan micon atau arduino
Level serial ditulisan 3.3V , tapi serial TTL cukup juga kok levelnya
Jika menggunakan USBSERIAL untuk mencoba berkomunikasi maka akan sangat kesulitan sebab batasan muncul ketika perintah serial yg dikirim tanpa memerlukan CR (enter) dan LF (\n). Jadi AT command yg dikirim akan sedikit berbeda seperti pada modem GSM
Akibatnya untuk hello world sebaiknya langsung menggunakan arduino saja seperti gambar rangkaian dibawah ini.
Dengan script berikut ini yg berdasarkan komunikasi serial biasa maka akan dapat di test hasil dari AT command paling dasar yaitu AT+NAME<nama nya bluetooth> .
include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 4); // RX, TX
void setup() {
mySerial.begin(9600);
Serial.begin(9600);
sendCommand("AT");
sendCommand("AT+NAMEwww.aisi55.com");
}
void sendCommand(const char * command){
Serial.print("Command send :");
Serial.println(command);
mySerial.println(command);
//delay bentar
delay(100);
char reply[100];
int i = 0;
while (mySerial.available()) {
reply[i] = mySerial.read();
i += 1;
}
//biar string end
reply[i] = '\0';
Serial.print(reply); //tulis jawaban dari BLE
Serial.println("Sukses");
}
void loop() {
}
jika dilihat monitor terminal serial akan muncul jawaban sebagai berikut
Dan hello world saya sukses dengan berhasil memancarkan sinyal BLE dengan nama www.aisi555.com. Bisa dicoba juga menambahkan beberapa AT command lainnya seperti AT+VERSION dan AT+ADDR . Selamat mencoba.