PLC Siemens Sinumerik 828D untuk Mesin CNC Lathe

Posting ini untuk catatan harian teknis yang saya lakukan di Balai Mesin Perkakas, Teknik Produksi dan Otomasi (MEPPO), BPPT. Saya mendapatkan tugas dalam kerja praktek untuk memprogram PLC Sinumerik 828D milik Siemens untuk dapat berkomunikasi dengan aktuator mesin CNC Lathe yang akan dibuat oleh Balai MEPPO. Aktuator yang digunakan menggunakan Brushless Motor Servo milik Aerotech.

Read More »

Advertisements

Rekayasa Kendali Menggunakan Modul Sekuensial, PLC Siemens S7-300 dan Festo Pneumatic Plant

Postingan ini merupakan sebuah postingan panjang mengenai percobaan Praktikum Kuliah Rekayasa Kendali 1 di Jurusan D4 Teknik Mekatronika, Politeknik Elektronika Negeri Surabaya (PENS / EEPIS) dengan dosen pembimbing Bapak Eko Budi Utomo.


Pada kesempatan kali ini, saya ingin berbagi mengenai hasil praktikum saya selama satu semester di mata kuliah Rekaya Kendali 1. Inti pada mata kuliah ini adalah kita tau bagaimana cara kerja dari sebuah sistem kendali otomatis dan mampu untuk membuatnya. Pada serangkaian praktikum saat itu, saya menggunakan modul sekuensial milik Laboratorium Kontrol Mekatronika, modul Programming Logic Control (PLC) Siemens S7-300 dengan Simatic Manager dan Pemrograman jenis Ladder dan pada posttest akhir yaitu mengontrol Festo Pneumatic Distributing dan Sorting Plant.


Daftar isi pengetahuan yang telah saya terima selama mata kuliah ini sekurang kurangnya adalah sebagai berikut :

Modul Sekuensial

Penggunaan Relay

Penggunaan Timer

Penggunaan Counter

Modul PLC

Setting Up

Variabel dan Tipe Data

Melakukan Simulasi

Posttest

PLC + Festo Pneumatic Plant

Tentang Penulis


Pembaca dapat langsung klik ke judul jika tertarik dengannya atau dapat menikmati membaca serial posting ini secara bertahap dengan menklik navigasi di bawah ini. Semoga bermanfaat.

Read More »

Algoritma Perubah Gambar Menjadi Grayscale Menggunakan Python dan OpenCV

Saya mendapat tugas untuk melakukan suatu proses Image Processing selama 3 bulan. Untuk langkah awal, saya mencoba membuat gambar menjadi grayscale. Grayscale adalah dimana gambar hanya berupa array 1 dimensi yang tiap datanya bernilai 0-255 (tingkat kecerahan). Pada artikel ini saya akan menunjukan bagaimana melihat nilai array pada sebuah gambar, melakukan grayscaling dengan fungsi pada OpenCV, Algoritma 1 yang aku buat, Algoritma 2 yang aku buat dan tabel komparasi kecepatan. Semua program yang dibahas akan menggunakan bahasa Python dan library OpenCV.

Pertama tentang bagaimana mengetahui nilai yang ada pada suatu gambar. Hal pertama yang perlu diketahui adalah pada OpenCV (sejauh yang saya pelajari) terdapat 3 macam sistem pewarnaan, yaitu grayscale ( 1 dimensi array), BGR ( 3 dimensi Array) dan CMYK (4 dimensi array). Sebagai gambaran, berikut adalah contoh gambar yang aku buat (random color) menggunakan program phyton.

Gambar 8x10 Piksel
Gambar 8×10 Piksel

[[ 36 104 177]
[124 91 4]
[ 69 75 85]
[213 53 103]
[ 12 90 242]
[186 73 76]
[178 38 191]
[ 91 173 75]]

Sebagai gambaran, diatas menggunakan format BGR dan kode diatas adalah nilai array untuk baris bertama. Dimana setiap baris kode murupakan nilai representasi Blue, Green, Red dari setiap kotak. Untuk melihat lebih jelas gambar yang dimaksud silahkan di download.

Gambar 10x8 Grayscale
Gambar 8×10 Grayscale

[[ 10]
[ 37]
[ 96]
[192]
[130]
[ 57]
[118]
[ 71]]

Gambar diatas bukan hasil grayscale gambar sebelumnya, tetapi merupakan gambar random yang lain tetapi menggunakan format grayscale. Angka diatas adalah untuk baris pertama saja. Dapat dilihat bahwa angka setiap baris kode hanya terdapat satu, ini berbeda dengan format BGR. Tujuan kita dalam melakukan proses grayscale adalah mengubah gambar pertama menjadi seperti gambar kedua. Untuk dapat melakukannya, diperlukan pengetahuan tentang bagaimana mendapatkan nilai grayscale pada setiap piksel.

NB: Untuk melihat nilai array yang dikandung dalam gambar, cukup load gambar dalam sebuah variabel dan print variabel tersebut.

import cv2
import numpy

img = cv2.imread("/path/to/image.png")
print img

Menggunakan fitur pada OpenCV

Penggunaan fitur ini sangat gampang, yaitu hanya menambah parameter pada saat kita me-load gambar kedalam variabel

img = cv2.imread("/path/to/image.png", cv2.CV_LOAD_IMAGE_GRAYSCALE)

Algoritma 1

Untuk bisa membuat gambar menjadi grayscale, ada banyak algoritma yang dapat digunakan. Website ini cukup bagus untuk menjadi referensi http://www.tannerhelland.com/3643/grayscale-image-algorithm-vb6/ . Pada program yang saya buat, saya melakukan filter dengan cara luminance yaitu dengan mengkomputasi nilai dengan equation berikut ini

img[j,i] =  0.21*r[j,i] + 0.72*g[j,i] + 0.07*b[j,i]

Pada algoritma pertama, aku melakukan looping dari setiap piksel dan melakukan komputasi satu persatu. Sebelumnya, gambar aku ekstrak menjadi nilai R,G dan B saja.

srcurl = "img/image-resize.jpg"
src = cv2.imread(srcurl)
x, y = src.shape[1],src.shape[0] # take the resolution (row, column)
b, g, r = cv2.split(src) #  split image to variable b, g and r
src3 = b
i = 0
j = 0
while i != x : # if the resolution in x not complete
	while j != y :  # if the resolution in y not complete
		src3[j,i] =  0.21*r[j,i] + 0.72*g[j,i] + 0.07*b[j,i]
		j += 1
	i += 1
	j = 0
print src3

Algoritma 2

Algoritma 1 sangat lambat karena menggunakan perhitungan satu persatu dalam sebuah piksel. Saya mencoba untuk menconvert gambar 800×600 memerlukan waktu sekitar 9 detik (perhitungan timestamp, code dihapus di code diatas).  Dengan metode yang sama, saya mencoba menggunakan cara lain

x, y = src.shape[1],src.shape[0] # take the resolution (row, column)
b, g, r = cv2.split(src)
src3 =  numpy.round(0.21*r + 0.72*g + 0.07*b).astype('int') # Changed from while looping
print src3

Saya mencoba menghilangkan iterasi dan langsung mengkalkulasi sebuah array. Sebelumnya saya lupa kalau di python bisa melakukan proses seperti ini.

Perbandingan Kecepatan

Kecepatan disini dibandingakan saat proses filtering image saja. Gambar yang digunakan berukuran 800×600 piksel dan menggunakan gambar yang sama. Program dijalankan diatas mesin Intel Core 2 (T2400) @1.83GHz 2 CPU, Ram 3 GB, dan GPU ATI Mobility Radeon X1300 di Laptop IBM T60 dan menjalankan Windows 7 Professional (original).

Fitur OpenCV :

Begin  22:44:06.906000
After filtering  22:44:06.933000

Algoritma 1:

Begin  22:44:06.989000
after filtering  22:44:15.773000

Algoritma 2:

Begin  00:44:55.932000
after filtering  00:44:56.017000

Dilihat dari data tersebut, fitur OpenCV masih jauh lebih cepat dari program yang saya buat. Hal ini menunjukan kurang optimalnya program ini dan masih dapat di optimalkan di kemudian hari.

Everywhere, Simple script for searching directory and file instantly for ubuntu

Hello, Do you ever use the application Everything” on Windows? Everything is a great application for indexing file or folder. Everything store a lot of information about file/directory name and the path to the database. So if you want search a file, Everything search on his own database rather than searching manually on a whole drive.

Everything on Windows 8

So, what about linux? Everything doesn’t work on linux. But, we have a super command “locate“. Unfortunately, the cli make me weird. I can’t easily double click and see my file.

Thanks for my friend (firda) introduced me to “zenity“. A simple Dialog maker. I combine that powerful command, locate and zenity, into one bash file that i call “Everywhere“.

How to install

First, you must have locate and zenity. Open your terminal and write the command

sudo apt-get install locate zenity

Than, download my script here > https://www.dropbox.com/s/r915fw1q17eardm/everywhere?dl=0

I assume that everywhere in ~/ . Give an execute permission and run it.

~/$ chmod  +x everywhere
~/$ ./everywhere

voila, thanks for using everywhere. To open the directory, just double click the path.

Welcome dialog
Welcome dialog
List dialog
List dialog

———————————————————–

Sstt…!!

For easily access to everywhere, edit your keyboard configuration, go to shortcut and add this command

gnome-terminal -x ./everywhere

I give super+e for everywhere

Screenshot from 2014-10-25 20:09:50
Shortcut on Ubuntu

————————————————————

What does Everywhere really do?

As i said before, I just make a gui version of Locate with zenity. Locate store his database and everytime you call Everywhere, he will ask you to update the database. If you want to update, the program call “sudo updatedb” and you must give your password. Update process can take a minute or two. Sure, You can skip this process.

I’m sorry i can’t give a new algorithm to make the searching process faster and still not better than “Everything”. I think, the script can be add more feature and i hope you will help me.

Sorry for bad english, this is my first post with an international language. Any suggestion are welcome and sorry for misspell.

————————————————————————-

Reference

The Inspiration, Everything: http://www.voidtools.com/support/everything/

The main program, Locate: http://manpages.ubuntu.com/manpages/precise/man1/locate.findutils.1.html

The Simply Dialog maker, Zenity: https://help.gnome.org/users/zenity/stable/index.html.en

For bash scripting, TLDP: http://www.tldp.org/LDP/abs/html/index.html

Konversi Basis Angka yang dapat Di Jalankan pada Handheld Android dalam Bahasa C

Setelah membuat program convert yang dibahas pada artikel sebelumnya ( Source Code dan logika untuk Konversi Angka Biner, Oktal, Desimal dan Hexadesimal pada Bahasa C ), sekarang saya mencoba membuat aplikasi itu tidak hanya bisa jalan di desktop tapi juga di Android.

Pada dasarnya, Android menggunakan bahasa Java (ditambah ADT-nya). Tapi karena berbagai tool yang dikembangkan oleh para developer yang hebat, kini kita bisa menjalankan bahasa bahasa lain diatasnya seperti python, php, dan C/C++. Jadi tugas kita sebenarnya hanya mencari, Tool apa yang kita butuhkan?

Untuk C, saya menggunakan c4droid. Aplikasi berbayar (yang ingin saya beli apa daya tak punya cc) dengan gcc sebagai compilernya (CMIIW). Kesan saya pada aplikasi ini pertama sedikit meragukannya. Lalu saya coba men-copy source code permainan kotak 9 yang dulu pernah saya coba. Ternyata dapat dicompile tanpa ada halangan dan berjalan halus tanpa lag.

Setelah itu, saya mencoba mendownload aplikasi konversi angka yang juga dulu pernah saya buat. Ya, tetap berjalan mulus. Saya pun menghapus aplikasi biner <-> desimal karena saya punya yang lebih powerfull dan bikinan sendiri. Saat itu terkendala ketika mau eksekusi program, saya harus mencari file conv.c dan merun nya. Hal ini sangat merepotkan dan membuat waktu terbuang.

Ternyata, C4droid memiliki solusinya. Hasil compile tersebut dapat di ubah menjadi .apk. Dengan kata lain, program tersebut dapat dijalankan layaknya program pada umumnya.

Berikut dokumentasinya

Screenshot_2014-09-12-10-02-59 Screenshot_2014-09-12-10-03-24

Untuk mencoba program ini, silahkan mengunduh conv.apk disini

md5sum conv.apk : 47d618f4f43885754357d8301805c473

Motion Detection menggunakan webcam di ubuntu 12.04

Hari ini iseng iseng saya membongkar “kotak penyimpanan” saya. Ternyata ada satu buah webcam usb yang diberikan ayah saya beberapa bulan yang lalu. Hmm, diapakan ya?

Saya pun terpikirkan untuk membuat sebuah motion detection yang terinspirasi dari video ini

Kegunaan motion detection ini bisa difungsikan sebagai:

  • CCTV portable
  • Video Time Lapse ( walau agak maksa sih)

Di karenakan raspberry ku sedang digunakan untuk proyek lain, aku pun mencoba menggunakan komputerku yang terinstall ubuntu 12.04. Yang aku butuhkan hanya usb webcam dan usb expander ( yang buat usb menjadi panjang). IMG_20140603_134252 IMG_20140603_134258 IMG_20140603_191857

Cara membuatnya pun cukup mudah.

  1.  Pastikan webcam yang anda gunakan dapat dibaca oleh komputer anda. Coba gunakan perintah
    gstreamer-properties

    pilih video dan lakukan test pada input. Jika terjadi error, maka gantilah pilihan device.
    Screenshot from 2014-06-03 13:09:45Screenshot from 2014-06-03 13:10:05

  2. install motion
    sudo apt-get install motion
  3. buat directory (hidden) motion dan copy file configurasi dari motion
    mkdir .motion
    sudo cp /etc/motion/motion.conf ~/.motion/motion.conf
  4. ubah lah konfigurasi sesuai kebutuhan yang telah dicopy tadi.
    sudo gedit .motion/motion.conf
  5. mungkin yang akan diubah hanya pada pilihan
    width
    height
    framerate
    treshold
    target_dir
  6. selesai. Jalankan dengan menggunakan peritah
    sudo motion

    Screenshot from 2014-06-03 19:26:00

  7. jika terdapat error
    [1] Failed to open video device /dev/video0: No such file or directory

    kembali ke motion.conf dan cari videodevice. Ubah video0 menjadi yang sesuai dengan yang ada pada gstreamer-properties bagian pipeline

Nah sudah selesai, sekarang saya sedang mencari bagaimana cara menggabungkan banyak foto tersebut menjadi satu buah video yang bagus. Mungkin openshot bisa menjadi jawabannya.

Referensi:

http://ubuntuforums.org/showthread.php?t=2022316