Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membueat sebuah alat yang digunakan untuk mendeteksi suatu warna tertentu yang diinginkan dengan menggunakan tombol, jadi alat ini tujuan utamanya yaitu untuk mendeteksi suatu warna tertentu sesuai warna yang disimpan sebelumnya, jika warna yang dideteksi sama dengan warna yang disimpan maka akan menghidupkan relay sebagai tanda kalau warna yang deteksi sudah mencapai target, alat ini menggunakan Arduino sebagai kontroller utamanya dan sensor warna yang digunakan adalah TCS3200. selain fitur warna alat ini juga dilengkapi dengan fitur countdown timer, jadi saat waktu habis relay akan menyala, waktu kita bisa setting sesuai dengan tombol atau input yang diberikan melalui tombol, untuk lebih jelasnya berikut adalah skema dan programnya
a. Arduino Uno
b. Sensor Warna TCS3200
c. LCD + I2C
d. Program Arduino IDE
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
#define S0 7
#define S1 5
#define S2 2
#define S3 4
#define sensorOut 3
int frequency = 0;
int btset = A0;
int btup = A1;
int btdown = A2;
int btok = A3;
int btsetx = 0;
int btupx = 0;
int btdownx = 0;
int btokx = 0;
int fmerah;
int fgreen;
int fblue;
int simfmerah;
int simfgreen;
int simfblue;
int detik = 0;
int menit = 0;
int jam = 0;
int tanda = 0;
int relay = 8;
int fmerahatas;
int fmerahbawah;
int fgreenatas;
int fgreenbawah;
int fblueatas;
int fbluebawah;
int range;
int simrange;
int simjam;
int simmenit;
Membuat Alat Monitoring Kekeruhan Air (TDS) Menggunakan Turbidity Sensor ARDUINO
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat digunakan untuk monitoring suatu kekeruhan air atau cairan menggunakan sensor turbidity dengan microcontroller Arduino, alat ini sangat cocok sekali digunakan untuk aplikasi monitoring air PDAM atau sungai sehingga dapat dimanfaatkan untuk kepentingan bersama, satuan kekeruhan yang digunakan pada alat ini yaitu NTU, jadi nanti ada penjelasan mengenai cara kalibrasinya. untuk lebih jelasnya berikut adalah skema dan programnya.
a. Arduino Mega
b. Sensor Turbidity + Amplifier
c. LCD 16x2
d. Program Arduino IDE
#include "Wire.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 8, 5, 9);
// Arrays to save our results in
unsigned long start_times[300];
unsigned long stop_times[300];
unsigned long values[300];
Pada kesempatan kali ini saya akan membahas mengenai bagaimana cara mengakses sebuah device GPS GY NEO 6M V2 dengan menggunakan Arduino, jadi nanti nilai longitude dan latitude yang diterima oleh GPS akan langsung ditampilkan pada layar LCD i2c yang sudah disiapkan, pada contoh kali ini menggunakan Arduino Mega sebagai controllernya dan LCD 16x2 sebagai interface LCD. GPS ini sangat bagus digunakan meskipun harganya relatif murah dibanding dengan GPS lain seperti EM-411 namun GPS ini tetap powerfull. untuk skema dan program seperti berikut.
a. Arduino Mega
b. GPS GY NEO 6MV2
c. LCD 16x2 + i2c
d. Program Arduino IDE untuk GPS kirim serial
//VCC pada GPS modul adalah 3,3 volt
/*********************
*10 to GPS Module TX*
*09 to GPS Module RX*
*********************/
#include <SoftwareSerial.h>
#include <TinyGPS.h>
SoftwareSerial mySerial(10, 11);
TinyGPS gps;
void gpsdump(TinyGPS &gps);
void printFloat(double f, int digits = 2);
void setup()
{
// Oploen serial communications and wait for port to open:
Serial.begin(9600);
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
delay(1000);
Serial.println("uBlox Neo 6M");
Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
Serial.println("by Mikal Hart");
Serial.println();
Serial.print("Sizeof(gpsobject) = ");
Serial.println(sizeof(TinyGPS));
Serial.println();
}
void loop() // run over and over
{
bool newdata = false;
unsigned long start = millis();
// Every 5 seconds we print an update
while (millis() - start < 5000)
{
if (mySerial.available())
{
char c = mySerial.read();
//Serial.print(c); // uncomment to see raw GPS data
if (gps.encode(c))
{
newdata = true;
break; // uncomment to print new data immediately!
}
}
}
if (newdata)
{
Serial.println("Acquired Data");
Serial.println("-------------");
gpsdump(gps);
Serial.println("-------------");
Serial.println();
}
}
void gpsdump(TinyGPS &gps)
{
long lat, lon;
float flat, flon;
unsigned long age, date, time, chars;
int year;
byte month, day, hour, minute, second, hundredths;
unsigned short sentences, failed;
// On Arduino, GPS characters may be lost during lengthy Serial.print()
// On Teensy, Serial prints to USB, which has large output buffering and
// runs very fast, so it's not necessary to worry about missing 4800
// baud GPS characters.
void printFloat(double number, int digits)
{
// Handle negative numbers
if (number < 0.0)
{
Serial.print('-');
number = -number;
}
// Round correctly so that print(1.999, 2) prints as "2.00"
double rounding = 0.5;
for (uint8_t i=0; i<digits; ++i)
rounding /= 10.0;
number += rounding;
// Extract the integer part of the number and print it
unsigned long int_part = (unsigned long)number;
double remainder = number - (double)int_part;
Serial.print(int_part);
// Print the decimal point, but only if there are digits beyond
if (digits > 0)
Serial.print(".");
// Extract digits from the remainder one at a time
while (digits-- > 0)
{
remainder *= 10.0;
int toPrint = int(remainder);
Serial.print(toPrint);
remainder -= toPrint;
}
}
e. Program Arduino IDE untuk GPS tampil LCD 16x2
//vcc pada GPS modul adalah 3,3 volt
/*********************
*10 to GPS Module TX*
*09 to GPS Module RX*
*********************/
// Oploen serial communications and wait for port to open:
Serial.begin(9600);
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
delay(1000);
Serial.println("uBlox Neo 6M");
Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
Serial.println("by Mikal Hart");
Serial.println();
Serial.print("Sizeof(gpsobject) = ");
Serial.println(sizeof(TinyGPS));
Serial.println();
}
void loop() // run over and over
{
bool newdata = false;
unsigned long start = millis();
// Every 5 seconds we print an update
while (millis() - start < 5000)
{
if (mySerial.available())
{
char c = mySerial.read();
//Serial.print(c); // uncomment to see raw GPS data
if (gps.encode(c))
{
newdata = true;
break; // uncomment to print new data immediately!
}
}
}
if (newdata)
{
Serial.println("Acquired Data");
Serial.println("-------------");
gpsdump(gps);
Serial.println("-------------");
Serial.println();
}
}
void gpsdump(TinyGPS &gps)
{
long lat, lon;
float flat, flon;
unsigned long age, date, time, chars;
int year;
byte month, day, hour, minute, second, hundredths;
unsigned short sentences, failed;
void printFloat(double number, int digits)
{
// Handle negative numbers
if (number < 0.0)
{
Serial.print('-');
number = -number;
}
// Round correctly so that print(1.999, 2) prints as "2.00"
double rounding = 0.5;
for (uint8_t i=0; i<digits; ++i)
rounding /= 10.0;
number += rounding;
// Extract the integer part of the number and print it
unsigned long int_part = (unsigned long)number;
double remainder = number - (double)int_part;
Serial.print(int_part);
// Print the decimal point, but only if there are digits beyond
if (digits > 0)
Serial.print(".");
// Extract digits from the remainder one at a time
while (digits-- > 0)
{
remainder *= 10.0;
int toPrint = int(remainder);
Serial.print(toPrint);
remainder -= toPrint;
}
}
Mengakses Joystick Playstation 2 (PS2) Menggunakan ARDUINO dan LCD I2C
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang menggunakan joystick PS2 sebagai kendalinya untuk ditampilkan pada LCD Arduino, jadi sistem kali ini hanya menampilkan karakter tombol yang ditekan pada joystick misalkan menekan tombol kotak joystick maka pada layar LCD Arduiho akan bertuliskan "kotak" begitu seterusnya, aplikasi untuk sistem ini sangatlah banyak antara lain kendali robot menggunakan joystick atau alat pemidah barang menggunakan joystick dan masih bayak yang lainnya. untuk program dan skemanya seperti berikut.
PS2X ps2x; /* create PS2 Controller Class*/
byte Type = 0;
byte vibrate = 0;
int RX=0,RY=0,LX=0,LY=0;
int x = 0;
int y = 0;
int z = 0;
void setup(){
lcd.begin();
lcd.noCursor();
lcd.clear();
Serial.begin(9600);
ps2x.config_gamepad(13,11,10,12, true, true);
/* setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error*/
Type = ps2x.readType(); /* Reading type of the PS2 Ccontroller */
if(Type==1){ /* Type 1 is Duel shock controller */
}
}
void loop(){
ps2x.read_gamepad(false, vibrate); /* read controller and set large motor to spin at 'vibrate' speed */
LY = ps2x.Analog(PSS_LY); /* Reading Left stick Y axis */
LX = ps2x.Analog(PSS_LX); /* Reading Left stick X axis */
RY = ps2x.Analog(PSS_RY); /* Reading Right stick Y axis */
RX = ps2x.Analog(PSS_RX); /* Reading Right stick X axis */
if((LY <= 9)) /* standardize to 3 digit by checking less than 10 */
//Serial.print("00"); /* eg: if LY= 5 then it display as "005" in lcd */
if((LY >= 9 &&LY <= 99)) /* standardize to 3 digit by checking between 10-99 */
//Serial.print("0"); /* eg: if LY= 55 then it display as "055" in lcd */
//Serial.println(LY,DEC); /* display left analog stick Y axis */
//lcd.print(","); /* separate values using comma */
if((LX <= 9)) /* standardize to 3 digit by checking less than 10 */
//lcd.print("00"); /* eg: if LX= 5 then it display as "005" in lcd */
if((LX >= 9 && LX<=99)) /* standardize to 3 digit by checking between 10-99 */
//lcd.print("0"); /* eg: if LX= 55 then it display as "055" in lcd */
//Serial.println(LX,DEC); /* display left analog stick X axis */
//lcd.print(","); /* separate values using comma */
if((RY <= 9)) /* standardize to 3 digit by checking less than 10 */
//lcd.print("00"); /* eg: if RY= 5 then it display as "005" in lcd */
if((RY >= 9 &&RY<=99)) /* standardize to 3 digit by checking between 10-99 */
//lcd.print("0"); /* eg: if RY= 55 then it display as "055" in lcd */
//Serial.println(RY,DEC); /* display Right analog stick Y axis */
//lcd.print(","); /* separate values using comma */
if((RX <= 9)) /* standardize to 3 digit by checking less than 10 */
//lcd.print("00"); /* eg: if RX= 5 then it display as "005" in lcd */
if((RX >= 9 &&RX <= 99)) /* standardize to 3 digit by checking between 10-99 */
/* eg: if RX= 55 then it display as "055" in lcd */
Serial.println(RX,DEC); /* display Right analog stick X axis */
if(ps2x.NewButtonState()) { /* will be TRUE if any button changes state */
if(ps2x.Button(PSB_START)) /* will be TRUE as long START button is pressed */
y = y + 1;
if(ps2x.Button(PSB_SELECT)) /* will be TRUE as long SELECT button is pressed */
y = y + 2;
if(ps2x.Button(PSB_PAD_UP)) /* will be TRUE as long as UP button is pressed */
y = y + 3;
if(ps2x.Button(PSB_PAD_RIGHT)) /* will be TRUE as long as UP button is pressed */
y = y + 4;
if(ps2x.Button(PSB_PAD_LEFT)) /* will be TRUE as long as LEFT button is pressed */
y = y + 5;
if(ps2x.Button(PSB_PAD_DOWN)) /* will be TRUE as long as DOWN button is pressed */
y = y + 6;
if(ps2x.Button(PSB_L1)) /* will be TRUE as long as L1 button is pressed */
z = z + 1;
if(ps2x.Button(PSB_R1)) /* will be TRUE as long as R1 button is pressed */
z = z + 2;
if(ps2x.Button(PSB_L2)) /* will be TRUE as long as L2 button is pressed */
z = z + 3;
if(ps2x.Button(PSB_R2)) /* will be TRUE as long as R2 button is pressed */
z = z + 4;
if(ps2x.Button(PSB_L3)) /* will be TRUE as long as L3 button is pressed */
z = z + 5;
if(ps2x.Button(PSB_R3)) /* will be TRUE as long as R3 button is pressed */
z = z + 6;
if(ps2x.Button(PSB_GREEN)) /* will be TRUE as long as GREEN/Triangle button is pressed */
x = x + 1;
if(ps2x.Button(PSB_BLUE)) /* will be TRUE as long as BLUE/CROSS/X button is pressed */
x = x + 2;
if(ps2x.Button(PSB_RED)) /* will be TRUE as long as RED/Circle button is pressed */
x = x + 7;
if(ps2x.Button(PSB_PINK)) /* will be TRUE as long as PINK/Squre button is pressed */
x = x + 4;
//tombol x = 6 dan 2
//tombol kotak = 4
//tombol segitiga = 8 dan 1
//tombol bulat = 7 dan 9
//atas = 9 dan 5
//kiri = 7
//bawah = 8 dan 13
//kanan = 12 dan 6
Pada kesempatan bahagia kali ini saya akan promosi sebuah buku menarik yang dibuat khusus untuk pecinta robotika di seluruh indonesia, buku ini ditujukan bagi pemula yang ingin belajar membuat sebuah robotnya untuk pertama kali, jadi pada buku ini dijelaskan step-by-step bagaimana cara membuat sebuah robot, robot yang disediakan pada buku ini ada 4 jenis yaitu robot line tracer / line follower, robot wall avoider, robot kendali joystick PS2 dan robot kendali handphone. pada buku ini ditampilkan pula source code dan wiring pemasangannya pada Arduino dan device yang berkaitan, yang membuat buku ini menarik yaitu wiring diagram menggunakan garis warna warni yang membuat mudah orang yang ingin memahaminya. kemudian disediakan pula library dan source codenya dalam bentuk .ino, jadi saat pembelian kami juga mengirimkan source code full dari apa yang ditulis pada buku sehingga jika yang malas menulis bisa copy-paste saja, kemudian kami juga kirimkan library terkait device yang digunakan seperti library LCD I2C dan library Joystick PS2. untuk daftar isi seperti berikut, jika ingin membeli biaya Rp.150.000,- (Seratus Limapuluh Ribu Rupiah) silahkan WA (whatsapp) ke nomer 085726496643, kami akan kirimkan ke alamat email pemesan setelah transfer diterima karena buku ini berbentuk .pdf atau softcopy terima kasih
Membuat Alat Deteksi Gerakan Mata (EOG) Electrooculograph Menggunakan Arduino
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa digunakan untuk mendeteksi arah gerakan mata, jadi ketika melirik kenan atau kekiri maka Arduino dapat mendeteksinya, alat ini bisa digunakan untuk kendali kursi roda menggunakan gerakan mata atau kendali yang lainnya pada orang terkena strke yang mana tidak dapat bergerak dan hanya bisa memberikan isyarat mata saja. alat ini terdiri dari beberapa buah komponen yaitu rangkaian EOG dan Arduino. untuk lebih jelasnya berikut adalah skema dan programnya.
a. Arduino UNO
b. Modul EOG
c. IC Power Supply
d. Program Arduino IDE untuk deteksi gerakan mata
//elektroda kanan pinheader atas
//elektroda kiri pinheader bawah
int dataadc;
int adcold;
int kanan;
int kiri;
int x = 0;
Membuat Alat Monitor Daya, Tegangan 220v ZMPT101b dan Arus AC ACS712 / KWH Meter / Token Pulsa Listrik Menggunakan ATMega CV AVR dan Interface VB 6
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa digunakan untuk monitoring tegangan dan arus AC 220v 50Hz kemudian dicari daya-nya sehingga bisa dibuat KWH meter, alat ini menggunakan mikrokontroller ATMega32 dan bahasa CV AVR, prinsip kerja alat ini yaitu hanya mengambil data tegangan dan arus kemudian dicari nilai daya dengan mengkalikan nilai arus dan tegangan, selain itu alat ini juga terdapat fitur memasukkan nilai menggunakan keypad matrik3x4 sesuai kebutuhan daya yang dipakai, jika beban yang terdeteksi melebihi daya maka relay akan aktif dan mematikan sumber tegangan pada beban seperti halnya fuse, namun jika daya yang kita inputkan masih diatas dengan daya yang termonitoring maka output masih menyala. alat ini menggunakan interface VB 6 dan LCD sebagai penampilnya. untuk lebih jelasnya berikut adalah skema dan program keseluruhannya.
a. Minimum System ATMega32
b. Keypad matrik 3x4
c. RTC DS1307
d. LCD 16x2
e. Sensor Tegangan ZMPT101B
f. Sensor Arus ACS712
g. Modul Relay
h. Program CodeVision AVR
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Chip type : ATmega32
Program type : Application
AVR Core Clock frequency: 8.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 512
*****************************************************/
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
// Declare your global variables here
char buf[33];
unsigned char dd;
unsigned char mm;
unsigned char yy;
unsigned char detik;
unsigned char menit;
unsigned char jam;
int biaya;
int dataadc;
char temp[10];
char temp1[10];
char temp2[10];
char temp3[10];
char temp4[10];
int z,zm,zk,zs;
int i,k,m,s;
int values[300];
float vrms;
float p;
char temp5[10];
int dataadcx;
char tempx[10];
char temp1x[10];
char temp2x[10];
char temp3x[10];
char temp4x[10];
int zx,zmx,zkx,zsx;
int ix,kx,mx,sx;
int valuesx[300];
float irms;
Option Explicit
Dim arrdata()
Dim TotalBaca As Integer
Dim BMI As Single
Dim Keterangan As String
Const MAKSBACA = 30
Dim sHari As String
Dim aHari
Private Sub berhenti_Click()
start.Enabled = True
berhenti.Enabled = False
TimerBaca.Enabled = False
End Sub
Private Sub Command2_Click()
Unload Me
End Sub
Private Sub Form_Load()
Dim i As Byte
For i = 1 To 16
ComboCOM.AddItem (i)
Next i
aHari = Array("Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu")
End Sub
Private Sub MSComm2_OnComm()
Dim buffer As String
Dim temp As String
Dim pisah() As String
Dim i As Integer
If MSComm2.CommEvent = comEvReceive Then
buffer = MSComm2.Input
'pisah = Split(buffer, Chr$(13))
pisah = Split(buffer, "|")
On Error Resume Next
If buffer <> " " Then
With Text1
.SelStart = Len(.Text)
.SelText = buffer
End With
For i = 0 To 4
If 0 < 5 Then
Text2(i).Text = CStr(pisah(i))
End If
Next i
Else
buffer = " "
End If
End If
End Sub
ReDim arrdata(1 To MAKSBACA + 1)
For u = 1 To MAKSBACA
arrdata(u) = 0
Next
TotalBaca = 0
start.Enabled = False
berhenti.Enabled = True
TimerBaca.Enabled = True
ada_eror:
If ComboCOM.ListIndex < 1 Then
MsgBox "COM berada di Nomor : " & Err.Number & vbCrLf & Err.Description, vbCritical + vbOKOnly, "ERROR"
start.Enabled = True
berhenti.Enabled = True
ComboCOM.Text = "Pilih COM"
End If
End Sub
Private Sub Timer1_Timer()
sHari = aHari(Abs(Weekday(Date) - 1))
Text3.Text = "" & sHari & "," & Format(Date, "dd mmmm yyyy")
Text4.Text = Format(Time, "hh:mm:ss")
End Sub
Private Sub TimerBaca_Timer()
Dim strInput As String
Dim strPotong As String
Dim singleInput As Single
Dim u As Integer
strInput = MSComm2.Input
strPotong = strInput
'Text1.Text = Text1.Text + strPotong + vbCrLf
'singleInput = Val(strPotong)
'Label1.Caption = singleInput
If TotalBaca >= MAKSBACA Then
TimerBaca.Enabled = False
If MSComm2.PortOpen = True Then MSComm2.PortOpen = False
Call berhenti_Click
End If