Saturday, November 21, 2015

Tutorial cara membuat program mirroring serial pada Arduino

Catatan berikut ini adalah catatan yang menjelaskan cara membuat program mirroring serial pada Arduino. Tujuannya adalah membantu tutorial sebelumnya yaitu Tutorial cara komunikasi serial com port antara python dan arduino.

secara garis besar, fungsi dari program ini adalah menunggu ada inputan data dari komunikasi serial, lalu mengirim balik data tersebut melalui komunikasi serial yang sama (mirroring).

Kode Arduino nya adalah:

void setup() {
  // initialize both serial ports:
  Serial.begin(9600);
}

void loop() {
  // read from port 0, send to port 0:
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial.write(inByte);
  }
}

Cukup sederhana kan?!

Selamat mencatat!!

Thursday, November 19, 2015

Tutorial cara komunikasi serial com port antara python dan arduino

Catatan kali ini berisi tentang cara komunikasi antara computer/PC/laptop menggunakan bahasa programan python dan Arduino dengan komunikasi serial COM. Disini saya mencoba membuat contoh penggunaan class sederhana dan linkage antara dua buah file program python. 
Di sisi Arduino sendiri, software arduino yang dibuat bersifat standby dan mengirim balik data yang dikirimkan. software Arduino nya akan saya jelaskan pada catatan berikutnya.

ada 2 buah software python, software utama, dan software tambahan untuk menampilkan comment (hanya untuk ujicoba linkage antara 2 file python)

software python utama nya:

import serial
import deskripsi
from time import sleep

# configure the serial connections (the parameters differs on the device you are connecting to)
ser = serial.Serial('COM22', timeout=1)
ser.baudrate = 9600

class cser:
    def tulis(self):
        ser.write(input)
        out = ''
        # let's wait one second before reading output (let's give device time to answer)
        sleep(.1)
        while ser.inWaiting() > 0:
            out += ser.read(1)
        if out != '':
            print ">> " + out

deskripsi.katapembuka()

while 1:
    # get keyboard input
    input = raw_input(">> ")
    if input == 'exit':
        ser.close()
        exit()
    else:
        cser.tulis()


lalu, buat software python dengan nama deskripsi.py yang berisi sebagai berikut:

def katapembuka():
    print("program ini untuk mencoba software serial dengan menggunakan python")
    print("silahkan masukkan kata")
    print("ketik exit untuk keluar")


Selamat mencatat dan mempelajari!!!

Monday, November 16, 2015

Cara instalasi package library python pada pycharm IDE

Catatan berikut ini berisi tentang video bagaimana cara menambahkan package library python pada pycharm IDE. Saya secara personal sangat menyukai pycharm IDE karena sangat user friendly untuk digunakan.




Dalam video diatas, saya mencoba untuk menambahkan package pyparsing pada pycharm IDE. Library ini sangat berguna untuk memparsing dan mengolah data parsing.


Selamat Mencatat!!!

Wednesday, November 11, 2015

Cara parsing data menggunakan pyparsing library pada python

Catatan berikut merupakan kelanjutan dari posting saya sebelumnya yaitu “cara mudah parsing data menggunakan python”. Catatan ini menjelaskan metode lain parsing data dengan bahasa python yaitu dengan menggunakan library pyparsing.

Sebelum mencoba catatan ini, library pyparsing harus terlebih dulu terinstall di pycharm (IDE) python. Jika belum, makan library tersebut harus diinstal terlebih dahulu. Tutorial cara menginstall library python pada pycharm akan saya bahas pada postingan selanjutnya.

Berikut adalah contoh kode parsing menggunakan pyparsing library:

from pyparsing import *

data = '$LA52.125133215643,LN21.031048525561,T101115,W120013'

number = Word(nums+'.').setParseAction(lambda t: float(t[0]))
separator = Suppress(',')
latitude = Suppress('LA') + number
longitude = Suppress('LN') + number
tanggal = Suppress('T') + number
waktu = Suppress('W') + number

line = (Suppress('$')
+ latitude
+ separator
+ longitude
+separator
+tanggal
+separator
+waktu)

print line.parseString(data)

hasil yang akan diperoleh dari eksekusi kode diatas adalah:

[52.125133215643, 21.031048525561, 101115.0, 120013.0]

catatan:

menurut saya, cara parsing menggunakan pyparsing lebih rumit dibandingkan dengan cara mudah parsing yang pertama. Namun, semua kembali ke fungsi dari program secara keseluruhan. Masing-masing metode memiliki kelebihan dan kelemahan masing-masing dan bergantung kepada seberapa kompleks program yang ingin kita buat.


 Selamat mencatat!!

Tuesday, November 10, 2015

Cara mudah parsing data menggunakan python

catatan kali ini akan menjelaskan bagaimana cara mudah untuk parsing data menggunakan python. Parsing data adalah salah satu aktifitas pemrograman yang paling sering digunakan untuk memilah-milah data informasi yang dibutuhkan oleh pengguna.

Code yang digunakan untuk parsing adalah sebagai berikut:

data = '$,LA52.125133215643,LN21.031048525561,T101115,W120013'

head, lat, lon, t, w = data.split(",")

print (lat)
print (lon)
print (t)
print (w)

copy dan paste code diatas pada software python dan coba jalankan. Hasil yang diperoleh adalah sebagai berikut:

LA52.125133215643
LN21.031048525561
T101115
W120013


Penjelasan

Data yang digunakan pada contoh kali ini cukup sederhana yaitu:

'$,LA52.125133215643,LN21.031048525561,T101115,W120013'

data ini berisikan data posisi yaitu latitude (LA), longitude (LN), tanggal (T), dan waktu (W).
pada program python yang akan dibuat, data-data tersebut akan dipisah kedalam variabel yang berbeda sehingga dapat dengan mudah diakses / diolah lebih lanjut. Variable-variable tersebut adalah lat, lon, t, dan w.


Selamat Mencatat!!!

Sunday, November 8, 2015

Tutorial dan cara menambahkan widget pelacak IP address pada blogspot

Catatan kali ini berisi tentang tutorial bagaimana cara menambahkan widget pelacak IP address pengunjung pada widget blogspot yang kita miliki. Fungsi ini sangat membantu dalam mengetahui IP pengunjung yang datang ke blog. Fungsi ini tergolong fungsi minor, tapi dapat mempercantik tampilan blog anda.

langkah-langkah menambahkan widget pelacak IP tersebut adalah sebagai berikut:

1. Masuk ke menu layout pada blogspot, lalu klik “add a gadget”
2. akan muncul jendela baru seperti dibawah ini.  pilih gadget HTML/JavaScript

Jendela penambahan widget pada blogspot
3. Masukkan title, lalu pada content masukkan kode berikut: 
<a  href="http://www.wieistmeineip.de/cometo/?en"><img  src="http://www.wieistmeineip.de/ip-address/" border="0" width="125"  height="125" alt="IP" /></a>
4. simpan, lalu refresh blog anda. Widget yang anda set akan menampilkan IP address pengunjung seperti dibawah ini

Widget tampilan IP address
Selamat Mencatat!!!

Thursday, November 5, 2015

Cara Instalasi Raspbian Jessie Operating System pada SD card untuk Raspberry Pi menggunakan Win32Disk pada Windows 10

Catatan berikut adalah catatan mengenai cara instalasi Raspbian Jesse OS pada SD card agar dapat digunakan pada Raspberry Pi di Windows 10.

Salah satu cara yang paling umum adalah menggunakan software Win32Disk. Langkah-langkah nya adalah sebagai berikut ini:

  1. Download operating system raspbian pada link berikut ini : https://www.raspberrypi.org/downloads/
  2. Extract file operating sistem dan akan dihasilkan file image dengan ekstesi file *.img
  3. Download software Win32Disk pada link berikut ini : http://sourceforge.net/projects/win32diskimager/
  4. Install software Win32Disk tersebut pada Windows OS yang kalian miliki
  5. Setelah instalasi selesai, Jalankan software, maka akan muncul tampilan software seperti di bawah ini:
Win32 Disk Imager software
  1. Masukan SD card (untuk Raspberry Pi 1) atau Mini SD (Raspberry Pi 2) pada SD card reader di komputer dan pastikan terdeteksi.
  2. Klik lambang folder pada aplikasi, lalu pilih file image yang telah di extract pada tahap 2 diatas.
  3. Pada menu Device, pastikan bahwa device yang terpilih adalah device drive SD card berada.
  4. Klik perintah Write, maka akan muncul peringatan seperti dibawah ini:

Confirm overwrite


  1. Tekan Yes, lalu program Win32Disk akan menulis SD card anda

Writing Process

  1. Software akan memberikan notifikasi setelah proses penulisan berhasil dilakukan.
  2. Sebagai tanda proses penulisan berhasil, pada menu file explorer akan muncul drive SD card berubah menjadi system boot
New Label as boot USB

Selamat mencatat!!

Wednesday, November 4, 2015

Deteksi objek lingkaran berwarna merah dengan menggunakan OpenCV dan Python 2.7

Catatan berikut ini menberikan contoh program untuk mendeteksi objek lingkaran dengan menggunakan python 2.7 dan library OpenCV.

Proses kerja dari software adalah dengan mengambil gambar video dari webcam, mengubah menjadi bentuk HSV, lalu mengatur parameter maksimal dan minimal dari masing-masing komponen tersebut. Dari pengaturan tersebut akan dideteksi satu buah atau beberapa warna tertentu (tergantung pengaturan komponen H, S, danV). Pada contoh kali ini pengaturan adalah pada warna merah.

Software akan menampilkan 3 jendela yaitu jendela video asli, jendela video hasil HSV, dan jendela video hasil akhir dari pengolahan. Untuk mendeteksi bentuk lingkaran, digunakan fungsi HoughCircle dalam library OpenCV yang telah diinstall sebelumnya.

Saat terdeteksi bentuk lingkaran berwarna merah, video akan menggambarkan lingkaran hijau pada object lingkaran. Tanda lingkaran hijau akan berubah menjadi berwarna merah jika object lingkaran merah dekat dengan kamera.

Video demo dapat dilihat dibawah ini:



Berikut adalah kode python yang saya gunakan:

__author__ = 'uits2015'
import cv2
import cv2.cv as cv
import numpy as np

kernel = np.ones((5,5),np.uint8)

# Take input from webcam
cap = cv2.VideoCapture(-1)

# Reduce the size of video to 320x240 so rpi can process faster
cap.set(3,320)
cap.set(4,240)

def nothing(x):
pass
# Creating a windows for later use
cv2.namedWindow('HSVsetup')
#cv2.namedWindow('HueComp')
#cv2.namedWindow('SatComp')
#cv2.namedWindow('ValComp')
cv2.namedWindow('closing')
cv2.namedWindow('tracking')


# Creating track bar for min and max for hue, saturation and value
# You can adjust the defaults as you like
cv2.createTrackbar('hmin', 'HSVsetup',0,500,nothing)
cv2.createTrackbar('hmax', 'HSVsetup',6,500,nothing)

cv2.createTrackbar('smin', 'HSVsetup',88,500,nothing)
cv2.createTrackbar('smax', 'HSVsetup',254,500,nothing)

cv2.createTrackbar('vmin', 'HSVsetup',117,500,nothing)
cv2.createTrackbar('vmax', 'HSVsetup',200,500,nothing)

# My experimental values
# hmn = 12 / 106
# hmx = 37 / 179
# smn = 145 / 87
# smx = 255 / 163
# vmn = 186 /102
# vmx = 255 /185


while(1):

buzz = 0
_, frame = cap.read()

#converting to HSV
hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
hue,sat,val = cv2.split(hsv)

# get info from track bar and appy to result
hmn = cv2.getTrackbarPos('hmin','HSVsetup')
hmx = cv2.getTrackbarPos('hmax','HSVsetup')


smn = cv2.getTrackbarPos('smin','HSVsetup')
smx = cv2.getTrackbarPos('smax','HSVsetup')


vmn = cv2.getTrackbarPos('vmin','HSVsetup')
vmx = cv2.getTrackbarPos('vmax','HSVsetup')

# Apply thresholding
hthresh = cv2.inRange(np.array(hue),np.array(hmn),np.array(hmx))
sthresh = cv2.inRange(np.array(sat),np.array(smn),np.array(smx))
vthresh = cv2.inRange(np.array(val),np.array(vmn),np.array(vmx))

# AND h s and v
tracking = cv2.bitwise_and(hthresh,cv2.bitwise_and(sthresh,vthresh))

# Some morpholigical filtering
dilation = cv2.dilate(tracking,kernel,iterations = 1)
closing = cv2.morphologyEx(dilation, cv2.MORPH_CLOSE, kernel)
closing = cv2.GaussianBlur(closing,(5,5),0)

# Detect circles using HoughCircles
circles = cv2.HoughCircles(closing,cv.CV_HOUGH_GRADIENT,2,120,param1=120,param2=50,minRadius=10,maxRadius=0)
# circles = np.uint16(np.around(circles))

#Draw Circles
if circles is not None:
for i in circles[0,:]:
# If the ball is far, draw it in green
if int(round(i[2])) < 30:
cv2.circle(frame,(int(round(i[0])),int(round(i[1]))),int(round(i[2])),(0,255,0),5)
cv2.circle(frame,(int(round(i[0])),int(round(i[1]))),2,(0,255,0),10)
# else draw it in red
elif int(round(i[2])) > 35:
cv2.circle(frame,(int(round(i[0])),int(round(i[1]))),int(round(i[2])),(0,0,255),5)
cv2.circle(frame,(int(round(i[0])),int(round(i[1]))),2,(0,0,255),10)
buzz = 1
# print 'round object detected!!!'

#you can use the 'buzz' variable as a trigger to switch some GPIO lines on Rpi :)
# print buzz
# if buzz:
# put your GPIO line here

#Show the result in frames
# cv2.imshow('HueComp',hthresh)
# cv2.imshow('SatComp',sthresh)
# cv2.imshow('ValComp',vthresh)
cv2.imshow('closing',closing)
cv2.imshow('tracking',frame)
cv2.imshow('HSVsetup',hsv)

k = cv2.waitKey(5) & 0xFF
if k == 27:
break

cap.release()


cv2.destroyAllWindows()

Catatan:

pendeteksian warna dapat dirubah dengan cara mengubah parameter Hmax, Hmin, Smax, Smin, Vmax, dan Vmin.

sebelum memprogram, pastikan library opencv sudah terintegrasi dengan software python yang dimiliki

dalam pengembangan program, saya menggunakan IDE Pycharm


Selamat Mencatat!!!

Script agar Blog tidak dapat di copy dan paste

Catatan kali ini berisi tentang script yang dapat digunakan untuk menonaktifkan fungsi blocking pada teks di blog kita. saya baru mencoba di blog ini (berbasis blogspot). Mungkin bisa digunakan juga pada blog yang lain.

No Piracy

Efek dari penambahan kode ini adalah, text pada blog kita tidak dapat di block dan fungsi klik kanan menjadi non aktif. Manfaatnya akan menyulitkan pelaku piracy untuk men copy paste posting yang kita buat.

caranya gampang sekali, cukup copy dan paste kode di bawah ini ke kode html blog. copy di bawah kode </body>

script nya adalah :

<script language='JavaScript1.2'>

//Disable select-text script (IE4+, NS6+)- By Andy Scott
//Exclusive permission granted to Dynamic Drive to feature script
//Visit http://www.dynamicdrive.com for this script

function disableselect(e){
return false
}

function reEnable(){
return true
}

//if IE4+
document.onselectstart=new Function (&quot;return false&quot;)

//if NS6
if (window.sidebar){
document.onmousedown=disableselect
document.onclick=reEnable
}
</script>
<script language='JavaScript'>curPage=1;
document.oncontextmenu = function(){return false}
if(document.layers) {
window.captureEvents(Event.MOUSEDOWN);
window.onmousedown = function(e){
if(e.target==document)return false;
}
}
else {
document.onmousedown = function(){return false}
}</script>

Catatan:
pada saat mengganti template, otomatis script/kode diatas akan ikut hilang beserta fungsi copy paste blocking. copy kembali kode diatas untuk mengaktifkan fungsinya.

Selamat mencatat!!!

Tuesday, November 3, 2015

Mendeteksi garis akhir (edge) dari object dengan menggunakan python dan opencv

Catatan kali ini berisi tentang program untuk mendeteksi garis akhir alias edge (entah apa namanya kalo di translate bahasa Indonesia) dari sebuah object. Software ini menggunakan python dan opencv package untuk image processingnya.

Kodenya adalah sebagai berikut:

import cv2
import sys

if __name__ == '__main__':
print __doc__

try: fn = sys.argv[1]
except: fn = 0

def nothing(*arg):
pass

#buat window
cv2.namedWindow('edge')
#buat trackbar
cv2.createTrackbar('thrs1', 'edge', 2000, 5000, nothing)
cv2.createTrackbar('thrs2', 'edge', 4000, 5000, nothing)

#face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
#eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

#ambil data video
cap = cv2.VideoCapture(-1)
while True:
flag, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thrs1 = cv2.getTrackbarPos('thrs1', 'edge')
thrs2 = cv2.getTrackbarPos('thrs2', 'edge')
edge = cv2.Canny(gray, thrs1, thrs2, apertureSize=5)
vis = img.copy()
vis /= 2
vis[edge != 0] =(0, 255, 255)
#tampilkan jendela gray dan edge
cv2.imshow('gray',gray)
cv2.imshow('edge', vis)
ch = cv2.waitKey(5)
if ch == 27:
break
cv2.destroyAllWindows()


Compile dan jalankan, maka akan muncul jendela tampilan seperti dibawah ini:



















catatan:

Tentunya ada beberapa hal yang harus dipersiapkan, diantaranya adalah webcam, dan software python itu sendiri. Karena saya menggunakan ubuntu 14.04, software python sudah disediakan oleh OS ubuntu. Saya hanya perlu webcam yang linux friendly dan menginstal package opencv ke python yang saya miliki.

Satu hal lagi, saya menggunakan pycharm sebagai IDE programing python.


 Selamat mencatat!!