Contents
Osiloskop adalah alat/tools untuk menganalisa sebuah sinyal elektrik. Dengan sebuah osiloskop kita dapat menganalisa besaran amplitudo, frekuensi, dan parameter lain dari sebuah sinyal baik DC maupun AC, diskrit maupun kontinyu. Tentunya tidak semua sinyal yang masuk ke osiloskop, melainkan harus disesuaikan dengan spesifikasi osiloskop tersebut. Contoh: amplitudo sinyal tegangan PLN yang besarannya sekitar 220 V peak to peak, pada beberapa osiloskop tidak dapat langsung diterima, harus dikondisikan dulu (misal diturunkan sampai level 5V, dst)
Nah, buat yang butuh menganalisa suatu sinyal elektrik namun punya budget terbatas, tidak perlu berkecil hati. Kali ini kita akan belajar membuat sebuah osiloskop sederhana untuk menganalisa sinyal tegangan dan arus AC dari soket PLN di rumah. Osiloskop ini sebenarnya saya butuhkan karena sedang membuat semacam pengondisi sinyal (transducer) untuk mengukur tegangan dan arus PLN dari arduino. Okay, kita skip dulu yang ini, kita fokus lagi ke pembuatan osiloskop sederhananya. Osiloskop ini terbuat dari Arduino dengan memanfaatkan pin analognya, jadi harap diingat bahwa tegangan (amplitudo) yang masuk maksimal adalah 5V
Alat dan bahan pembuatan osiloskop sederhana
- Arduino (bisa Uno, Nano, Mega, dst)
- Kabel jumper male-male secukupnya
Untuk software yang dibutuhkan :
Langkah-langkah pembuatan Osiloskop Arduino:
- Copy-kan sketch sbb ke Arduino. Sketch ini intinya mengambil data dari pin analog Arduino, mengirimkannya lewat port USB (serial port) ke program Processing yang ada di laptop. Jika sudah di-copy, langsung aja di-upload ke Arduino Anda
#define ANALOG_IN 0 void setup() { Serial.begin(9600); } void loop() { int val = analogRead(ANALOG_IN); Serial.write( 0xff ); Serial.write( (val >> 8) & 0xff ); Serial.write( val & 0xff ); }
- Copy-kan script sbb ke Processing. Langsung aja di-running program Processing-nya dengan menekan tombol kotak hitam di toolbar di bagian atas kiri Processing IDE
/* * Oscilloscope * Gives a visual rendering of analog pin 0 in realtime. * * This project is part of Accrochages * See http://accrochages.drone.ws * * (c) 2008 Sofian Audry ([email protected]) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ import processing.serial.*; Serial port; // Create object from Serial class int val; // Data received from the serial port int[] values; float zoom; void setup() { size(1280, 480); // Open the port that the board is connected to and use the same speed (9600 bps) port = new Serial(this, Serial.list()[0], 9600); values = new int[width]; zoom = 1.0f; smooth(); } int getY(int val) { return (int)(height - val / 1023.0f * (height - 1)); } int getValue() { int value = -1; while (port.available() >= 3) { if (port.read() == 0xff) { value = (port.read() << 8) | (port.read()); } } return value; } void pushValue(int value) { for (int i=0; i<width-1; i++) values[i] = values[i+1]; values[width-1] = value; } void drawLines() { stroke(255); int displayWidth = (int) (width / zoom); int k = values.length - displayWidth; int x0 = 0; int y0 = getY(values[k]); for (int i=1; i<displayWidth; i++) { k++; int x1 = (int) (i * (width-1) / (displayWidth-1)); int y1 = getY(values[k]); line(x0, y0, x1, y1); x0 = x1; y0 = y1; } } void drawGrid() { stroke(255, 0, 0); line(0, height/2, width, height/2); } void keyReleased() { switch (key) { case '+': zoom *= 2.0f; println(zoom); if ( (int) (width / zoom) <= 1 ) zoom /= 2.0f; break; case '-': zoom /= 2.0f; if (zoom < 1.0f) zoom *= 2.0f; break; } } void draw() { background(0); drawGrid(); val = getValue(); if (val != -1) { pushValue(val); } drawLines(); }
- Masukkan sinyal yang dianalisa ke pin analog Arduino di A0. Ingat, max tegangan 5v ya, kalo di atas itu bisa merusak Arduino Anda.
Seharusnya sekarang di layar laptop Anda akan tertampil sinyal yang masuk ke pin A0 Arduino. Selamat, sekarang Anda sudah bisa menganalisa sinyal secara sederhana sehingga dapat melakukan troubleshoot terhadap pembuatan sensor/project elektronik Anda.
Catatan: tampilan Processing-nya memang sangat-sangat sederhana. Anda dapat mengubah script-nya jika pengin lebih advanced lagi. Kalo saya sih sebenarnya pengin bikin tampilan sendiri pakai Delphi atau Android sehingga lebih interaktif. Nanti kapan-kapan saya share …
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com