"Kembali Ke Dasar Elektronika Digital ... "

  • IC Timer 555 yang Multifungsi

    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

  • Animasi LED Dengan IC 4017

    IC 4017 adalah IC 16-pin CMOS dekade counter dari seri IC CMOS 4000. Sangat berguna jika ingin membuat animasi lampu atau LED secara sederhana seperti led berjalan, tulisan berjalan , counter/timer dan masih banyak kegunaan lainnya

  • Bermain DOT Matrix - LOVEHURT

    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.

  • JAM DIGITAL 6 DIGIT TANPA MICRO FULL CMOS

    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

  • BIKIN PCB SEDERHANA TAPI GA MURAHAN

    Bikin PCB itu ga susah kok..dengan software EAGLE CAD dan teknik sterika kamu dapat membuat PCB untuk berbagai project elektronika mu ...

Tampilkan postingan dengan label tutorial. Tampilkan semua postingan
Tampilkan postingan dengan label tutorial. Tampilkan semua postingan

Senin, 27 Juli 2020

[Mudah Belajar RasPi] Bermain dengan GPIO dan interaksi dengan TV Out




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 :


Share:

Rabu, 22 Juli 2020

Cara Mudah Belajar MODBUS - Komunikasi Industri Jaman dulu [part 3] Arduino Sebagai Modbus Master



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:


0x05 0x05 0x00 0x00 0xFF 0x00 0x8D 0xBE  ==> Ngidupin LED
0x05 0x05 0x00 0x00 0x00 0x00 0xCC 0x4E  ==> Matikan LED

0x05 0x02 0x00 0x00 0x00 0x01 0xB8 0x4E  ==> Baca TOMBOL

----Reply Tombol---
05 02 01 00 A0 B8   ==> LOW                                                    
05 02 01 01 61 78   ==> HIGH

0x05 0x04 0x00 0x00 0x00 0x03 0xB1 0x8F ==> Baca DHT11

---Reply DHT11----
05 04 06 00 1D 00 4F 00 5F CF BE

0x05 0x03 0x00 0x00 0x00 0x0F 0x04 0x4A ==> Baca REGISTER

---Reply----
05 03 1E 00 77 00 77 00 77 00 2E 00 61 00 69 00 73 00 69 00 35 00 35 00 
35 00 2E 00 63 00 6F 00 6D 0B ED 


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 :



byte ledOn[] = {0x05, 0x05, 0x00, 0x00, 0xFF, 0x00, 0x8D, 0xBE};//ngidupin Led
byte ledOff[] = {0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x4E};//matikan Led
byte tombol[] = {0x05, 0x02, 0x00, 0x00, 0x00, 0x01, 0xB8, 0x4E};//baca tombol
byte humitemp[] = {0x05, 0x04, 0x00, 0x00, 0x00, 0x03, 0xB1, 0x8F};//baca dht11
byte Hregister[] = {0x05, 0x03, 0x00, 0x00, 0x00, 0x0F, 0x04, 0x4A};//baca hold reg


Sedangkan untuk reply responnya kita cukup membandingkan dengan pola seragam yang akan muncul.

byte tombolL[] = {0x05, 0x02, 0x01, 0x00, 0xa0, 0xB8}; // tombol Low 
byte tombolH[] = {0x05, 0x02, 0x01, 0x01, 0x61, 0x78}; // tombol High 

byte dhtOK[] = {0x05, 0x04, 0x06} ; //reply DHT11

byte aisiOK[] = {0x5, 0x03, 0x1E}; //reply Hold register

//simpan pada pada pointer
byte bufferDataModbus[50];
byte *ptr;
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 :


Share:

Jumat, 29 Mei 2020

[Belajar Mudah] Love Hurt 2020 - Remake pake Arduino




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. 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


- Penyusunan Karakter di Memori


const byte love1[5] =
{
0b0011110,
0b0100001,
0b1000010,
0b0100001,
0b0011110

};

const byte love2[5] =
{
0b0001100,
0b0010010,
0b0100100,
0b0010010,
0b0001100

};





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. 


- Inisialisasi PIN I/O

#define BARIS1 2
#define BARIS2 3
#define BARIS3 4
#define BARIS4 5
#define BARIS5 6
#define BARIS6 7
#define BARIS7 8
#define KOLOM1 9
#define KOLOM2 10
#define KOLOM3 11
#define KOLOM4 12
#define KOLOM5 13


byte kolomnya[5]= {KOLOM1,KOLOM2,KOLOM3,KOLOM4,KOLOM5} ;
byte barisnya[7] = {BARIS1,BARIS2,BARIS3,BARIS4,BARIS5,BARIS6,BARIS7} ;

void setup() {
   //BARIS
   pinMode(BARIS1, OUTPUT);
   pinMode(BARIS2, OUTPUT);
   pinMode(BARIS3, OUTPUT);
   pinMode(BARIS4, OUTPUT);
   pinMode(BARIS5, OUTPUT);
   pinMode(BARIS6, OUTPUT);
   pinMode(BARIS7, OUTPUT); 

   //KOLOM
   pinMode(KOLOM1, OUTPUT);
   pinMode(KOLOM2, OUTPUT);
   pinMode(KOLOM3, OUTPUT);
   pinMode(KOLOM4, OUTPUT);
   pinMode(KOLOM5, OUTPUT);

}




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.


- Function Untuk Menulis Karakter




void tulis(int lama, byte *dot)
{

for(int a=0 ; a<lama ; a++)
{
 for(int b=0 ; b<5 ; b++)         
  {

   for( int c=0;c<5 ; c++){
       if( c == b) digitalWrite(kolomnya[c],LOW );
       else digitalWrite(kolomnya[c],HIGH );
        }
   

   for(int d=0;d<7;d++) {
         digitalWrite(barisnya[d], ((1<<d) & dot[b]) >> d );       
         }
   delay(2);
   blank();
   delay(1);    
  }
 }
}



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.

Bagaimana ? SELAMAT MENCOBA !
Share:

Rabu, 22 Januari 2020

[Elektronika mudah] Operasi Input Output Serial Bluetooth HM10 MLT-BT05-BLE4.0 - LED dan DHT11


#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 :



 SELAMAT MENCOBA ..
Share:

[Elektronika mudah] Hello World modul Bluetooth HM10 MLT-BT05-BLE4.0


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.
Share:

Senin, 13 Januari 2020

[Elektronika mudah] Berkenalan Dengan MakeBlock vs Arduino - Praktek Dasar Led Blink & Sensor LM35



" Mengajarkan ilmu ke anak-anak yg lahir setelah generasi milenial haruslah berbasis VISUAL .." 

Apaan lagi nih bikin pusing aja ? Quote tadi saya kutip dari pembicaraan bersama teman sesama penjaga stand pada pameran ARTPRENEUR pada akhir desember 2019. Kegalauannya pecah ketika melihat kenyataan  siswanya (anak smk) dimana hanya segelintir saja yg bisa menyerap ilmu coding web php yg dan berujung banyak siswa yg bolos. Kenapa sepeti itu ya ? Kenapa coding menjadi tidak menarik ? Padahal penulis sangat mencintai coding (yang gampang tentunya). Saya merasakan masuk kedalam koding sangat mengasyikkan layaknya memecahkan sebuah role play game, mungkin dapat dibandingkan seperti keasikan anak sekarang bermain Mobile Legend. 


Pada dasarnya pemrograman DRAG & DROP bukan barang baru terutama era 90-an dengan  platform pemrograman desktop yaitu Visual Basic, C# dan Delphi dimana membuat tombol dan input teks hanya dari ujung mouse. Apalagi setelah era macromedia / adobe flash malahan semakin dimanja pemrograman nya dengan penggabungan animasi dan actionscript (penulis jagonya di flash sih). Lalu kita tengok pemrograman visual drag-drop lainnya, Scratch menjadi Visual IDE (berbasis flash) pilihan untuk tujuan edukasi koding ke anak-anak yg dikembangkan oleh MIT. Semakin dimanjanya anak-anak dengan gadget dan pilihan aplikasi yg langsung tampil "VISUAL" nya menyebabkan proses koding berbasis teks menjadi kurang menarik lagi. Bagaimana dengan pemrograman microcontroller  yg selama ini selalu dilakukan pada mode teks?


Mudah bukan gambaran program scratch diatas ? Bagaimana dengan pemrograman arduino pada scratch? Sama gampangnya kok...liat nihh...


Mulai tertarik dengan bahasa pemrograman drag and drop diatas ? Jika iya mari saya ajak menyelam membuat Hello Word dengan praktek Led Kedip dan Pembacaan Sensor Suhu LM35. Untuk itu anda perlu menuju ke  IDE online web ( http://ide.mblock.cc ) atau download saja programmer offline nya yg tersedia di websitenya (googling aja).  Perlu diketahui makeblock atau mblock merupakan platform programming robotik dari senzhen china yg demi menarik pasar anak-anak pencinta robotik maka dimanfaatkanlah scratch sebagai programming IDE nya. Tentunya jika ingin lebih menarik minat anak-anak anda harus membeli Mbot atau modul robotik yg memang dibuat semenarik mungkin dan sesuai tujuan mblock. Namun bagi anda yg hanya mempunyai board clone arduino seperti UNO jangan khawatir masih bisa kok. Mau saya bagi langkah-langkahnya berkenalan ? Ikuti tulisan dibawah.




  1. Device & Connection : Untuk arduino UNO butuh melakukan download modul librarinya. Menu awal ketika membuat project baru akan muncul  device Codey dan sprite panda. Hapus saja karena tidak diperlukan.
  2. Component : Berisikan semua block komponen pemrograman yang diperlukan. Penggunaannya sangat simple hanya klik drag dan drop.
  3. Block Canvas : Yaitu tempat menyusun komponen menjadi blok saling berkaitan yang kemudian akan diterjemahkan menjadi suatu software arduino
  4. Code : Tempat kode yang equivalen dengan block pada canvas. Jadi bagi anda yg sudah menguasai sketch arduino akan mudah memahami walau akan ada batasan yg akan dihadapi.



HELLO WORD LED BLINK


PIN 13 sebenarnya sudah memiliki LED internal pada PCB tapi kalau mau lebih terang ya bisa mengikuti gambar diatas. Langkahnya dari awal seperti ini nih..



Jangan lupa ya gambar diatas dimana harus ditambahkan device Arduino UNO pada kolom devices. Pastikan driver USB to Serial ch340 sudah terinstal juga di komputer kamu.




Gambar diatas menunjukkan cara melakukan koneksi ke board arduino uno kamu dan akan muncul gambar dikanan apabila sudah terkoneksi dengan baik. Lanjut yuk kita berkenalan dengan Component beserta proses drag-dropnya ke dalam canvas.


Komponen block events yg mungkin satu-satunya dipakai dalam pemrograman arduino Uno adalah "when Arduino Uno Starts up "



Komponen PIN berisikan blocks yg berhubungan dengan PIN IO baik untuk mengatur fungsinya maupun pembacaan datanya, jadi super lengkap dari PWM sampai ADC. Contoh diatas kita akan menyusun blocks sehingga PIN 13 (LED) merupakan pin OUT dan kemudian kita bisa tentukan statenya apakah HIGH (nyala) atau LOW (mati).


Komponen control berisikan block perintah pengulangan, delay serta conditional statement. Tidak begitu susah kalau hanya buat menyalakan dan mematikan LED tiap 1/2 detik seperti gambar diatas. Tinggal menentukan blocks yg sesuai urutannya dan selanjutnya dapat dievaluasi melalui script yang berada dikanannya. Memang akan terjadi kesalahpahaman mengenai fungsi LOOP yg digantikan oleh perintah WHILE(1) pada fungsi void setup. Tapi secara fungsi itu PODO WAE MUNYER SAMPEK KIAMAT.


Komponen blocks Variables seperti namanya kita akan mendaftarkan sebuah variabel atau list(array) dan kemudian dapat kita tentukan nilai nya melaui block "set" atau perubahannya melalui  block "change". Pada gambar diatas kita buat variabel coba bernilai awal 0, kemudian pada awal setup dirubah menjadi 2 dan melalui LOOP FOREVER akan berubah nilainya bertambah 1 tiap 1 detik.



Komponen operators berisikan operator aritmatika, binary serta operasi string. Tidak jauh berbeda dengan pemrograman teks lainnya yg menjadi spesial adalah drag drop antar blocks yg harus sesuai bulat atau persegi sesuai operasi yang diinginkan. Contoh penggabungan blocks control dengan blocks operators ada pada pembahasan dibawah.



Tujuan dari blocks diatas adalah menghidupkan dan kemudian mematikan LED dengan memperhatikan nilai dari variabel angka. Jadi saat angka <50 maka LED akan menyala lalu saat angka >50 maka LED akan mati. Untuk mengembalikan variabel angka ke 0 maka dibuat satu blocks IF statement lagi yg akan meReset varibel angka menjadi NOL. Sudah siap mencoba di Arduino UNO kamu ? Langsung tancapkan saja dan tekan UPLOAD !



MEMBACA SUHU LM35





Jika berbicara tentang pembacaan sensor LM35 pasti semua paham sangat gampang scriptnya bertebaran dibahas di google..jadi jika dikembangkan melalui scratch Mblocks menjadi satu baris yg sangat indah seperti gambar dibawah ini.


Mau tahu hasilnya seperti bagaimana di terminal serial putty ?



Tentunya MakeBlock memiliki keterbatasan untuk penggunaan arduino uno tapi saya rasa cukup menarik untuk dipelajari. Jika ada uang lebih bisa tuh membeli modul robot mBot yang sangat memungkinkan diajarkan ke anak-anak generasi Z . Semoga tulisan saya dapat mengispirasi kalian untuk tetap semangat belajar.
Share:

Kontak Penulis



12179018.png (60×60)
+628155737755

HP: 081331339072
Mail : ahocool@gmail.com

Site View

Categories

555 (6) 7 segmen (3) adc (4) amplifier (2) analog (10) android (11) antares (3) arduino (14) attiny (1) attiny2313 (17) blog (1) bluetooth (1) cmos (2) crypto (2) dasar (35) display (3) esp8266 (3) gcc (1) iklan (1) infrared (2) Input Output (3) iot (16) jam (6) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (12) komputer (3) komunikasi (1) kontrol (4) lain-lain (8) lcd (2) led (9) led matrix (6) line tracer (1) lm35 (1) memory (1) metal detector (4) microcontroller (55) mikrokontroller (7) mikrotik (5) ninmedia (2) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (38) pcb (2) praktek (2) project (33) proyek (1) python (1) radio (3) raspberry pi (4) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (1) sharing (3) signage (1) sinyal (1) sms (6) software (18) tachometer (2) telepon (7) televisi (72) television (5) transistor (1) troubleshoot (3) tulisan (59) tutorial (78) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika