Вы находитесь на странице: 1из 104

30 Arduino Tutorials Projects

Smart Arduino

Puput Dani
2016

30 Tutorials Project
Smart Arduino

1 |B u k u A p p r o v e

Daftar Isi
Daftar Produk
.3
Perkenalan Dengan Arduino

................................................6

Software Arduino9
Project 01 Membuat Project Pengendali Lampu Led.... 10
Project 02 Sensor Cahaya LDR dan Arduino ..12
Project 03 Buzzer dan Arduino... 14
Project 04. Arduino dan Potensiometer ...16
Project 05. LED dengan Arduino .17
Project 06. Arduino dengan Motor DC. 19
Project 07. Motor Servo dan Arduino.. 22
Project 08. Arduino and Fibration Sensor... 24
Project 09. Arduino dan Sensor Arus Yhdc SCT-013-000 ( CT Sensor ) ...26
Project 10. Sensor Sentuh ( Touch Sensor ) dengan Arduino .... 31
Project 11. Arduino Dan Ultrasonik 32
Project 12. Water Level Sensor Arduino 35
Project 13. Sensor Kelembaban Tanah dengan Arduino 36
Project 14. Arduino dan Joystick 37
Project 15. Sensor API ( Flame Sensor ) dan Arduino 3
Project 16. Sensor Gas dan Arduino ...41
Project 17. Arduino dengan PIR Sensor .... 43
Project 18. Arduino Dan RFID RC522A ....47
Project 19. Arduino dan Pulse Sensor ... 48
Project 20.Modul SIM900 dan Arduino ..54
Project 21. Arduino, Buzzer, Led and Ultrasonic Sensor .... 57
Project 22. Arduino Ethernet Shield ... 60
Project 23.Suhu, Temperature dan Intensitas Cahaya dengan arduino uno
dan sensor dht11 di lcd 16 x 2.. 65
Project 24. RTC (Real Time Clock )dan Arduino.. 75
Project 25.Arduino dan Bluetooth hc - 06

..78

Project 26. Arduino dengan KeyPad . 79


Project 27. Arduino dan Seven Segment ..81
Project 28. Arduino dan 4 Digit Seven Segment ...86
Project 29.Arduino Send & Receive Message By Sim900A dengan tampilan lcd,
buzzer dan sensor ultrasonic..89

2 |B u k u A p p r o v e

Project 30. Komunikasi Arduino Ke Android Via Bluetooth ..93


Project 31. Voice Recognition Module dan Arduino

3 |B u k u A p p r o v e

Perkenalan Dengan Arduino

Pada dasarnya board Arduino adalah tentang ATmega328. Board


Arduino

didesain

untuk

mempermudah

kita

untuk

melakukan

pemrograman dan koneksi chip ATmega328 dengan komponen


lainnya. Dengan board Arduino, baik itu Arduino UNO, Arduino Mega
2560, Arduino Nano, maupun Arduino Pro Mini, semua nya membantu
untuk menyederhanakan proses membuat rangkaian mikrokontroler.
Sebagai

contoh,

misal

anda

akan

mencoba

melakukan

pemrograman untuk membuat led berkedip setiap 1 detik. Hal ini


cukup dengan menyambungkan kabel dari led ke terminal pin I/O
yang disediakan, lakukan pemrograman di software Arduino IDE (via
Windows, Mac atau Linux), lalu upload program tersebut via USB, dan
anda sudah berhasil memprogram chip ATmega328 untuk melakukan
tugas menyalakan led berkedip setiap 1 detik.
Bagaimana jika pemrograman ATmega328 dilakukan tanpa board
Arduino dan tanpa software Arduino IDE? Perjalanan nya cukup
panjang, walaupun hanya untuk melakukan tugas sederhana yaitu
led berkedip. Anda harus merakit rangkaian minimal ATmega328 yang
terdiri dari beberapa komponen, lalu anda harus menulis program
dengan bahasa pemrograman tingkat rendah yang cukup rumit, dan
setelah itu untuk melakukan upload program ke chip anda harus
membutuhkan hardware lain yaitu hardware Programmer atau
Downloader untuk dapat berkomunikasi dengan komputer. Sebuah

4 |B u k u A p p r o v e

proses yang ribet yang akan mematahkan semangat belajar


mengenai mikrokontroler sejak awal.
Dengan board Arduino, anda dimanjakan untuk dapat dengan
mudah dan sederhana mempelajari mikrokontroler berbasis Arduino.
Contoh pada board Arduino UNO R3, pada board tersebut telah
terdapat chip mikrokontroler ATmega328 (yang dapat dicabut
pasang), terdapat chip ATmega16U untuk komunikasi USB, IC regulator
untuk memudahkan kita memberi tegangan (baik USB, baterai 9V
atau AC adaptor 9-12V), dan banyak pin I/O yang sudah disediakan
lubang kabelnya. Perhatian anda tidak lagi tersita hanya untuk koneksi
chip ATmega328, tapi bisa berkonsentrasi pada kreasi yang sedang
anda tuju. Seperti pada contoh led diatas, anda hanya tinggal
sambungkan led ke arduino, koneksikan Arduino via kabel USB, load
program "blink" via software Arduino IDE, dan selesai. Led akan
berkedip dan anda bisa tersenyum.

Apa yang bisa dilakukan oleh Arduino?


Apapun

yang

bisa

dilakukan

oleh

ATmega328.

Anda

bisa

menyambungkan dan mengontrol led, beberapa led, banyak led,


motor DC, relay, servo, modul dan sensor-sensor, serta banyak lagi
komponen lainnya. Semua tergantung pada kreativitas anda. Platform
Arduino sudah sangat populer sekarang ini, sehingga anda tidak akan
kesulitan

untuk

memperoleh

informasi,

tutorial

dan

berbagai

eksperimen yang menarik yang tersedia banyak di internet. Dengan


Arduino, dunia hardware bisa bekerja sama dengan dunia software.
Anda bisa mengontrol hardware dari software, dan hardware bisa
memberikan data kepada software. Dan semuanya bisa dilakukan
dengan relatif mudah, murah, dan menyenangkan.

5 |B u k u A p p r o v e

Contoh Project Arduino

6 |B u k u A p p r o v e

Software Arduino
Untuk menjalankan Arduino Board, maka dibutuhkan Suatu Software,
Software tersebut dinamakan dengan Arduino IDE, Macam-macam
Versinya, Arduino yang akan kita install bertipe Arduino-0019, sekarang
sampai versi Arduino 1.0.5 anda bisa melihat berbagai macam versi
Arduino IDE dan mendownload IDE Arduino dengan Gratis melalui situs
dibawah ini : http://Arduino.cc/download.

Tampilan Arduino IDE bisa anda lihat pada gambar berikut

7 |B u k u A p p r o v e

PROJECT 01
MEMBUAT PROJECT PENGENDALI LAMPU LED
Pengertian dan Manfaat
LED adalah salah satu Indikator, terdiri dari 2 Kaki, Anoda ( Kaki Panjang / + )
dan Katoda ( Kaki Pendek / - ) . anda bisa bereksperimen dengan berbagai
bentuk nyala LED.

Alat dan Bahan

Arduino Board
LED Green / Yellow / Red 5mm
USB Cable Arduino
Arduino IDE
Push Button
Resistor 220 Ohm

Contoh Implementasi
Mengendalikan Lampu LED, bisa berkedip atau On Off saat di tekan Button
Skematik dan Penyusunan / Pengkabelan

8 |B u k u A p p r o v e

Coding yang digunakan


LAMPU AWAL MATI SAAT DITEKAN MENJADI BERKEDIP
const int buttonPin = 2;
const int ledPin = 10;
const int inputPin = 2;

// the number of the pushbutton pin

// the number of the LED pin


int val =0;
// variables will change:
int buttonState = 0;
// variable for reading the pushbutton status
void setup()
{
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare pushbutton as input
}
void loop()
{
val=digitalRead(inputPin);
if(val==LOW)
{
digitalWrite(ledPin, HIGH);
// sets the LED on
delay(80);
// waits for a second
digitalWrite(ledPin, LOW);
// sets the LED off
delay(80);
// waits for a second
}
else
{
digitalWrite(ledPin, LOW);
}
}
LAMPU AWAL BERKEDIP SAAT DITEKAN MENJADI MATI
const int buttonPin = 2;
const int ledPin = 10;
const int inputPin = 2;

// the number of the pushbutton pin

// the number of the LED pin


int val =0;
// variables will change:
int buttonState = 0;
// variable for reading the pushbutton status
void setup()
{
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare pushbutton as input
}
void loop()
{
val=digitalRead(inputPin);
if(val==LOW)
{
digitalWrite(ledPin, LOW);
9 |B u k u A p p r o v e

}
else
{
digitalWrite(ledPin, HIGH);
delay(150);
digitalWrite(ledPin, LOW);
delay(150);
}
}

// sets the LED on


// waits for a second
// sets the LED off
// waits for a second

Project 02
Sensor Cahaya LDR dan Arduino

Pengertian dan Manfaat


Sensor Cahaya LDR digunakan untuk mendeteksi adanya Cahaya.
Bentuk dari sensor cahaya adalah seperti dibawah ini :

Alat dan Bahan

1x Arduino
1x Breadboard
1x Sensor cahaya LDR
1x Resistor 10k
7x Kabel jumper

Contoh Implementasi
Suatu kandang ayam memerlukan panas dari lampu pijar dengan panas yang
pas. Lampu pijar akan menyala jika penerangan sekitar kandang kurang
terkena cahaya matahari, dan lampu akan mati dengan sendirinya jika
penerangan dari cahaya matahari tercukupi.

10 |B u k u A p p r o v e

Skematik dan Penyusunan / Pengkabelan

Code yang digunakan untuk LDR Arduino


int LDR= A2;
// membuat variabel LDR untuk pin A2
int LED= 13;
// membuat variabel LED untuk pin 13
int nilaiLDR= 0; // variabel nilai awal untuk nilaiLDR
void setup(){
pinMode(LED, OUTPUT);
// menentukan LED menjadi OUTPUT
Serial.begin(9600);
// komunikasi Arduino ke Komputer
}
void loop(){
nilaiLDR= analogRead(LDR);
// menyimpan nilai yang dibaca dari LDR
ke variabel nilaiLDR
Serial.print("NilaiLDR= ");
// menampilkan teks nilaiLDR=
Serial.println(nilaiLDR);
// menampilkan nilai dari
nilaiLDR
if(nilaiLDR < 500) {
// jika nilai dari LDR kurang dari 500
digitalWrite(LED, HIGH);
// lampu LED menyala
}
else {
// jika tidak
digitalWrite(LED, LOW);
// lampu LED mati
}
}

11 |B u k u A p p r o v e

Project 03
Buzzer dan Arduino
Pengertian dan Manfaat
Buzzer digunakan sebagai pembuat Output berupa Suara.
Alat dan Bahan

Buzzer 5v
Arduino Board

Contoh Implementasi
Membuat Suara / Sound berupa Melody / DO RE MI dengan Buzzer
Skematik dan Penyusunan / Pengkabelan

Coding yang digunakan


int melody[] = { C, b, g, C, b,
e, R, C, c, g, a, C };
int beats[] = { 16, 16, 16, 8, 8, 16, 32, 16, 16, 16, 8, 8 };
int MAX_COUNT = sizeof(melody) / 2; // Melody length, for looping.
// Set overall tempo
long tempo = 10000;
// Set length of pause between notes
int pause = 1000;
// Loop variable to increase Rest length
int rest_count = 100; //<-BLETCHEROUS HACK; See NOTES
// Initialize core variables
int tone_ = 0;
int beat = 0;
long duration = 0;
// PLAY TONE ==============================================
// Pulse the speaker to play a tone for a particular duration
void playTone() {
long elapsed_time = 0;
if (tone_ > 0) { // if this isn't a Rest beat, while the tone has
// played less long than 'duration', pulse speaker HIGH and LOW
while (elapsed_time < duration) {
digitalWrite(speakerOut,HIGH);
delayMicroseconds(tone_ / 2);
// DOWN
12 |B u k u A p p r o v e

digitalWrite(speakerOut, LOW);
delayMicroseconds(tone_ / 2);
// Keep track of how long we pulsed
elapsed_time += (tone_);
}
}
else { // Rest beat; loop times delay
for (int j = 0; j < rest_count; j++) { // See NOTE on rest_count
delayMicroseconds(duration);
}
}
}
// LET THE WILD RUMPUS BEGIN =============================
void loop() {
// Set up a counter to pull from melody[] and beats[]
for (int i=0; i<MAX_COUNT; i++) {
tone_ = melody[i];
beat = beats[i];
duration = beat * tempo; // Set up timing
playTone();
// A pause between notes...
delayMicroseconds(pause);
if (DEBUG) { // If debugging, report loop, tone, beat, and
duration
Serial.print(i);
Serial.print(":");
Serial.print(beat);
Serial.print(" ");
Serial.print(tone_);
Serial.print(" ");
Serial.println(duration);
}
}
}

13 |B u k u A p p r o v e

Project 04.
Arduino dan Potensiometer
Pengertian dan Manfaat
Dalam Peralatan Elektronik, sering ditemukan Potensiometer yang berfungsi
sebagai pengatur Volume di peralatan Audio / Video seperti Radio, Walkie
Talkie, Tape Mobil, DVD Player dan Amplifier. Potensiometer juga sering
digunakan dalam Rangkaian Pengatur terang gelapnya Lampu (Light Dimmer
Circuit) dan Pengatur Tegangan pada Power Supply (DC Generator).
Implementasi di Arduino, Potensiometer digunakan untuk mengatur Brightness
dari LCD yang digunakan sebagai Indikator atau Output.
Alat dan Bahan

Arduino Board
Potensiometer

Contoh Implementasi
Anda bisa mengontrol Lampu LED sebagai suatu indikator

Skematik dan Penyusunan / Pengkabelan

Code yang digunakan


int potPin = 2;
int ledPin = 13;
int val = 0;
sensor

// select the input pin for the potentiometer


// select the pin for the LED
// variable to store the value coming from the

void setup() {
pinMode(ledPin, OUTPUT);
}

// declare the ledPin as an OUTPUT

void loop() {
val = analogRead(potPin);
digitalWrite(ledPin, HIGH);
delay(val);
digitalWrite(ledPin, LOW);
delay(val);
}

14 |B u k u A p p r o v e

//
//
//
//
//

read
turn
stop
turn
stop

the
the
the
the
the

value from the sensor


ledPin on
program for some time
ledPin off
program for some time

Project 05.
LED dengan Arduino

Pengertian dan Manfaat

LCD Digunakan sebagai Indikator


Digital .

yang menunjukkan suatu output berupa

Alat dan Bahan


Arduino Board
LCD 16x2

Contoh Implementasi
Menampilkan teks 2 baris

Skematik dan Penyusunan / Pengkabelan

Code yang digunakan adalah sebagai berikut


// ----------------------------------------------// Contoh untuk menampilkan tulisan di lcd display
// ----------------------------------------------#include <LiquidCrystal.h>

15 |B u k u A p p r o v e

const int PIN_RS = 12;


const int PIN_E = 11;
const int PIN_DB_4 = 7;
const int PIN_DB_5 = 6;
const int PIN_DB_6 = 5;
const int PIN_DB_7 = 4;
// Buat objek
LiquidCrystal lcd(PIN_RS, PIN_E, PIN_DB_4, PIN_DB_5, PIN_DB_6, PIN_DB_7);
void setup()
{
// Tentukan ukuran LCD
lcd.begin(16, 2);
}
void loop()
{
lcd.clear();
lcd.print("Balonku ada lima");
lcd.setCursor(0, 1);
lcd.print("Beraneka warna");
delay(5000);
lcd.clear();
lcd.print("Meletus satu");
lcd.setCursor(0, 1);
lcd.print("Tinggal 4-lah");
delay(5000);
}

16 |B u k u A p p r o v e

Project 06.
Arduino dengan Motor DC
Pengertian dan Manfaat
Fungsi Motor DC ini salah satunya digunakan untuk menggerakkan roda mobil
mainan.

Alat dan Bahan


Komponen komponen yang dibutuhkan :

1 x L298 bridge IC
1 x DC motor
1 x Arduino Mega2560 / Arduino UNO
1 x breadboard
10 x jumper wires

Contoh Implementasi
Anda bisa membuat percobaan untuk mengatur Putaran Motor DC
Skematik dan Penyusunan / Pengkabelan

Program yang digunakan


const int pwm = 2 ;
const int in_1 = 8 ;
const int in_2 = 9 ;

//initializing pin 2 as pwm

//For providing logic to L298 IC to choose the direction of the DC


motor
void setup()
17 |B u k u A p p r o v e

{
pinMode(pwm,OUTPUT) ;
pinMode(in_1,OUTPUT) ;
pinMode(in_2,OUTPUT) ;
}

//we have to set PWM pin as output


//Logic pins are also set as output

void loop()
{
//For Clock wise motion , in_1 = High , in_2 = Low
digitalWrite(in_1,HIGH) ;
digitalWrite(in_2,LOW) ;
analogWrite(pwm,255) ;
/*setting pwm of the motor to 255
we can change the speed of rotaion
by chaning pwm input but we are only
using arduino so we are using higest
value to driver the motor */
//Clockwise for 3 secs
delay(3000) ;
//For brake
digitalWrite(in_1,HIGH) ;
digitalWrite(in_2,HIGH) ;
delay(1000) ;
//For Anti Clock-wise motion - IN_1 = LOW , IN_2 = HIGH
digitalWrite(in_1,LOW) ;
digitalWrite(in_2,HIGH) ;
delay(3000) ;
//For brake
digitalWrite(in_1,HIGH) ;
digitalWrite(in_2,HIGH) ;
delay(1000) ;
}

Atau bisa menggunakan Code ini

// -------------------------------------// Contoh untuk mengatur putaran motor DC


18 |B u k u A p p r o v e

// -------------------------------------const int PIN_PWM = 11;


void setup()
{
pinMode(PIN_PWM, OUTPUT);
}
void loop()
{
// Kecepatan penuh
analogWrite(PIN_PWM, 255);
delay(5000);
// Kecepatan sedang
analogWrite(PIN_PWM, 128);
delay(5000);
// Motor dimatikan
analogWrite(PIN_PWM, 0);
delay(5000);
}

19 |B u k u A p p r o v e

Project 07
Motor Servo dan Arduino

Pengertian dan Manfaat


Motor Servo digunakan menjadi bagian penggerak misalnya diterapkan
pada Robot atau pada Roda Mobil-mobilan.

Alat dan Bahan

Arduino Board
Motor Servo
Wire

Contoh Implementasi
Anda bisa mengatur Arah Putar Servo sampai 200 derajat

Skematik dan Penyusunan / Pengkabelan

20 |B u k u A p p r o v e

Source Code yang digunakan


// -----------------------------------// Contoh untuk mengontrol motor servo
// -----------------------------------#include <Servo.h>
const int PIN_SERVO

= 11;

// Buat objek
Servo motorServo;
void setup()
{
// Motor servo dihubungkan ke pin servo
motorServo.attach(PIN_SERVO);
}
void loop()
{
motorServo.write(0);
delay(2000);
motorServo.write(90);
delay(2000);
motorServo.write(135);
delay(2000);
}

21 |B u k u A p p r o v e

PROJECT 08
ARDUINO AND FIBRATION SENSOR

Pengertian dan Manfaat


Fibration Sensor adalah Sensor yang digunakan untuk mendeteksi
adanya getaran, outputnya bisa berupa Digital High atau low ( 1 atau 0 ).
Alat dan Bahan
Arduino Board
Fibration Sensor

Contoh Implementasi
Melakukan Percobaan dengan membuat suatu getaran disekitar Sensor
dan lihat pada Serial Monitor.
Skematik dan Penyusunan / Pengkabelan

Code Fibration Sensor


const int vibrationSensorPin = 2; // Vibration Sensor di
hubungkan ke Pin 2
int vibrationSensorState = 0; // Status saat pertama mulai = 0
int indikatorHijau = 3; // Set Pin 3 untuk LED Hijau
int indikatorMerah = 4; // Set Pin 4 untuk LED Merah
int indikatorBuzzer = 5; // Set Pin 5 untuk Buzzer
22 |B u k u A p p r o v e

void setup() {
Serial.begin(9600);
pinMode(vibrationSensorPin,
INPUT);
//
Jadikan
Vibration
sensor sebagai input
pinMode(indikatorHijau, OUTPUT); // Jadikan indikatorHijau
sebagai Output
pinMode(indikatorMerah, OUTPUT); // Jadiikan indikatorMerah
sebagai Output
pinMode(indikatorBuzzer, OUTPUT); // Jadikan indikatorBuzzer
sebagai Output
}
void loop() {
vibrationSensorState = digitalRead(vibrationSensorPin);
if (vibrationSensorState == HIGH) { // Jika ada getaran di
sensor = HIGH
digitalWrite(indikatorHijau, HIGH); // Aktifkan indikator
Hijau
digitalWrite(indikatorMerah, LOW); // Matikan indikator
Merah
digitalWrite(indikatorBuzzer,
HIGH);
//
//
Aktifkan
indikator Buzzer
Serial.println("Ada Pergetaran gan!");
delay(8000); // Tunda 8 detik
digitalWrite(indikatorHijau, LOW); // Matikan indikator
Hijau
digitalWrite(indikatorMerah, HIGH); // Aktifkan indikator
Merah
delay(100); // Delay untuk menunggu getaran selanjutnya
}
else {
digitalWrite(indikatorHijau, LOW); // Matikan indikator
Hijau
digitalWrite(indikatorMerah, HIGH); // Aktifkan indikator
Merah
digitalWrite(indikatorBuzzer, LOW); // Matikan indikator
Buzzer
Serial.println("Menunggu getaran...");
delay(1000);
}
}

23 |B u k u A p p r o v e

Project.09
Arduino dan Sensor Arus Yhdc SCT-013-000 ( CT Sensor )

Pengertian dan Manfaat


CT-Sensor
digunakan untuk membaca arus listrik yang
mengalir melalui kawat tembaga.
Alat dan Bahan
1 CT sensor YHDC SCT-013-000
1 Burden resistor 18 Ohms if supply voltage is 3.3V, or 33
Ohms if supply voltage is 5V.
2 10k Ohm resistors (or any equal value resistor pair up to
470k Ohm)
1 10uF capacitor
Contoh Implementasi
Anda bisa membaca arus listrik pada setiap output kabel listrik
dari tempat yang berbeda beda.

24 |B u k u A p p r o v e

Skematik dan Penyusunan / Pengkabelan

25 |B u k u A p p r o v e

Program Arduino dan CT Sensor


#include "EmonLib.h"
EnergyMonitor emon1;

// Include Emon Library


// Create an instance

void setup()
{
Serial.begin(9600);
emon1.current(1, 111.1);

// Current: input pin, calibration.

}
void loop()
{
double Irms = emon1.calcIrms(1480);
Serial.print(Irms*230.0);
Serial.print(" ");
Serial.println(Irms);

// Calculate Irms only


// Apparent power
// Irms

Sebelumnya kita download Library milik CT Sensor bernama EmonLib.h


Bisa didownload di https://github.com/openenergymonitor/EmonLib
Emonlib.h
/*
Emon.h - Library for openenergymonitor
Created by Trystan Lea, April 27 2010
GNU GPL
modified to use up to 12 bits ADC resolution (ex. Arduino Due)
by boredman@boredomprojects.net 26.12.2013
Low Pass filter for offset removal replaces HP filter 1/1/2015 - RW
*/
#ifndef EmonLib_h
#define EmonLib_h
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
// define theoretical vref calibration constant for use in readvcc()
// 1100mV*1024 ADC steps http://openenergymonitor.org/emon/node/1186
// override in your code with value for your specific AVR chip
// determined by procedure described under "Calibrating the internal
reference voltage" at
// http://openenergymonitor.org/emon/buildingblocks/calibration
#ifndef READVCC_CALIBRATION_CONST
#define READVCC_CALIBRATION_CONST 1126400L
#endif
// to enable 12-bit ADC resolution on Arduino Due,
// include the following line in main sketch inside setup() function:
// analogReadResolution(ADC_BITS);

26 |B u k u A p p r o v e

// otherwise will default to 10 bits, as in regular Arduino-based


boards.
#if defined(__arm__)
#define ADC_BITS
12
#else
#define ADC_BITS
10
#endif
#define ADC_COUNTS

(1<<ADC_BITS)

class EnergyMonitor
{
public:
void
voltage(unsigned
int
_inPinV,
double
_PHASECAL);
void current(unsigned int _inPinI, double _ICAL);

_VCAL,

double

void voltageTX(double _VCAL, double _PHASECAL);


void currentTX(unsigned int _channel, double _ICAL);
void calcVI(unsigned int crossings, unsigned int timeout);
double calcIrms(unsigned int NUMBER_OF_SAMPLES);
void serialprint();
long readVcc();
//Useful value variables
double realPower,
apparentPower,
powerFactor,
Vrms,
Irms;
private:
//Set Voltage and current input pins
unsigned int inPinV;
unsigned int inPinI;
//Calibration coefficients
//These need to be set in order to obtain accurate results
double VCAL;
double ICAL;
double PHASECAL;
//------------------------------------------------------------------------------------// Variable declaration for emon_calc procedure
//------------------------------------------------------------------------------------int sampleV;
//sample_ holds
the raw analog read value
int sampleI;
double lastFilteredV,filteredV;
analog value minus the DC offset
double filteredI;
double offsetV;
double offsetI;
double phaseShiftedV;
calibrated phase shifted voltage.

//Filtered_ is the raw


//Low-pass filter output
//Low-pass filter output
//Holds the

double sqV,sumV,sqI,sumI,instP,sumP;
sum = Sum, inst = instantaneous

//sq = squared,

int startV;
voltage at start of sample window.

//Instantaneous

27 |B u k u A p p r o v e

boolean lastVCross, checkVCross;


measure number of times threshold is crossed.
};
#endif

28 |B u k u A p p r o v e

//Used to

Project 10
Sensor Sentuh ( Touch Sensor ) dengan Arduino

Pengertian dan Manfaat


Suatu rangkaian disebut dengan rangkaian sensor apabila rangkaian tersebut
dapat merasakan suatu perubahan lingkungan. Contohnya disebut dengan
rangkaian sensor sentuh apabila rangkaian tersebut dapat merasakan
sentuhan atau tekanan yang diterimanya.
Alat dan Bahan

Arduino Board
Touch Sensor

Contoh Implementasi
Sensor sentuh akan memberikan output digital saat mendapatkan sentuhan

29 |B u k u A p p r o v e

Coding yang digunakan


// ------------------------------// Contoh penggunaan sensor sentuh
// ------------------------------const int PIN_DIGITAL = 12;
void setup()
{
Serial.begin(9600);
pinMode(PIN_DIGITAL, INPUT);
}
void loop()
{
int d0 = digitalRead(PIN_DIGITAL);
Serial.println(d0);
delay(100);
}

PROJECT 11.
Arduino Dan Ultrasonik

Pengertian dan Manfaat


Sensor Ultrasonik adalah sensor yang digunakan untuk mengukur
jarak tertentu dan memberikan output berupa data digital.

Alat dan Bahan


Sensor Ultrasonik
Arduino
Wire

Contoh Implementasi
Anda bisa mengatur jarak tertentu dengan Ultrasonik dan diberi
indikator buzzer saat memenuhi jarak tertentu sesuai kebutuhan.

30 |B u k u A p p r o v e

Skematik dan Penyusunan / Pengkabelan

Code yang digunakan :


/* Ping))) Sensor
This sketch reads a PING))) ultrasonic rangefinder and returns the
distance to the closest object in range. To do this, it sends a
pulse
to the sensor to initiate a reading, then listens for a pulse
to return. The length of the returning pulse is proportional to
the distance of the object from the sensor.
The circuit:
* +V connection of the PING))) attached to +5V
* GND connection of the PING))) attached to ground
* SIG connection of the PING))) attached to digital pin 7
http://www.arduino.cc/en/Tutorial/Ping
created 3 Nov 2008
by David A. Mellis
modified 30 Aug 2011
by Tom Igoe
This example code is in the public domain.
*/
// this constant won't change.
// of the sensor's output:
const int pingPin = 7;

It's the pin number

void setup() {
// initialize serial communication:
Serial.begin(9600);
}
void loop() {
// establish variables for duration of the ping,
// and the distance result in inches and centimeters:
long duration, inches, cm;

31 |B u k u A p p r o v e

// The PING))) is triggered by a HIGH pulse of 2 or more


microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
// The same pin is used to read the signal from the PING))): a HIGH
// pulse whose duration is the time (in microseconds) from the
sending
// of the ping to the reception of its echo off of an object.
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);
// convert the time into a distance
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}
long microsecondsToInches(long microseconds) {
// According to Parallax's datasheet for the PING))), there are
// 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
// second). This gives the distance travelled by the ping, outbound
// and return, so we divide by 2 to get the distance of the
obstacle.
// See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
return microseconds / 74 / 2;
}
long microsecondsToCentimeters(long microseconds) {
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}

32 |B u k u A p p r o v e

Project 12
Water Level Sensor Arduino
Water Level Sensor adalah Sensor yang digunakan untuk
curah hujan.

mengukur tingkat

Untuk menguji bisa ditempatkan disuatu wadah datar. Anggaplah berada di


tanah, apabila terdapat air atau bercak air maka sensor akan memunculkan
pada serial port berupa teks atau keterangan tidak hujan atau hujan, apabila
terdapat air.

Apabila dikonekkan dengan Arduino, maka pengkabelannya seperti


dibawah ini

Programablenya seperti dibawah ini.


// -----------------------------// Contoh penggunaan sensor air
//
untuk mendeteksi hujan
// -----------------------------const int PIN_A0 = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
33 |B u k u A p p r o v e

{
// Baca sensor
int dataSensor = analogRead(PIN_A0);
Serial.print(dataSensor);
// Cek ambang
if (dataSensor < 300)
Serial.println(". Hujan deras");
else
if (dataSensor < 500)
Serial.println(". Hujan biasa");
else
Serial.println(". Tidak hujan");
delay(100);
}

Project 13
Sensor Kelembaban Tanah dengan Arduino
Sensor Higrometer digunakan untuk mengukur suatu kelembaban tanah, bisa
diaplikasikan kesuatu bidang misalnya Pertanian.

Apabila dikoneksikan dengan Arduino, maka ada 3 inputan disini yaitu AREF,
GND dan A0.

Source Codenya adalah seperti dibawah ini :


// ------------------------------------------34 |B u k u A p p r o v e

// Contoh penggunaan sensor kelembaban tanah


// ------------------------------------------const int PIN_ANALOG = 0;
const int PIN_DIGITAL = 12;
void setup() {
Serial.begin(9600);
pinMode(PIN_DIGITAL, INPUT);
}
void loop() {
int a0 = analogRead(PIN_ANALOG);
int d0 = digitalRead(PIN_DIGITAL);
Serial.print(d0);
Serial.print(" - ");
Serial.println(a0);
delay(1000);
}

Project 14.
Arduino dan Joystick

Fungsi Joystick digunakan untuk bermain game, Joystick digunakan untuk


mengubah posisi kiri, kanan, atas dan bawah atau titik X, Y dan Z.

35 |B u k u A p p r o v e

Code Programnya seperti berikut :


int sensorPin = 5;
int value = 0;
void setup() {
pinMode(7, OUTPUT);
Serial.begin(9600);
}
void loop() {
value = analogRead(0);
Serial.print("X:");
Serial.print(value, DEC);
value = analogRead(1);
Serial.print(" | Y:");
Serial.print(value, DEC);
value = digitalRead(7);
Serial.print(" | Z: ");
Serial.println(value, DEC);
delay(100);
}
Referring Sample Code :
int JoyStick_X = 0; //x
int JoyStick_Y = 1; //y
int JoyStick_Z = 3; //key
void setup()
{
pinMode(JoyStick_X, INPUT);
pinMode(JoyStick_Y, INPUT);
pinMode(JoyStick_Z, INPUT);
Serial.begin(9600); // 9600 bps
}
void loop()
{
int x,y,z;
x=analogRead(JoyStick_X);
y=analogRead(JoyStick_Y);
z=digitalRead(JoyStick_Z);
Serial.print(x ,DEC);
Serial.print(",");
Serial.print(y ,DEC);
Serial.print(",");
Serial.println(z ,DEC);
delay(100);
}

36 |B u k u A p p r o v e

Project 15
Sensor API ( Flame Sensor ) dan Arduino
Pengertian dan Manfaat
Sensor Api ini digunakan untuk mendeteksi Api bisa sampai 20 -100 cm,
sumber tegangan yang dibutuhkan adalah 3,3 v 5 v.

Contoh Implementasi :
Sensor APi bisa digunakan untuk aplikasi Robot pendeteksi Api, atau bisa
dipasang di tempat-tempat yang tidak boleh ada percikan api seperti di
SPBU, mall atau di kantor-kantor.

Skematik / Pengkabelan dengan Arduino

Berikut adalah Wiring Flame Sensor dan Arduino, terdapat 3 Output Flame
Sensor, yaitu GND, VCC dan Out Pin Analog.

37 |B u k u A p p r o v e

Code Program yang digunakan


// ---------------------------// Contoh penggunaan sensor api
// ---------------------------const int PIN_ANALOG = 0;
const int PIN_DIGITAL = 12;
void setup()
{
Serial.begin(9600);
pinMode(PIN_DIGITAL, INPUT);
}
void loop()
{
int a0 = analogRead(PIN_ANALOG);
int d0 = digitalRead(PIN_DIGITAL);
Serial.print(d0);
Serial.print(" - ");
Serial.println(a0);
delay(1000);
}

38 |B u k u A p p r o v e

Project 16.
Sensor Gas dan Arduino
Pengertian dan Manfaat
Sensor Gas MQ2 adalah Sensor yang digunakan untuk mendeteksi
adanya gas didalam ruangan yang tertutup, misalnya adalah LPG Gas.

Contoh Implementasi :
Sensor Gas MQ2 digabung dengan Arduino dan Buzzer, bisa juga
ditambahkan dengan LCD Misalnya 16x2 untuk mendeteksi kebocoran
gas LPG. Ini sangat bermanfaat bagi masyarakat.

Diimplementasikan ke Ruangan khusus misalnya di Kabin PESAWAT atau


tempat-tempat yang Non Asap Rokok, misalnya Rumah Sakit atau
Bandara. Kita menggunakan MQ-2 Sensor sebagai detector.
Skematik dan Penyusunan / Pengkabelan dengan Arduino Board

39 |B u k u A p p r o v e

Coding yang digunakan untuk Sensor MQ 2


// ------------------------------// Contoh penggunaan sensor MQ-2
//
untuk mendeteksi gas
// ------------------------------const int PIN_ANALOG = 0;
const int PIN_DIGITAL = 12;
void setup()
{
Serial.begin(9600);
pinMode(PIN_DIGITAL, INPUT);
}
void loop()
{
int a0 = analogRead(PIN_ANALOG);
int d0 = digitalRead(PIN_DIGITAL);
Serial.print(d0);
Serial.print(" - ");
Serial.println(a0);
delay(1000);
}
Coding yang digunakan jika ditambahkan LED
// --------------------------------// Contoh penggunaan sensor MQ-2
//
dengan LED sebagai indikator
//
adanya masalah
// --------------------------------const int PIN_LED = 12;
const int PIN_ANALOG = 0;
const int AMBANG = 128;
void setup()
{
Serial.begin(9600);
pinMode(PIN_LED, OUTPUT);
}
void loop()
{
int a0 = analogRead(PIN_ANALOG);
Serial.println(a0);
if (a0 >= AMBANG)
{
// Berikan peringatan
Serial.println("LED");
digitalWrite(PIN_LED, HIGH);
delay(500);
digitalWrite(PIN_LED, LOW);
}
else
delay(500);
}

40 |B u k u A p p r o v e

Project 17.
Arduino dengan PIR Sensor

PIR adalah Singkatan dari Passive InfraRed, digunakan Untuk mengetahui


Gerakan atau mendeteksi Gerakan Hewan atau Manusia.

41 |B u k u A p p r o v e

Koneksi PIN nya sebagai berikut :


PIR Pin + connects to Arduino +5
PIR Pin - connects to Arduino gnd
PIR Pin out connects to Arduino Digital 2
Kode Arduino yang digunakan untuk PIR Sensor :
int motion_1 = 2;
int light_1 = 13;
void setup(){
pinMode (motion_1,INPUT);
pinMode (light_1, OUTPUT);
}
void loop (){
digitalWrite (light_1,LOW);
delay(1000); //this delay is to let the sensor settle
down before taking a reading
int sensor_1 = digitalRead(motion_1);
if (sensor_1 == HIGH){
digitalWrite(light_1,HIGH);
delay(500);
digitalWrite(light_1,LOW);
delay(500);
}
}

Bagaimana jika kita modifikasi dengan menambah Resistor 10K Ohm

Gambar Sensor PIR dengan ditambah Resistor 10K Ohm


PIR Pin + connects to Arduino +5
one side of the 10K Resistor Connects to Arduino +5
PIR Pin - connects to Arduino gnd
Other side of 10K Resistor connects to PIR Pin Alarm
PIR Pin Alarm connects to Arduino Digital 2

42 |B u k u A p p r o v e

Kode Program yang digunakan

int motion_1 = 2;
int light_1 = 13;
void setup(){
pinMode (motion_1,INPUT);
pinMode (light_1, OUTPUT);
}
void loop (){
digitalWrite (light_1,LOW);
delay(1000); //this delay is to let the sensor settle
down before taking a reading
int sensor_1 = digitalRead(motion_1);
if (sensor_1 == LOW){
digitalWrite(light_1,HIGH);
delay(500);
digitalWrite(light_1,LOW);
delay(500);
}
}

Use an Arduino to send an email, whenever movement is


detected with a PIR sensor.
int pirPin = 7;
int minSecsBetweenEmails = 60; // 1 min
long lastSend = -minSecsBetweenEmails * 1000l;
void setup()
{
pinMode(pirPin, INPUT);
Serial.begin(9600);
}
void loop()
{
long now = millis();
if (digitalRead(pirPin) == HIGH)
{
if (now > (lastSend + minSecsBetweenEmails * 1000l))
{
Serial.println("MOVEMENT");
lastSend = now;
}
else
{
Serial.println("Too soon");
}
}
delay(500);
}

43 |B u k u A p p r o v e

Percobaan :
Tulislah Source Code pada Arduino IDE Berikut ini :
// ------------------------------------------// Contoh penggunaan detektor gerakan
// ------------------------------------------const int PIN_MOTION = 12;
int nilai;
void setup()
{
Serial.begin(9600);
pinMode(PIN_MOTION, INPUT);
}
void loop()
{
nilai = digitalRead(PIN_MOTION);
if (nilai == HIGH) {
Serial.println("HIGH");
}
else {
Serial.println("LOW");
}
delay(1000);
}
Lakukan proses Verifikasi kemudian Upload, untuk hasilnya bisa dilihat di serial
monitor :

44 |B u k u A p p r o v e

Keterangan : Akan Low jika tidak ada gerakan, dan apabila ada gerakan
maka High.

PROJECT 18
ARDUINO DAN RFID RC522A

RFID (Radio Frequency Identification) atau Identifikasi Frekuensi Radio adalah


sebuah metode identifikasi dengan menggunakan sarana yang disebut label
RFID atau transponder untuk menyimpan dan mengambil data jarak jauh. Label
atau kartu RFID adalah sebuah benda yang bisa dipasang atau dimasukkan di
dalam sebuah produk, hewan atau bahkan manusia dengan tujuan untuk
identifikasi menggunakan gelombang radio. Label RFID berisi informasi yang
disimpan secara elektronik dan dapat dibaca hingga beberapa meter
jauhnya. Sistem pembaca RFID tidak memerlukan kontak langsung seperti
sistem pembaca kode batang (barcode).

45 |B u k u A p p r o v e

Keterangan Pin yang digunakan :

Connection of RFID to pin Intel Galileo:


Reset = Pin 5
SDA = Pin 10
MOSI = Pin 11
MISO = Pin 12
SCK = Pin 13
GND = GROUND
3.3 = 3.3v
Connection of LCD to pin Intel Galileo:
VSS & RW = GND
Vcc = 5v
Vo = Potentiometer (this is the middle pin of the 10k potentiometer)
RS = Pin 9
E = Pin 8
D4 = Pin 7
D5 = Pin 4
46 |B u k u A p p r o v e

D6 = Pin 3
D7 = Pin 2
Kode yang digunakan :
/*
* MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH
TAGS SPI W AND R BY COOQROBOT.
* The library file MFRC522.h has a wealth of useful info. Please read
it.
* The functions are documented in MFRC522.cpp.
*
* Based on code Dr.Leong
( WWW.B2CQSHOP.COM )
* Created by Miguel Balboa (circuitito.com), Jan, 2012.
* Rewritten by Sren Thing Andersen (access.thing.dk), fall of 2013
(Translation to English, refactored, comments, anti collision, cascade
levels.)
* Released into the public domain.
*
* Sample program showing how to read data from a PICC using a MFRC522
reader on the Arduino SPI interface.
*---------------------------------------------------------------------------- empty_skull
* Aggiunti pin per arduino Mega
* add pin configuration for arduino mega
* http://mac86project.altervista.org/
---------------------------------------------------------------------------- Nicola Coppola
* Pin layout should be as follows:
* Signal
Pin
Pin
Pin
*
Arduino Uno
Arduino Mega
MFRC522 board
* -----------------------------------------------------------* Reset
9
5
RST
* SPI SS
10
53
SDA
* SPI MOSI
11
51
MOSI
* SPI MISO
12
50
MISO
* SPI SCK
13
52
SCK
*
* The reader can be found on eBay for around 5 dollars. Search for
"mf-rc522" on ebay.com.
*/
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

// Create MFRC522 instance.

void setup() {
Serial.begin(9600);
// Initialize serial communications with
the PC
SPI.begin();
// Init SPI bus
mfrc522.PCD_Init();
// Init MFRC522 card
Serial.println("Scan PICC to see UID and type...");
}
void loop() {
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
47 |B u k u A p p r o v e

// Dump debug info about the card. PICC_HaltA() is automatically


called.
mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}

PROJECT 19
Arduino dan Pulse Sensor
Pulse sensor adalah sensor detak jantung yang memiliki keluaran
berupa data BPM ( Bit Per Minute ). Bisa diaplikasikan untuk
mendeteksi detak jantung manusia.

48 |B u k u A p p r o v e

Program Arduino dan Pulse SENSOR bisa dilihat pada program dibawah ini :

/*
>> Pulse Sensor Amped <<
This code is for Pulse Sensor Amped by Joel Murphy and Yury
Gitman
www.pulsesensor.com
>>> Pulse Sensor purple wire goes to Analog Pin 0 <<<
Pulse Sensor sample aquisition and processing happens in
the background via Timer 1 interrupt. 1mS sample rate.
PWM on pins 9 and 10 will not work when using this code!
The following variables are automatically updated:
Pulse :
boolean that is true when a heartbeat is sensed
then false in time with pin13 LED going out.
Signal :
int that holds the analog signal data straight
from the sensor. updated every 1mS.
HRV :
int that holds the time between the last two
beats. 1mS resolution.
BPM
:
int that holds the heart rate value. derived
every pulse from averaging previous 10 HRV values.
QS
:
boolean that is made true whenever Pulse is
found and BPM is updated. User must reset.
This code is designed with output serial data to Processing
sketch "PulseSensorAmped_Processing-xx"
The Processing sketch is a simple data visualizer.
All the work to find the heartbeat and determine the
heartrate happens in the code below.
Pin 13 LED will blink with heartbeat.
It will also fade an LED on pin 11 with every beat. Put an
LED and series resistor from pin 11 to GND
See the README for more information and known issues.
Code Version 0.1 by Joel Murphy & Yury Gitman Summer 2012
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//

VARIABLES

int green_pin = 8;
int yellow_pin = 9;
int red_pin = 10;
int x=0;
int a=0;
int a_sent=0;
boolean kuning = false;
boolean merah = false;
boolean bunyi = false;
int kondisi=0;
boolean sts = true;
int pulsePin = 0;
connected to analog pin 0
int fadeRate = 0;
11

// pulse sensor purple wire


// used to fade LED on PWM pin

// these are volatile


because they are used during the interrupt!
volatile int BPM;
// used to hold the
pulse rate

49 |B u k u A p p r o v e

volatile int Signal;


// holds the incoming
raw data
volatile int HRV;
// holds the time
between beats
volatile boolean Pulse = false;
// true when pulse wave
is high, false when it's low
volatile boolean QS = false;
// becomes true when
pulse rate is determined. every 20 pulses
volatile boolean B=false;
void setup(){
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("
BPM
");
lcd.setCursor(0, 1);
lcd.print("0
");
pinMode(6,OUTPUT);
pinMode(red_pin, OUTPUT);
pinMode(yellow_pin, OUTPUT);
pinMode(green_pin, OUTPUT);
pinMode(13,OUTPUT);
// pin 13 will blink to your
heartbeat!
// pinMode(11,OUTPUT);
// pin 11 will fade to your
heartbeat!
Serial.begin(115200); // we agree to talk fast!
interruptSetup();
// sets up to read Pulse Sensor
signal every 1mS
// UN-COMMENT THE NEXT LINE IF YOU ARE POWERING THE
PulseSensor AT LOW VOLTAGE,
// AND APPLY THAT VOLTAGE TO THE A-REF PIN
//analogReference(EXTERNAL);
}
void loop(){
sendDataToProcessing('S', Signal);
// send Processing
the raw Pulse Sensor data
if(B==true){
Serial.print("B");
Serial.println(HRV);}
if (QS == true){
// Quantified Self
flag is true when arduino finds a heartbeat
//fadeRate = 255;
// Set 'fadeRate'
Variable to 255 to fade LED with pulse
Serial.print("Q");
// 'QS' tells Processing that
the following string is heart rate data
Serial.println(BPM);
//
sendDataToProcessing(1,BPM);
// send the time
between beats with a 'B' prefix
// sendDataToProcessing('Q',HRV);
// send heart rate
with a 'Q' prefix
lcd.setCursor(0,1);
lcd.print("
");
lcd.setCursor(0,1);
lcd.print(BPM);
if(BPM>59 && BPM<101)
{
digitalWrite(green_pin, HIGH);
digitalWrite(red_pin, LOW);
digitalWrite(yellow_pin, LOW);
x=0;
bunyi=false;
50 |B u k u A p p r o v e

kuning=false;
merah=false;
}
else
if((BPM>44 && BPM<60) || (BPM>100 && BPM<116))
{
digitalWrite(yellow_pin, HIGH);
digitalWrite(red_pin, LOW);
digitalWrite(green_pin, LOW);
x=0 ;
kuning=true;
merah=false;
}
else
{
digitalWrite(yellow_pin, LOW);
digitalWrite(red_pin, HIGH);
digitalWrite(green_pin, LOW);
kuning=false;
merah=true;
}
QS = false;
Quantified Self flag for next time
}

// reset the

ledFadeToBeat();
a++;
if(a%1==0 && kuning==true)
{
if (bunyi==true) bunyi=false;
else bunyi=true;
}
if(merah==true)
{
x++;
if(x>=5) bunyi=false; else bunyi=true;
}
if(bunyi==true)
digitalWrite(6,
digitalWrite(6,LOW);
delay(500);

HIGH);
//

else

take a break

}
void ledFadeToBeat(){
fadeRate -= 15;
value
fadeRate = constrain(fadeRate,0,255);
value from going into negative numbers!
//analogWrite(11,fadeRate);
}

//
//
//

set LED fade


keep LED fade
fade LED

void sendDataToProcessing(char symbol, int data ){


Serial.print(symbol);
// symbol prefix
Processing what type of data is coming
Serial.println(data);
// the data to send
}
51 |B u k u A p p r o v e

tells

Keluaran / output nya seperti berikut, menggunakan program Processing

Project 20.
Modul SIM900 dan Arduino

Modul SIM900 GSM/GPRS adalah bagian yang berfungsi untuk berkomunikasi


antara pemantau utama dengan Handphone.

52 |B u k u A p p r o v e

Koneksi dengan Arduino

Code untuk memanggil / Calling from SIM900A

//ERFINDER CODE
#include <SoftwareSerial.h>
SoftwareSerial mySerial(9, 10); // RX, TX
void setup()
{
Serial.begin(9600);
}
void loop() // run over and over
{
Serial.println("Calling through GSM Modem");
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
delay(2000);
mySerial.println("ATDxxxxxxxxxx;"); // ATDxxxxxxxxxx; -- watch out here for
semicolon at the end!!
Serial.println("Called ATDxxxxxxxxxx");
// print response over serial port
if (mySerial.available())
Serial.write(mySerial.read());
}

53 |B u k u A p p r o v e

Code untuk Mengirim Pesan ( Message )


//ERFINDER CODE
#include <SoftwareSerial.h>
SoftwareSerial mySerial(9, 10);
void setup()
{
mySerial.begin(9600); // Setting the baud rate of GSM Module
Serial.begin(9600); // Setting the baud rate of Serial Monitor (Arduino)
delay(100);
}
void loop()
{
if (Serial.available()>0)
switch(Serial.read())
{
case 's':
SendMessage();
break;
case 'r':
RecieveMessage();
break;
}
if (mySerial.available()>0)
Serial.write(mySerial.read());
}
void SendMessage()
{
mySerial.println("AT+CMGF=1"); //Sets the GSM Module in Text Mode
delay(1000); // Delay of 1000 milli seconds or 1 second
mySerial.println("AT+CMGS=\"+91xxxxxxxxxx\"\r"); // Replace x with mobile
number
delay(1000);
mySerial.println("I am SMS from GSM Module");// The SMS text you want to send
delay(100);
mySerial.println((char)26);// ASCII code of CTRL+Z
delay(1000);
}
void RecieveMessage()
{
mySerial.println("AT+CNMI=2,2,0,0,0"); // AT Command to recieve a live SMS
delay(1000);
}

54 |B u k u A p p r o v e

PROJECT 21.
ARDUINO, BUZZER, LED AND ULTRASONIC SENSOR
Pada project berikut kita akan membuat objek menggunakan Ultrasonik sensor,
kita akan menggunakan buzzer dan LED untuk memberikan suatu petunjuk
indikator dari hasil perubahan jarak yang ditentukan dari program yang
dihasilkan dari Sensor Ultrasonik.
Perhatikan skematik dibawah ini,
Bahan bahan yang digunakan :

Sensor Ultrasonik

Arduino uno Board

Resistor 330 ohm

Buzzer 5V

LED 5mm RED, GREEN, YELLOW

Cable Jumper
Sistem Pengkabelannya adalah Seperti berikut :

55 |B u k u A p p r o v e

Codingnya seperti dibawah ini


#include <LiquidCrystal.h> //Load Liquid Crystal Library
LiquidCrystal LCD(10, 9, 5, 4, 3, 2);
//Create Liquid Crystal
Object called LCD
int
int
int
int

trigPin=13; //Sensor Trip pin connected to Arduino pin 13


echoPin=11; //Sensor Echo pin connected to Arduino pin 11
myCounter=0; //declare your variable myCounter and set to 0
servoControlPin=6; //Servo control line is connected to pin 6

56 |B u k u A p p r o v e

float pingTime; //time for ping to travel from sensor to target


and return
float targetDistance; //Distance to Target in inches
float speedOfSound=776.5; //Speed of sound in miles per hour when
temp is 77 degrees.
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
LCD.begin(16,2); //Tell Arduino to start your 16 column 2 row LCD
LCD.setCursor(0,0);
//Set LCD cursor to upper left corner,
column 0, row 0
LCD.print("Target Distance:"); //Print Message on First Row
}
void loop() {
digitalWrite(trigPin, LOW); //Set trigger pin low
delayMicroseconds(2000); //Let signal settle
digitalWrite(trigPin, HIGH); //Set trigPin high
delayMicroseconds(15); //Delay in high state
digitalWrite(trigPin, LOW); //ping has now been sent
delayMicroseconds(10); //Delay in high state
pingTime = pulseIn(echoPin, HIGH); //pingTime is presented in
microceconds
pingTime=pingTime/1000000; //convert pingTime to seconds by
dividing by 1000000 (microseconds in a second)
pingTime=pingTime/3600;
//convert
pingtime
to
hourse
by
dividing by 3600 (seconds in an hour)
targetDistance= speedOfSound * pingTime;
//This will be in
miles, since speed of sound was miles per hour
targetDistance=targetDistance/2; //Remember ping travels to
target and back from target, so you must divide by 2 for actual
target distance.
targetDistance= targetDistance*63360;
//Convert miles to
inches by multipling by 63360 (inches per mile)
LCD.setCursor(0,1); //Set cursor to first column of second row
LCD.print("
"); //Print blanks to clear the row
LCD.setCursor(0,1);
//Set Cursor again to first column of
second row
LCD.print(targetDistance); //Print measured distance
LCD.print(" inches"); //Print your units.
delay(250); //pause to let things settle
}

57 |B u k u A p p r o v e

Project 22.
Arduino Ethernet Shield
Agar suatu perangkat dapat terhubung dalam jaringan internet,
perangkat tersebut terlebih dahulu harus memiliki identitas unik dalam
jaringan, yakni IP (Internet Protocol) address. IP address dari sebuah
perangkat merupakan identifier yang unik, dalam standard IPv4, yang
mana setiap setiap byte memiliki nilai 0 hingga 255. Untuk IP address
192.168.xxx.xxx, bersifat non routable, packet data yang dikirimkan dalam
jaringan tidak dapat melewati switch internet. Meski begitu perangkat
dengan IP address 192.168.xxx.xxx, dapat terhubung dalam physical
network. Oleh karena itu perangkat dalam home network biasanya
menggunakan IP address semisal 192.168.xxx.xxx.

IP address dari suatu perangkat dapat bersifat static atau dynamic.


Sebuah perangkat yang tidak memiliki static IP address dapat meminta IP
address dari komputer manapun dalam jaringan yang sama sebagai
DHCP (Dynamic Host Configuration Protocol) server. Tergantung pada
konfigurasi pada server, IP address yang tersedia dapat diberikan pada
perangkat secara random atau berdasarkan pada identitas perangkat
tersebut.
Setiap perangkat yang terhubung dalam jaringan memiliki MAC (Media
Access Control) address. MAC address tersusun dari kumpulan enam
byte, yang biasanya ditampilkan dalam bilangan berbasis hexadecimal,
sebagai contoh 5e:a4:18:f0:8a:f6. Request MAC address tersebut
dikirimkan lewat jaringan, sehingga DHCP server dapat menentukan
untuk membalas request tersebut atau mengacuhkannya.
Dengan hanya memiliki IP address saja tidak cukup bagi perangkat
tersebut untuk berkomunikasi dengan perangkat lainnya. Packet data
tersebut harus terlebih dahulu mencapai perangkat khusus, yang disebut
gateway. Perangkat gateway tersebut juga harus diberikan IP address
yang dikenali oleh perangkat lainnya dalam jaringan.
IP address dapat diasosiasikan dengan host name dan domain name.
Semua perangkat dalam satu jaringan yang sama berbagi domain name
yang sama juga. Sementara untuk host name bersifat unik. Domain Name
System (DNS) merupakan sebuah perangkat yang dapat untuk
mengasosiasikan IP address dari suatu perangkat lain dengan host name
yang ada. Satu lagi ialah subnet mask. Secara sederhana subnet mask
58 |B u k u A p p r o v e

merupakan suatu cara untuk menentukan rentang alamat suatu


perangkat yang dapat diakses langsung melalui gateway.
Arduino Ethernet Shield menghubungkan board Arduino dengan jaringan
internet, cukup dengan plug-in module ini ke board Arduino,
menghubungkannya ke jaringan dengan kabel RJ-45. Seperti biasa setiap
elemant dari Arduino, baik hardware, software, dan juga dokumentasi
yang ada, tersedia dan dapat diakses gratis karena bersifat open source.
Berikut ini requirement penggunaan module Ethernet Shield.
Bekerja dengan board Arduino melalui port SPI Tegangan operasi sebesar
5V dari board Arduino Ethernet Controller W5100 dengan internal buffer
sebesar 16K Connection speed mulai 10Mb hingga 100Mb
Arduino Ethernet Shield dirancang berdasarkan pada Wiznet W5100
ethernet chip. Wiznet W5100 menyediakan network (IP) baik untuk TCP
maupun UDP, yang mendukung hingga empat socket secara simultan.
Untuk menggunakannya membutuhkan library Ethernet dan SPI. Ethernet
Shield menggunakan standard RJ-45, dengan integrated line transformer
dan juga Power over Ethernet.
Terdapat sebuah onboard micro-SD card slot, yang dapat digunakan
untuk menyimpan berkas. Module Ethernet Shield ini compatible dengan
board Arduino Uno dan Mega. Untuk microSD card reader onboard
dapat diakses dengan menggunakan library SD card. Saat
menggunakan library ini, SS dengan Pin 4. Terdapat pula reset controller,
untuk memastikan bahwa W5100 Ethernet module dapat reset on powerup.
Untuk board Arduino berkomunikasi baik dengan W5100 dan SD card
menggunakan SPI bus melalui ICSP header, yang ada di pin digital 10, 11,
12, dan 13 untuk board Arduino Uno, sedangkan pin digital 50, 51, dan 52
untuk board Arduino Mega. Di kedua board tersebut, pin digital 10
digunakan untuk memilih module W5100 dan pin digital 4 untuk SD card,
yang mana pin tersebut tidak dapat digunakan sebagai pin I/O biasa.
Dalam board Arduino Mega, pin digital 53 (SS) tidak digunakan sama
sekali, baik untuk memilih antara module W5100 atau SD card, namun
harus tetap dideklarasikan sebagai output agar interface SPI tetap dapat
bekerja dengan baik.
Sebagai catatan, karena module W5100 dan SD card sama-sama
menggunakan SPI bus, maka hanya ada satu yang bisa aktif digunakan
dalam satu waktu.
Alat dan Bahan :
1. Arduino Board
2. Ethernet Shield
3. Arduino IDE
Arduino IDE bisa didownload di
https://www.arduino.cc/en/Main/Software
4. Kabel Cross LAN & RJ45

59 |B u k u A p p r o v e

Langkah Kerja :
1. Pertama-tama kita akan melakukan Pemasangan Ethernet shield
pada Arduino Board

Ubah IP komputer Anda menjadi Static seperti gambar di bawah. Hal


ini agar Komputer dan Arduino Anda ada pada jaringan yang sama
atau satu segmentasi.

60 |B u k u A p p r o v e

Tuliskan Code berikut pada Arduino IDE

/*
Web Server
A simple web server that shows the value of the analog
input pins.
using an Arduino Wiznet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5
(optional)
created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe
*/
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address and IP address for your
controller below.
// The IP address will be dependent on your local
network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for
Leonardo only
}
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print(server is at );
Serial.println(Ethernet.localIP());
}
void loop() {
// listen for incoming clients
61 |B u k u A p p r o v e

EthernetClient client = server.available();


if (client) {
Serial.println(new client);
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// if youve gotten to the end of the line (received a
newline
// character) and the line is blank, the http request
has ended,
// so you can send a reply
if (c == \n && currentLineIsBlank) {
// send a standard http response header
client.println(HTTP/1.1 200 OK);
client.println(Content-Type: text/html);
client.println(Connection: close); // the connection
will be closed after completion of the response
client.println(Refresh: 5); // refresh the page
automatically every 5 sec
client.println();
client.println(<!DOCTYPE HTML>);
client.println(<html>);
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6;
analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print(analog input );
client.print(analogChannel);
client.print( is );
client.print(sensorReading);
client.println(<br />);
}
client.println(</html>);
break;
}
if (c == \n) {
// youre starting a new line
currentLineIsBlank = true;
}
else if (c != \r) {
// youve gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println(client disconnected);
}
}
2. Upload Code diatas ke Arduino Anda
3. Buka browser Anda, ketikkan 192.168.1.177

Hasil :
62 |B u k u A p p r o v e

Setelah mengikuti perintah di atas, kita akan melihat nilai analog dari ADC
channel 0 hingga 5. Data tersebut akan ter-refresh setiap 5 detik, bergantung
nilai yang kita set. Sekarang kita sudah bisa membuat server sensor kita sendiri.

Output pada WEB Browser


Ok, sekarang kita sudah bisa membuat Server Sendiri menggunakan
Ethernet Shield.

PROJECT 23
MENAMPILKAN SUHU, TEMPERATURE DAN INTENSITAS CAHAYA
DENGAN ARDUINO UNO DAN SENSOR DHT11 DI LCD 16 X 2

DHT11 adalah sensor Suhu dan Kelembaban, dia memiliki keluaran sinyal
digital yang dikalibrasi dengan sensor suhu dan kelembaban yang kompleks.
Teknologi ini memastikan keandalan tinggi dan sangat baik stabilitasnya dalam
jangka panjang. mikrokontroler terhubung pada kinerja tinggi sebesar 8 bit.
Sensor ini termasuk elemen resistif dan perangkat pengukur suhu NTC. Memiliki
kualitas yang sangat baik, respon cepat, kemampuan anti-gangguan dan
keuntungan biaya tinggi kinerja.
Setiap sensor DHT11 memiliki fitur kalibrasi sangat akurat dari kelembaban ruang
kalibrasi. Koefisien kalibrasi yang disimpan dalam memori program OTP, sensor
63 |B u k u A p p r o v e

internal mendeteksi sinyal dalam proses, kita harus menyebutnya koefisien


kalibrasi. Sistem antarmuka tunggal-kabel serial terintegrasi untuk menjadi cepat
dan mudah. Kecil ukuran, daya rendah, sinyal transmisi jarak hingga 20 meter,
sehingga berbagai aplikasi dan bahkan aplikasi yang paling menuntut. Produk
ini 4-pin pin baris paket tunggal. Koneksi nyaman, paket khusus dapat diberikan
sesuai dengan kebutuhan pengguna.
spesifikasi
Pasokan Voltage: 5 V
Rentang temperatur :0-50 C kesalahan 2 C
Kelembaban :20-90% RH 5% RH error
Interface: Digital
Program pada Arduino
#define DHT11_PIN 0
// define analog port 0
byte read_dht11_dat()
{
byte i = 0;
byte result=0;
for(i=0; i< 8; i++)
{
while(!(PINC & _BV(DHT11_PIN)))
{}; // wait forever until anlog input port 0 is '1'
(NOTICE:
PINC reads all the analog input ports
//and _BV(X) is the macro operation which pull up positon 'X'to
'1' and the rest positions to '0'. it is equivalent to 1<<X.)
delayMicroseconds(30);
if(PINC & _BV(DHT11_PIN)) //if analog input port 0 is still '1'
after 30 us
result |=(1<<(7-i));
//this position is 1
while((PINC & _BV(DHT11_PIN))); // wait '1' finish
}
return result;
}
void setup()
{
DDRC |= _BV(DHT11_PIN);
//let analog port 0 be output port
PORTC |= _BV(DHT11_PIN); //let the initial value of this port be
'1'
Serial.begin(9600);
Serial.println("Ready");
}
void loop()
{
byte dht11_dat[5];
byte dht11_in;
byte i;// start condition
PORTC &= ~_BV(DHT11_PIN);
// 1.
delay(18);
PORTC |= _BV(DHT11_PIN);
// 2.
delayMicroseconds(1);
DDRC &= ~_BV(DHT11_PIN);
//let
delayMicroseconds(40);
dht11_in = PINC & _BV(DHT11_PIN);
if(dht11_in)
{

64 |B u k u A p p r o v e

pull-down i/o pin for 18ms


pull-up i/o pin for 40us
analog port 0 be input port
// read only the input port 0

Serial.println("dht11 start condition 1 not met"); // wait for DHT


response signal: LOW
delay(1000);
return;
}
delayMicroseconds(80);
dht11_in = PINC & _BV(DHT11_PIN); //
if(!dht11_in)
{
Serial.println("dht11 start condition 2 not met"); //wair for
second response signal:HIGH
return;
}
delayMicroseconds(80);// now ready for data reception
for (i=0; i<5; i++)
{ dht11_dat[i] = read_dht11_dat();} //recieved 40 bits data.
Details are described in datasheet
DDRC |= _BV(DHT11_PIN);
//let analog port 0 be output port
after all the data have been received
PORTC |= _BV(DHT11_PIN);
//let the value of this port be '1'
after all the data have been received
byte dht11_check_sum =
dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];// check check_sum
if(dht11_dat[4]!= dht11_check_sum)
{
Serial.println("DHT11 checksum error");
}
Serial.print("Kelembaban = ");
Serial.print(dht11_dat[0], DEC);
Serial.print(".");
Serial.print(dht11_dat[1], DEC);
Serial.print("% ");
Serial.print("Suhu = ");
Serial.print(dht11_dat[2], DEC);
Serial.print(".");
Serial.print(dht11_dat[3], DEC);
Serial.println("C ");
delay(2000); //fresh time
}

65 |B u k u A p p r o v e

66 |B u k u A p p r o v e

Code yang digunakan

#define dht_dpin 14 //no ; here. Set equal to channel sensor is on,


//where if dht_dpin is 14, sensor is on digital line 14, aka analog 0
#define LIGHT_SENSOR_PIN 1
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins


LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

byte bGlobalErr; //for passing error code back from complex functions.
byte dht_dat[4]; //Array to hold the bytes sent from sensor.
int light_intensity = 0;
unsigned int flip = 0;

void setup(){
//Blink LED to detect hangs
pinMode(13, OUTPUT);
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
lcd.print("HALLO, PUPUT!");
InitDHT(); //Do what's necessary to prepare for reading DHT
//Serial.begin(9600);
delay(300); //Let system settle
//Serial.println("Humidity and temperature\n\n");
delay(700); //Wait rest of 1000ms recommended delay before
//accessing sensor
} //end "setup()"

void loop(){
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with
0):
//lcd.setCursor(0, 1);
// print the number of seconds since reset:
//lcd.print("100");
//lcd.print(millis()/1000);
if ( flip & 1 )
{
digitalWrite(13, HIGH);
} else {
67 |B u k u A p p r o v e

digitalWrite(13, LOW);
}
flip++;
light_intensity=analogRead(LIGHT_SENSOR_PIN);
ReadDHT(); //This is the "heart" of the program.
//Fills global array dht_dpin[], and bGlobalErr, which
//will hold zero if ReadDHT went okay.
//Must call InitDHT once (in "setup()" is usual) before
//calling ReadDHT.
//Following: Display what was seen...
switch (bGlobalErr) {
case 0:
lcd.setCursor(0, 0);
// Serial.print("humdity = ");
lcd.print("Suhu =

C");

lcd.setCursor(7, 0);
lcd.print( dht_dat[2], DEC);

//Serial.print(dht_dat[0], DEC);
//Serial.print(".");
//Serial.print(dht_dat[1], DEC);
//Serial.print("%

");

lcd.setCursor(0, 1);
//Every 7 out of 15 times we show humidity, rest temp
if ((flip % 15) > 7 )
{
lcd.print("Kelembaban

%");

lcd.setCursor(11, 1);
lcd.print( dht_dat[0], DEC);
} else {
lcd.print("Cahaya

");

lcd.setCursor(8, 1);
lcd.print( light_intensity, DEC);
}
//Serial.print("temperature = ");
//Serial.print(dht_dat[2], DEC);
//Serial.print(".");
//Serial.print(dht_dat[3], DEC);
//Serial.println("C

");

break;
case 1:
//Serial.println("Error 1: DHT start condition 1 not
met.");
68 |B u k u A p p r o v e

break;
case 2:
//Serial.println("Error 2: DHT start condition 2 not
met.");
break;
case 3:
//Serial.println("Error 3: DHT checksum error.");
break;
default:
//Serial.println("Error: Unrecognized code
encountered.");
break;
} //end "switch"
delay(800); //Don't try to access too frequently... in theory
//should be once per two seconds, fastest,
//but seems to work after 0.8 second.

} // end loop()

/*Below here: Only "black box" elements which can just be plugged
unchanged
unchanged into programs. Provide InitDHT() and ReadDHT(), and a
function
one of them uses.*/

void InitDHT(){
//DDRC |= _BV(dht_PIN);//set data pin... for now... as output
//DDRC is data direction register for pins A0-5 are on
//PORTC |= _BV(dht_PIN);//Set line high
//PORTC relates to the pins A0-5 are on.
//Alternative code...
//
if (dht_dpin-14 != dht_PIN){Serial.println("ERROR- dht_dpin
must be 14 more than dht_PIN");};//end InitDHT
pinMode(dht_dpin,OUTPUT); // replaces DDRC... as long as
dht_dpin=14->19
digitalWrite(dht_dpin,HIGH); //Replaces PORTC |= if
dht_pin=14->19
} //end InitDHT

void ReadDHT(){
/*Uses global variables dht_dat[0-4], and bGlobalErr to pass
"answer" back. bGlobalErr=0 if read went okay.
Depends on global dht_PIN for where to look for sensor.*/
bGlobalErr=0;
byte dht_in;
69 |B u k u A p p r o v e

byte i;
// Send "start read and report" command to sensor....
// First: pull-down i/o pin for 18ms
digitalWrite(dht_dpin,LOW); //Was: PORTC &= ~_BV(dht_PIN);
delay(18);
delayMicroseconds(600);//TKB, frm Quine at Arduino forum
/*aosong.com datasheet for DHT22 says pin should be low at least
500us. I infer it can be low longer without any]
penalty apart from making "read sensor" process take
longer. */
//Next line: Brings line high again,
//

second step in giving "start read..." command


digitalWrite(dht_dpin,HIGH); //Was: PORTC |= _BV(dht_PIN);
delayMicroseconds(40); //DHT22 datasheet says host should
//keep line high 20-40us, then watch for sensor taking line
//low. That low should last 80us. Acknowledges "start read
//and report" command.

//Next: Change Arduino pin to an input, to


//watch for the 80us low explained a moment ago.
pinMode(dht_dpin,INPUT); //Was: DDRC &= ~_BV(dht_PIN);
delayMicroseconds(40);

dht_in=digitalRead(dht_dpin); //Was: dht_in = PINC &


_BV(dht_PIN);

if(dht_in) {
bGlobalErr=1; //Was: Serial.println("dht11 start
condition 1 not met");
return;
} //end "if..."
delayMicroseconds(80);

dht_in=digitalRead(dht_dpin); //Was: dht_in = PINC &


_BV(dht_PIN);

if(!dht_in) {
bGlobalErr=2; //Was: Serial.println("dht11 start
condition 2 not met");
return;
} //end "if..."

/*After 80us low, the line should be taken high for 80us by the
sensor. The low following that high is the start of the first
70 |B u k u A p p r o v e

bit of the forty to come. The routine "read_dht_dat()"


expects to be called with the system already into this low.*/
delayMicroseconds(70);
//now ready for data reception... pick up the 5 bytes coming from
//

the sensor
for (i=0; i<5; i++)
dht_dat[i] = read_dht_dat();

//Next: restore pin to output duties


pinMode(dht_dpin,OUTPUT); //Was: DDRC |= _BV(dht_PIN);
//N.B.: Using DDRC put restrictions on value of dht_pin

//Next: Make data line high again, as output from Arduino


digitalWrite(dht_dpin,HIGH); //Was: PORTC |= _BV(dht_PIN);
//N.B.: Using PORTC put restrictions on value of dht_pin

//Next see if data received consistent with checksum received


byte dht_check_sum =
dht_dat[0]+dht_dat[1]+dht_dat[2]+dht_dat[3];
/*Condition in following "if" says "if fifth byte from sensor
not the same as the sum of the first four..."*/
if(dht_dat[4]!= dht_check_sum)
{bGlobalErr=3; } //Was: Serial.println("DHT11 checksum
error");
}; //end ReadDHT()

byte read_dht_dat(){
//Collect 8 bits from datastream, return them interpreted
//as a byte. I.e. if 0000.0101 is sent, return decimal 5.

//Code expects the system to have recently entered the


//dataline low condition at the start of every data bit's
//transmission BEFORE this function is called.

byte i = 0;
byte result=0;
for(i=0; i< 8; i++) {
//We enter this during the first start bit (low for
50uS) of the byte
//Next: wait until pin goes high
while(digitalRead(dht_dpin)==LOW) ;
while(!(PINC & _BV(dht_PIN)));

//Was:

//signalling end of start of bit's transmission.

71 |B u k u A p p r o v e

//Dataline will now stay high for 27 or 70 uS,


depending on
//whether a 0 or a 1 is being sent, respectively.
delayMicroseconds(30); //AFTER pin is high, wait
further period, to be
//into the part of the timing diagram where a 0 or a 1
denotes
//the datum being send. The "further period" was 30uS
in the software
//that this has been created from. I believe that a
higher number
//(45?) would be more appropriate.

//Next: Wait while pin still high


if (digitalRead(dht_dpin)==HIGH) //Was: if(PINC &
_BV(dht_PIN))
result |=(1<<(7-i));

// "add" (not just

addition) the 1
//to the growing byte
//Next wait until pin goes low again, which signals
the START
//of the NEXT bit's transmission.
while (digitalRead(dht_dpin)==HIGH) ;
while((PINC & _BV(dht_PIN)));
} //end of "for.."
return result;
} //end of "read_dht_dat()"

72 |B u k u A p p r o v e

//Was:

Project 24.
RTC (Real Time Clock )dan Arduino
RTC ( Real Time Clock ) digunakan untuk menghasilkan waktu yang tepat
karena dilengkapi dengan Pembangkit waktu dan baterai.

RTC Memiliki 5 Pin


GND -> Ground
VCC -> Sumber tegangan 5 v
SDA -> Pin Untuk Data
SCL - > Pin Untuk Clock

Kode programnya seperti dibawah ini


#define DS3231_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return( (val/16*10) + (val%16) );
}
void setup()
{
Wire.begin();
Serial.begin(9600);
// set the initial time here:
// DS3231 seconds, minutes, hours, day, date, month, year
// setDS3231time(30,42,21,4,26,11,14);
}
void setDS3231time(byte second, byte minute, byte hour,
dayOfWeek, byte
dayOfMonth, byte month, byte year)
73 |B u k u A p p r o v e

byte

{
// sets time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds
register
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday,
7=Saturday)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
}
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
// request seven bytes of data from DS3231 starting from
register 00h
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}
void displayTime()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second,
&minute,
&hour,
&dayOfWeek,
&dayOfMonth, &month,
&year);
// send it to the serial monitor
Serial.print(hour, DEC);
// convert the byte variable to a decimal number when
displayed
Serial.print(":");
if (minute<10)
{
Serial.print("0");
}
Serial.print(minute, DEC);
Serial.print(":");
if (second<10)
{
Serial.print("0");
}
Serial.print(second, DEC);
Serial.print(" ");
Serial.print(dayOfMonth, DEC);
Serial.print("/");
74 |B u k u A p p r o v e

Serial.print(month, DEC);
Serial.print("/");
Serial.print(year, DEC);
Serial.print(" Day of week: ");
switch(dayOfWeek){
case 1:
Serial.println("Sunday");
break;
case 2:
Serial.println("Monday");
break;
case 3:
Serial.println("Tuesday");
break;
case 4:
Serial.println("Wednesday");
break;
case 5:
Serial.println("Thursday");
break;
case 6:
Serial.println("Friday");
break;
case 7:
Serial.println("Saturday");
break;
}
}
void loop()
{
displayTime(); // display the
Serial Monitor,
delay(1000); // every second
}

75 |B u k u A p p r o v e

real-time

clock

data

on

the

PROJECT 25.
Arduino dan Bluetooth hc - 06

Bluetooth Module HC-06 merupakan module komunikasi nirkabel pada frekuensi


2.4GHz dengan default koneksi hanya sebagai SLAVE.
Sangat mudah digunakan dengan mikrokontroler untuk membuat aplikasi
wireless. Interface yang digunakan adalah serial RXD, TXD, VCC dan GND.
Built in LED sebagai indikator koneksibluetooth.
Tegangan input antara 3.6 ~ 6V, jangan menghubungkan dengan sumber
daya lebih dari 7V. Arus saat unpaired sekitar 30mA, dan saat paired
(terhubung) sebesar 10mA. 4 pin interface 3.3V dapat langsung dihubungkan
ke berbagai macam mikrokontroler (khusus Arduino, 8051, 8535, AVR, PIC, ARM,
MSP430, etc.). Jarak efektif jangkauan sebesar 10 meter, meskipun dapat
mencapai lebih dari 10 meter, namun kualitas koneksi makin berkurang.

76 |B u k u A p p r o v e

Code Program yang digunakan

//If youre not using a BTBee connect set the pin connected to the KEY pin
high
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(4,5);
void setup() {
String setName = String("AT+NAME=MyBTBee\r\n"); //Setting name as 'MyBTBee'
Serial.begin(9600);
BTSerial.begin(38400);
BTSerial.print("AT\r\n"); //Check Status
delay(500);
while (BTSerial.available()) {
Serial.write(BTSerial.read());
}
BTSerial.print(setName); //Send Command to change the name
delay(500);
while (BTSerial.available()) {
Serial.write(BTSerial.read());
}}
void loop() {}

Project 26
Arduino dengan KeyPad
Keypad digunakan untuk menginputkan suatu angka 1,2,3,4,5,6,7,8,9,0 dan
karakter * dan #. Keypad ini memiliki 2 tipe 3x4 dan 4x4. Sangat mudah untuk
dikoneksikan dengan Arduino.
Keypad jenis 3x4 memiliki 7 Pin, bisa dilihat pada gambar dibawah ini

77 |B u k u A p p r o v e

Program yang digunakan adalah sebagai berikut :


#include "Keypad.h"
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'#','0','*'}
};
byte rowPins[ROWS] = {8, 7, 6, 5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {4, 3, 2}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
void setup()
{
Serial.begin(9600);
}
void loop()
{
char key = keypad.getKey();
if (key != NO_KEY){
Serial.println(key);
}
}

78 |B u k u A p p r o v e

Project 27.
Arduino dan Seven Segment

Seven Segment digunakan untuk membuat angka dari 0,1,2,3,4,5,6,7,8,9 ,


apabila ada 2 modul seven segment bisa membuat 0 s/d 99, apabila 4 modul
berarti 0 s/d 9999.
Berikut adalah koneksi Arduino dengan seven segment

Skematiknya sebagai berikut :

79 |B u k u A p p r o v e

Code yang digunakan adalah sebagai berikut :


#define segA 2//connecting segment A to PIN2
#define segB 3// connecting segment B to PIN3
#define segC 4// connecting segment C to PIN4
#define segD 5// connecting segment D to PIN5
#define segE 6// connecting segment E to PIN6
#define segF 7// connecting segment F to PIN7
#define segG 8// connecting segment G to PIN8
int COUNT=0;//count integer for 0-9 increment
void setup()
{
for (int i=2;i<9;i++)
{
pinMode(i, OUTPUT);// taking all pins from 2-8 as output
}
}
void loop()
{
switch (COUNT)
{
case 0://when count value is zero show0 on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
break;
case 1:// when count value is 1 show1 on disp
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
80 |B u k u A p p r o v e

digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 2:// when count value is 2 show2 on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);
break;
case 3:// when count value is 3 show3 on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);
break;
case 4:// when count value is 4 show4 on disp
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 5:// when count value is 5 show5 on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
81 |B u k u A p p r o v e

digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 6:// when count value is 6 show6 on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 7:// when count value is 7 show7 on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 8:// when count value is 8 show8 on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 9:// when count value is 9 show9 on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);

82 |B u k u A p p r o v e

digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
break;
}
if (COUNT<10)
{
COUNT++;
delay(1000);///increment

count

integer

for

every

second
}
if (COUNT==10)
{
COUNT=0;// if count integer value is equal to 10, reset it to
zero.
delay(1000);
}
}

83 |B u k u A p p r o v e

PROJECT 28
ARDUINO DENGAN 4 DIGIT SEVEN SEGMENT

Pada Tutorial ini kita akan membuat lampu Seven Segment 4 Bit
Alat :
1x Arduino Uno
1x Temperature Sensor (Im using the LM335Z)
1x 4 Digit 7 Segment Display (common anode)
1x 74HC595 8 Bit Shift Register
8x 220 Ohm Resistors
1x 4700 ohm Resistor
1x Breadboard (or two)
Jumper Cables

84 |B u k u A p p r o v e

Program yang digunakan


const int digitPins[4] = {7,6,5,4}; //4 common CATHODE
pins of the display (inverted the pins order)
const int clockPin = 11;
//74HC595 Pin 11
const int latchPin = 12;
//74HC595 Pin 12
const int dataPin = 13;
//74HC595 Pin 14
const int tempPin = A0;
//temperature sensor pin
const byte digit[10] =
//seven segment digits in
bits
{
B00111111, //0
B00000110, //1
B01011011, //2
B01001111, //3
B01100110, //4
B01101101, //5
B01111101, //6
B00000111, //7
B01111111, //8
B01101111 //9
};
int digitBuffer[4] = {0};
int digitScan = 0;
float tempC; //Deleted kelvin and farenheit
void setup(){
for(int i=0;i<4;i++)
{
pinMode(digitPins[i],OUTPUT);
}
pinMode(tempPin, INPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(tempPin, INPUT);
//Serial.begin(9600);
}
//writes the temperature on display
void updateDisp(){
for(byte j=0; j<4; j++) {digitalWrite(digitPins[j],
HIGH);} // Turns the display off. Changed to HIGH
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B00000000);
digitalWrite(latchPin, HIGH);
delayMicroseconds(2);
digitalWrite(digitPins[digitScan], LOW); //Changed to
LOW for turning the leds on.
85 |B u k u A p p r o v e

digitalWrite(latchPin, LOW);
if(digitScan==2)
shiftOut(dataPin,
clockPin,
MSBFIRST,
(digit[digitBuffer[digitScan]] | B10000000)); //print
the decimal point on the 3rd digit
else
shiftOut(dataPin,
clockPin,
MSBFIRST,
digit[digitBuffer[digitScan]]);
digitalWrite(latchPin, HIGH);
digitScan++;
if(digitScan>3) digitScan=0;
}
void loop(){
tempC = analogRead(tempPin)*0.00488;
for this conversion constant
tempC = tempC*10000;
digitBuffer[3] = int(tempC)/1000;
digitBuffer[2] = (int(tempC)%1000)/100;
digitBuffer[1] = (int(tempC)%100)/10;
digitBuffer[0] = (int(tempC)%100)%10;
if (digitBuffer[0]>=5) {
digitBuffer[0] = 5;
}
else {
digitBuffer[0] = 0;
}
delay(4);
updateDisp();
}

86 |B u k u A p p r o v e

//multiplied

PROJECT 29
ARDUINO SEND & RECEIVE MESSAGE BY SIM900A DENGAN TAMPILAN
LCD, BUZZER DAN SENSOR ULTRASONIK
Pada project kali ini kita akan membuat Arduino bisa mengirim dan
menerima SMS ke nomor Handphone atau Smartphone yang dituju. Adapun
perlengkapan yang harus disiapkan adalah :
1. Arduino UNO / DFRDuino / Arduino Versi lainnya
2. SIM 900A
3. Breadboard / Papan Rangkaian
4. Wire
5. Potensiometer
6. Buzzer
7. LCD 16X2 Blue / Green
Gambaran Rangkaiannya adalah sebagai berikut :

Gambar 04. Rangkaian SIM900A dengan Arduino dan Komponen lainnya


Script Code nya :

a.

Coding Untuk Test

#include <SoftwareSerial.h>
SoftwareSerial GPRS(7, 8);
unsigned char buffer[64];
int count=0;
void setup()
{
GPRS.begin(9600);
Serial.begin(9600);
}
void loop()
{
while(GPRS.available())
{
buffer[count++]=GPRS.read();
if(count == 64) break;
}
87 |B u k u A p p r o v e

Serial.write(buffer,count);
clearBufferArray();
count = 0;
if(Serial.available()) {
byte b =Serial.read();
if (b == '#')
GPRS.write(0x1a);
else
GPRS.write(b);
}
}
void clearBufferArray()
{
for (int i=0; i<count;i++)
{
buffer[i]=NULL;
}
}

b.

Coding Untuk Switch

#include <SoftwareSerial.h>
SoftwareSerial GPRS(7, 8);
boolean state, lastState;
void setup()
{
pinMode(2, INPUT_PULLUP);
state = digitalRead(2);
lastState = state;
GPRS.begin(9600);
Serial.begin(9600);
GPRS.println("AT");
delay(1000);
}
void loop()
{
while(GPRS.available()) {
Serial.write(GPRS.read());
}
lastState=state;
state = digitalRead(2);
if (state != lastState) {
sendSMS();
}
delay(500);
}
void sendSMS() {
Serial.print("Switch was turned ");
Serial.println(state ? "on" : "off");
GPRS.println("AT+CMGF=1");
delay(500);
GPRS.println("AT+CMGS=\"+6281227103387\"");
delay(500);
GPRS.print("Switch was turned ");
GPRS.println(state ? "on" : "off");
GPRS.write(0x1a);
delay(500);
}

C. Perintah Perintah Pada Serial Monitor


C.1 Untuk mengirim SMS
AT+CMGS="+31638740161" <ENTER>

88 |B u k u A p p r o v e

Nanti akan muncul tanda > , artinya masukkanlah suatu


string atau teks yang akan dikirimkan ke nomor hp tujuan.
C.2 untuk membaca SMS / Menerima SMS
AT+CMGL="ALL" <ENTER>

Maka akan muncul semua SMS yang masuk, kalau ingin hanya
pada waktu tertentu saja, missal 2, maka ditulis seperti
berikut :
AT+CMGR=2 <ENTER>
The modem will list the single message:
+CMGR: "REC READ","+31625012254",,"07/07/05,09:56:03+08"
Test message 2
OK
Coding lengkapnya seperti dibawah ini :
/*
HC-SR04 Ping distance sensor
VCC to arduino 5v GND to arduino GND
Echo to Arduino pin 9 Trig to Arduino pin 8
Buzzer +ve to Arduino pin 13 and GND to GND
Original code sourced from theorycircuit.com
Some code and wiring inspired by arduino.cc
*/
#include <SoftwareSerial.h>
#include <LiquidCrystal.h> //Load Liquid Crystal Library /
Pustaka
LiquidCrystal LCD(10, 9, 5, 4, 3, 2); //Pin - Pin Pada LCD
#define trigPin 13
#define echoPin 11
#define Buzzer 12
SoftwareSerial GPRS(7, 8);
boolean buzzState = false;

// false = buzzer is off

void setup() {
Serial.begin (9600);
GPRS.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(Buzzer, OUTPUT);
LCD.begin(16,2); //Tell Arduino to start your 16 column 2 row
LCD
LCD.setCursor(0,0); //Set LCD cursor to upper left corner,
column 0, row 0
LCD.print("JARAK AMAN:"); //Print Message on First Row
GPRS.println("AT");
delay(1000);
}
void loop() {
while(GPRS.available()) {
Serial.write(GPRS.read());
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
89 |B u k u A p p r o v e

delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
LCD.setCursor(0,1);
//Set Cursor again to first column of
second row
LCD.print(distance); //Print measured distance
LCD.print(" cm "); //Print your units.
Serial.print(" cm");
delay(250); //pause to let things settle
if (distance >=1 && distance <=20 )
{
digitalWrite(Buzzer,LOW);
LCD.begin(16,2); //Tell Arduino to start your 16 column 2 row
LCD
LCD.setCursor(0,0); //Set LCD cursor to upper left corner,
column 0, row 0
LCD.print(" Aman "); //Print Message on First Row
Serial.print(distance);
LCD.print(distance);
LCD.println(" cm ");
}
if (distance >=30 && distance <=199)
{
Serial.print("Warning !!! Air Surut ");
GPRS.println("AT+CMGF=1");
delay(500);
GPRS.println("AT+CMGS=\"+6282198944778\"");
delay(500);
GPRS.print("WARNING Air Laut Surut Berpotensi Terjadinya
Tsunami ");
GPRS.write(0x1a);
delay(500);
digitalWrite(12,HIGH);
buzzState = true; //indicate the buzzer is now on
LCD.begin(16,2); //Tell Arduino to start your 16 column 2 row
LCD
LCD.setCursor(0,0); //Set LCD cursor to upper left corner,
column 0, row 0
LCD.print(" Bahaya!!! "); //Print Message on First Row
Serial.print(distance);
LCD.print(distance);
LCD.println(" cm ");
}
if (distance >= 200 || distance <= 0)
{
Serial.println("Diluar Jangkauan");
LCD.begin(16,2); //Tell Arduino to start your 16 column 2 row
LCD
LCD.setCursor(0,0); //Set LCD cursor to upper left corner,
column 0, row 0
LCD.print("Diluar Jangkauan"); //Print Message on First Row
}
delay(500);
}
}

90 |B u k u A p p r o v e

Project 30.
Komunikasi Arduino Ke Android Via Bluetooth
Pada Percobaan kali ini kita akan membuat suatu komunikasi Microkontroller
Arduino dengan Android Phone lewat Bluetooth.

Aplikasi ini berguna untuk mendeteksi keluaran dari Sensor di Arduino dan
melakukan pengiriman data dari Mikrokontroller Arduino ke Perangkat Android
lewat Bluetooth.
Bahan bahan yang digunakan :

1 x Arduino Uno
3 x 220 Ohm Resistrors
1 x Green LED
1 x Yellow LED
1 x Red LED
1 x TMP36 Temperature Sensor
1 x JY-MCU Bluetooth Slave Module (see introduction)
1 x Breadboard
wires

Code yang digunakan :


/* Connect to Android via serial Bluetooth and demonstrare the
use of interrupt
A serial Bluetooth module is used to create a connection with an
Android app (created with MIT AppInventor).
Arduino listens for commands to light some leds or show its
status. In addition, a timer interrupt makes it check for
temperature via a T36 sensor:
if temperature is greater than a threshold a led is lit; every n
seconds (where n is a parameter set through the app) a status
report is sent to the app.
91 |B u k u A p p r o v e

A simple command structure enables the app to send parameters


and values to Arduino and the other way round.
The circuit:
* Yellow led on Pin 3 with 220 Ohm resistor in series
* Green led on Pin 4 with 220 Ohm resistor in series
* Red led on Pin 5 with 220 Ohm resistor in series
* T36 connected to 5V, Pin A0 and Gnd
* JY-MCU Bluetooth Wireless Serial Port Module (slave) connected
as follows:
VCC <--> 5V
GND <--> GND
TXD <--> Pin 0 (Rx)
RXD <--> Pin 1 (Tx)
The Bluetooth module may interfere with PC to Arduino
communication: disconnect VCC when programming the board
* the built-in led on Pin 13 is also used
created 2014
by Paolo Mosconi
This example code is in the public domain.
*/
// Serial Parameters: COM11 9600 8 N 1
// \r or \n to end command line
// Bluetooth is on Pin 0 & 1 @ 9600 speed
//
//
//
//
//

Command structure
CMD RED|GREEN|YELLOW=ON|OFF
CMD TMAX|SECONDS=value
CMD SECONDS=value
CMD STATUS

// Status message structure


// STATUS RED|GREEN|YELLOW|TMIN|TMAX|SECONDS|TEMP|THIGH=value
float maxTemp = 30.0; // switch on led when temp > maxTemp
int maxTempSensor = (int) ((maxTemp / 100 + .5) * 204.8);
float temperature = 0.0;
int maxSeconds = 10; // send status message every maxSeconds
const int ledPin = 13;
// temperature led
const int tempPin = A0; // T36 temperature sensor analog input
pin
const int led1Pin = 3; // Yellow
const int led2Pin = 4; // Green
const int led3Pin = 5; // Red
volatile
volatile
volatile
volatile

int tempVal;
int seconds = 0;
boolean tempHigh = false;
boolean statusReport = false;

String inputString = "";


String command = "";
String value = "";
boolean stringComplete = false;
void setup(){
//start serial connection
92 |B u k u A p p r o v e

Serial.begin(9600);
Serial.print("Max T: ");
Serial.print(maxTemp);
Serial.print(" Sensor: ");
Serial.println(maxTempSensor);
inputString.reserve(50);
command.reserve(50);
value.reserve(50);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(led3Pin, OUTPUT);
digitalWrite(led1Pin, LOW);
digitalWrite(led2Pin, LOW);
digitalWrite(led3Pin, LOW);
/*
the following code is needed to initialize the timer interrupt
and set it to fire every second, the slowest that Arduino can do
for
detailed
information
see:
http://www.instructables.com/id/Arduino-TimerInterrupts/step1/Prescalers-and-the-Compare-Match-Register/
*/
cli();
// disable global interrupts
// initialize Timer1 for interrupt @ 1000 msec
TCCR1A = 0;
// set entire TCCR1A register to 0
TCCR1B = 0;
// same for TCCR1B
// set compare match register to desired timer count:
OCR1A = 15624;
// turn on CTC mode:
TCCR1B |= (1 << WGM12);
// Set CS10 and CS12 bits for 1024 prescaler:
TCCR1B |= (1 << CS10);
TCCR1B |= (1 << CS12);
// enable timer compare interrupt:
TIMSK1 |= (1 << OCIE1A);
sei();

// enable global interrupts

}
// timer interrupt routine
ISR(TIMER1_COMPA_vect)
{
tempVal = analogRead(tempPin);
if (tempVal > maxTempSensor) {
digitalWrite(ledPin, HIGH);
tempHigh = true;
}
else {
digitalWrite(ledPin, LOW);
tempHigh = false;
}
if (seconds++ >= maxSeconds) {
statusReport = true;
seconds = 0;
93 |B u k u A p p r o v e

}
}
// interpret and execute command when received
// then report status if flag raised by timer interrupt
void loop(){
int intValue = 0;
if (stringComplete) {
Serial.println(inputString);
boolean stringOK = false;
if (inputString.startsWith("CMD ")) {
inputString = inputString.substring(4);
int pos = inputString.indexOf('=');
if (pos > -1) {
command = inputString.substring(0, pos);
value
=
inputString.substring(pos+1,
inputString.length()-1); // extract command up to \n exluded
//Serial.println(command);
//Serial.println(value);
if (command.equals("RED")) { // RED=ON|OFF
value.equals("ON") ? digitalWrite(led3Pin, HIGH) :
digitalWrite(led3Pin, LOW);
stringOK = true;
}
else if (command.equals("GREEN")) { // GREEN=ON|OFF
value.equals("ON") ? digitalWrite(led2Pin, HIGH) :
digitalWrite(led2Pin, LOW);
stringOK = true;
}
else if (command.equals("YELLOW")) { // YELLOW=ON|OFF
value.equals("ON") ? digitalWrite(led1Pin, HIGH) :
digitalWrite(led1Pin, LOW);
stringOK = true;
}
else if (command.equals("TMAX")) { // TMAX=value
intValue = value.toInt();
if (intValue > 0) {
maxTemp = (float) intValue;
maxTempSensor = (int) ((maxTemp / 100 + .5) *
204.8);
stringOK = true;
}
}
else if (command.equals("SECONDS")) { // SECONDS=value
intValue = value.toInt();
if (intValue > 0) {
maxSeconds = intValue;
stringOK = true;
}
}
} // pos > -1
else if (inputString.startsWith("STATUS")) {
Serial.print("STATUS RED=");
Serial.println(digitalRead(led3Pin));
Serial.print("STATUS GREEN=");
Serial.println(digitalRead(led2Pin));
Serial.print("STATUS YELLOW=");
Serial.println(digitalRead(led1Pin));
Serial.print("STATUS TMAX=");
Serial.println(maxTemp);
Serial.print("STATUS SECONDS=");
Serial.println(maxSeconds);
94 |B u k u A p p r o v e

Serial.print("STATUS TEMP=");
Serial.println(temperature);
Serial.print("STATUS THIGH=");
Serial.println(tempHigh);
stringOK = true;
} // inputString.startsWith("STATUS")
} // inputString.startsWith("CMD ")
stringOK
?
Serial.println("Command
Serial.println("Invalid Command");
// clear the string for next iteration
inputString = "";
stringComplete = false;
} // stringComplete

Executed")

if (statusReport) {
temperature = (tempVal * 0.0048828125 - .5) * 100;
Serial.print("STATUS TEMP=");
Serial.println(temperature);
Serial.print("STATUS THIGH=");
Serial.println(tempHigh);
statusReport = false;
}
}
/*
SerialEvent occurs whenever a new data comes in the
hardware serial RX. This routine is run between each
time loop() runs, so using delay inside loop can delay
response. Multiple bytes of data may be available.
*/
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
//Serial.write(inChar);
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline or a carriage
return, set a flag
// so the main loop can do something about it:
if (inChar == '\n' || inChar == '\r') {
stringComplete = true;
}
}
}

95 |B u k u A p p r o v e

96 |B u k u A p p r o v e

Project 31. Voice Recognition Modul


Voice Recognition Modul adalah modul yang digunakan untuk mengkonversi
Suara menjadi masukan berupa data digital dan bisa ditambahkan RGB LED
sebagai indikator .
Perangkat yang disiapkan :
1 Arduino Uno
2.RGB LED
3. Resistor 220 Ohm 3
4.Voice Recognition Module
5. Wire

Berikut adalah Code yang digunakan pada Arduino IDE


Code
int redPin = 9; // R petal on RGB LED module connected to
digital pin 11
int greenPin = 10; // G petal on RGB LED module connected to
digital pin 9
int bluePin = 11; // B petal on RGB LED module connected to
digital pin 10
byte com = 0; //reply from voice recognition
void setup()
{
Serial.begin(9600);
pinMode(redPin, OUTPUT); // sets the redPin to be an output
pinMode(greenPin, OUTPUT); // sets the greenPin to be an output
pinMode(bluePin, OUTPUT); // sets the bluePin to be an output
delay(2000);
Serial.write(0xAA);
Serial.write(0x37);
delay(1000);
Serial.write(0xAA);
Serial.write(0x21);
color(255,255,255); // turn RGB LED on -- white
delay(5000);
97 |B u k u A p p r o v e

}
void loop() // run over and over again
{
while(Serial.available())
{
com = Serial.read();
switch(com)
{
case 0x11:
color(255,255,255); // turn RGB LED on -- white
break;
case 0x12:
color(255, 0, 0); // turn the RGB LED red
break;
case 0x13:
color(0,255, 0); // turn the RGB LED green
break;
case 0x14:
color(0, 0, 255); // turn the RGB LED blue
break;
case 0x15:
color(0,0,0); // turn the RGB LED off
break;
}
}
}
void color (unsigned char red, unsigned char green, unsigned
char blue) // the color generating function
{
analogWrite(redPin, red*102/255);
analogWrite(bluePin, blue*173/255);
analogWrite(greenPin, green*173/255);
}

98 |B u k u A p p r o v e

PROJECT 32
ARDUINO DAN FINGERPRINT

Secara umum, Fingerprint digunakan untuk mendeteksi sidik jari.


Cara kerja fingerprint adalah mendeteksi jari yang ditempelkan
pada kaca fingerprint dan menjadikan sebagai image, kemudian
dari image dikonversi kembali menjadi data digital, data digital
inilah yang akan menjadi ID dari setiap sidik jari kita.
Sehingga ID inilah yang membuat Fingerprint bisa mendeteksi sidik
jari dan hasilnya berbeda-beda.

Code yang digunakan :


/***************************************************
This is an example sketch for our optical Fingerprint sensor
Designed specifically to work with the Adafruit BMP085 Breakout
----> http://www.adafruit.com/products/751
These displays use TTL Serial to communicate, 2 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.

99 |B u k u A p p r o v e

BSD license, all text above must be included in any redistribution


****************************************************/
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
int getFingerprintIDez();
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino (WHITE wire)
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
// On Leonardo/Micro or others with hardware serial, use those! #0 is green
wire, #1 is white
//Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial1);
void setup()
{
while (!Serial);

// For Yun/Leo/Micro/Zero/...

Serial.begin(9600);
Serial.println("Adafruit finger detect test");
// set the data rate for the sensor serial port
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1);
}
Serial.println("Waiting for valid finger...");
}
void loop()
// run over and over again
{
getFingerprintIDez();
delay(50);
//don't ned to run this at full speed.
}
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.println("No finger detected");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK success!
p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;

100 |B u k u A p p r o v e

case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK converted!
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Found a print match!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Did not find a match");
return p;
} else {
Serial.println("Unknown error");
return p;
}
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
}
// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return -1;
p = finger.image2Tz();
if (p != FINGERPRINT_OK)

return -1;

p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return -1;
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}

101 |B u k u A p p r o v e

102 |B u k u A p p r o v e

103 |B u k u A p p r o v e

Вам также может понравиться