30 Smart Project Arduino
30 Smart Project Arduino
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
2 |B u k u A p p r o v e
3 |B u k u A p p r o v e
didesain
untuk
mempermudah
kita
untuk
melakukan
contoh,
misal
anda
akan
mencoba
melakukan
4 |B u k u A p p r o v e
yang
bisa
dilakukan
oleh
ATmega328.
Anda
bisa
untuk
memperoleh
informasi,
tutorial
dan
berbagai
5 |B u k u A p p r o v e
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.
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.
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
}
else
{
digitalWrite(ledPin, HIGH);
delay(150);
digitalWrite(ledPin, LOW);
delay(150);
}
}
Project 02
Sensor Cahaya LDR dan Arduino
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
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
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
void setup() {
pinMode(ledPin, 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
Project 05.
LED dengan Arduino
Contoh Implementasi
Menampilkan teks 2 baris
15 |B u k u A p p r o v e
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.
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
{
pinMode(pwm,OUTPUT) ;
pinMode(in_1,OUTPUT) ;
pinMode(in_2,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) ;
}
19 |B u k u A p p r o v e
Project 07
Motor Servo dan Arduino
Arduino Board
Motor Servo
Wire
Contoh Implementasi
Anda bisa mengatur Arah Putar Servo sampai 200 derajat
20 |B u k u A p p r o v e
= 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
Contoh Implementasi
Melakukan Percobaan dengan membuat suatu getaran disekitar Sensor
dan lihat pada Serial Monitor.
Skematik dan Penyusunan / Pengkabelan
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 )
24 |B u k u A p p r o v e
25 |B u k u A p p r o v e
void setup()
{
Serial.begin(9600);
emon1.current(1, 111.1);
}
void loop()
{
double Irms = emon1.calcIrms(1480);
Serial.print(Irms*230.0);
Serial.print(" ");
Serial.println(Irms);
26 |B u k u A p p r o v e
(1<<ADC_BITS)
class EnergyMonitor
{
public:
void
voltage(unsigned
int
_inPinV,
double
_PHASECAL);
void current(unsigned int _inPinI, double _ICAL);
_VCAL,
double
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
28 |B u k u A p p r o v e
//Used to
Project 10
Sensor Sentuh ( Touch Sensor ) dengan Arduino
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
PROJECT 11.
Arduino Dan Ultrasonik
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
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
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
{
// 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.
Project 14.
Arduino dan Joystick
35 |B u k u A p p r o v e
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.
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
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.
39 |B u k u A p p r o v e
40 |B u k u A p p r o v e
Project 17.
Arduino dengan PIR Sensor
41 |B u k u A p p r o v e
42 |B u k u A p p r o v e
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);
}
}
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
45 |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);
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
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
49 |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);
}
//
//
//
tells
Project 20.
Modul SIM900 dan Arduino
52 |B u k u A p p r o v e
//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
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
Buzzer 5V
Cable Jumper
Sistem Pengkabelannya adalah Seperti berikut :
55 |B u k u A p p r o v e
56 |B u k u A p p r o v e
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.
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
60 |B u k u A p p r o v e
/*
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
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.
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
64 |B u k u A p p r o v e
65 |B u k u A p p r o v e
66 |B u k u A p p r o v e
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,
//
if(dht_in) {
bGlobalErr=1; //Was: Serial.println("dht11 start
condition 1 not met");
return;
} //end "if..."
delayMicroseconds(80);
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
the sensor
for (i=0; i<5; i++)
dht_dat[i] = read_dht_dat();
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.
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:
71 |B u k u A p p r o v e
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.
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
76 |B u k u A p p r o v e
//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
78 |B u k u A p p r o v e
Project 27.
Arduino dan Seven Segment
79 |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
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 :
a.
#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.
#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);
}
88 |B u k u A p p r o v e
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;
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
Command structure
CMD RED|GREEN|YELLOW=ON|OFF
CMD TMAX|SECONDS=value
CMD SECONDS=value
CMD STATUS
int tempVal;
int seconds = 0;
boolean tempHigh = false;
boolean statusReport = false;
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();
}
// 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
}
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
99 |B u k u A p p r o v e
// 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