materi workshop arduino unej r3

27
Ir. ILMANZA R.K., M.InfoTech. MATERI WORKSHOP MIKROKONTOLER

Upload: anwar

Post on 21-Dec-2015

99 views

Category:

Documents


18 download

DESCRIPTION

Materi Workshop ARDUINO Unej r3Materi Workshop ARDUINO Unej r3

TRANSCRIPT

Page 1: Materi Workshop ARDUINO Unej r3

Ir. ILMANZA R.K., M.InfoTech.

MATERI WORKSHOP MIKROKONTOLER

Page 2: Materi Workshop ARDUINO Unej r3

Project 1. BLINKING LED (LAMPU KEDIP)

Langkah-langkah untuk membuat Blinking LED :

1 2 3

4

Pemasangan komponen pada breadboard agar disesuaikan skema.

Sketch: int led1 = 13; // lampu LED intenal pada pin 13 Arduino void setup() { pinMode(led1, OUTPUT); // pin 13 sebagai output } void loop() { digitalWrite(led1, HIGH); // led On delay(1000); // tunggu 1 detik digitalWrite(led1, LOW); // led Off delay(1000); // tunggu 1 detik }

Catatan: - Pemasangan LED harus diperhatikan polaritasnya. Kaki yang panjang mengarah ke kutup

Positif (+), sedangkan kaki yang pendek atau kaki pada permukaan LED yg datar, mengarah ke kutub negative (-) atau Ground (Gnd).

Page 3: Materi Workshop ARDUINO Unej r3

Project 2. TRAFFICT LIGHT (LAMPU LALU LINTAS)

Sketch: int redPin = 7; // Lampu Merah int yellowPin = 6; // Lampu Kuning int greenPin = 5; // Lampu Hijau void setup() { pinMode(redPin, OUTPUT); pinMode(yellowPin, OUTPUT); pinMode(greenPin, OUTPUT); } void loop() { digitalWrite(redPin, HIGH); // Lampu Merah On digitalWrite(yellowPin, LOW); digitalWrite(greenPin, LOW); delay(3000); // Jeda 3 detik digitalWrite(redPin, LOW); // Lampu Kuning On digitalWrite(yellowPin, HIGH); digitalWrite(greenPin, LOW); delay(3000); // Jeda 3 detik digitalWrite(redPin, LOW); // Lampu Hijau On digitalWrite(yellowPin, LOW); digitalWrite(greenPin, HIGH); delay(3000); // Jeda 3 detik }

Contoh pemasangan LED menggunakan beadboard pada pin 8,9,10 Arduino

Page 4: Materi Workshop ARDUINO Unej r3

Catatan:

- Buatlah lampu lalu lintas dengan urutan: Merah - Kuning (berkedip 3x) - Hijau Petunjuk: Baris program untuk Lampu kuning: digitalWrite(redPin, LOW); // Lampu Kuning On digitalWrite(yellowPin, HIGH); digitalWrite(greenPin, LOW); delay(3000); // Jeda 3 detik diganti: for( int i=1; i<=3; i++ ) {

digitalWrite(yellowPin, HIGH); delay(1000); digitalWrite(yellowPin, LOW); delay(1000); }

Page 5: Materi Workshop ARDUINO Unej r3

Project 3. SENSOR CAHAYA PHOTOCELL / LDR

Dengan sensor cahaya LDR (Light Dependent Resistor), Lampu akan otomatis menyala (On) jika

sensor tidak terkena cahaya (gelap). Sebaliknya, lampu akan mati (Off ) apabila sensor terkena

cahaya terang.

Sketch: // Program Lampu otomatis gelap/terang int sensorPin = 0; // pin signal LDR dihubungkan ke Port Analog 0 Arduino int ledPin = 13; // pin untuk LED int sensorValue = 0; // variable nilai yg dihasilkan sensor void setup() { pinMode(sensorPin,INPUT); pinMode(ledPin, OUTPUT); Serial.begin(9600); // untuk membaca data pada serial port di layar monitor

Page 6: Materi Workshop ARDUINO Unej r3

} void loop() { sensorValue = analogRead(sensorPin); // membaca nilai dari sensor: Serial.println(sensorValue); // menulis nilai sensor di layar monitor if (sensorValue <= 500 ) // tentukan batas intensitas cahaya 0 - 1024 { digitalWrite(ledPin, HIGH); // menyalakan lampu LED (on) } else { digitalWrite(ledPin, LOW); // mematikan lampu LED (off) } }

Catatan: Pin signal modul LDR (juga keluarga resistor yg lain, misalnya Potensiometer, Thermistor) dihubungkan dengan port Analog Arduino, bukan port digital

Page 7: Materi Workshop ARDUINO Unej r3

Project 4. PENGUKUR JARAK ULTRASONIC

Untuk mengukur jarak digunakan Sensor Ultrasonic yang cara kerjanya adalah memancarkan

gelombang ultrasonic dan menangkap pantulannya jika mengenai benda di depannya. Waktu

pantul itulah yang akan di konversi kedalam satuan jarak.

Sketch untuk sensor jarak 3 kaki: int pingPin = 7; void setup() { pinMode(pingPin, INPUT); Serial.begin(9600);

Page 8: Materi Workshop ARDUINO Unej r3

} void loop() { long duration, cm; pinMode(pingPin, OUTPUT); digitalWrite(pingPin, LOW); delayMicroseconds(2); digitalWrite(pingPin, HIGH); delayMicroseconds(5); digitalWrite(pingPin, LOW); pinMode(pingPin, INPUT); duration = pulseIn(pingPin, HIGH); cm = microsecondsToCentimeters(duration); Serial.print(cm); Serial.print("cm"); Serial.println(); delay(1000); } long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2; }

Sketch untuk sensor jarak 4 kaki: #define ECHOPIN 6 // Echo to pin 6 #define TRIGPIN 7 // Trig to pin 7 void setup(){ Serial.begin(9600); pinMode(ECHOPIN, INPUT); pinMode(TRIGPIN, OUTPUT); } void loop(){

Page 9: Materi Workshop ARDUINO Unej r3

digitalWrite(TRIGPIN, LOW); // Set the trigger pin to low for 2uS delayMicroseconds(2); digitalWrite(TRIGPIN, HIGH); // Send a 10uS high to trigger ranging delayMicroseconds(10); digitalWrite(TRIGPIN, LOW); // Send pin low again int distance = pulseIn(ECHOPIN, HIGH); // Read in times pulse distance= distance/58; // Calculate distance from time of pulse Serial.println(distance); delay(50); // Wait 50mS before next ranging }

Catatan: Sensor jarak ini banyak diimplementasikan untuk berbagai macam proyek robotik, misalnya:

- Penaksir jarak - Robot obstacle avoider (Penghindar halangan) - Radar pendeteksi benda asing - Pengukur tinggi badan - Pengukur ketinggian air

Page 10: Materi Workshop ARDUINO Unej r3

Project 5. TERMOMETER DIGITAL

Untuk mengukur suhu, caranya cukup mudah. IC jenis LM 35 ini cukup praktis, bentuknya kecil

dan akurasinya tinggi. Cukup dengan menghubungkan kakinya ke kutub + , A0 dan – seperti

pada gambar, nilai tegangan listrik yang didapat akan dikonversi menjadi nilai suhu dalam

satuan derajat Celsius/Rheamur/Fahrenheit.

Sketch:

a. Nilai temperatur ditampilkan di layar komputer int potPin = 0; // select the input pin for the LM35 float temperature = 0; // type float -> 2 angka di blkng koma long val = 0; // tyle long = int, hanya range nilainya lebih besar void setup() { pinMode(potPin, INPUT); Serial.begin(9600); } void loop()

Page 11: Materi Workshop ARDUINO Unej r3

{ val = analogRead(potPin); // read the value from the sensor temperature = (5.0 * val * 100.0)/1024.0; // convertion formula to Celcius // Serial.print(temperature); // write temperature to notebook monitor Serial.print((long)temperature); // jika nilainya ingin dibulatkan Serial.println(" C"); delay(1000); }

b. Thermometer digital dengan fitur lampu indikator

Tambahkan pengukur suhu ini dengan fitur lampu indikator (rangkaian traffict light) yang menyala bergantian pada suhu tertentu. Gunakan logika IF-ELSE atau SWITCH-CASE. int potPin = 0; // select the input pin for the LM35 float temperature = 0; int suhu; long val = 0; int redLight = 7; int yellowLight = 6; int greenLight = 4; void setup() { pinMode(potPin, INPUT); Serial.begin(9600); pinMode(redLight, OUTPUT); pinMode(yellowLight, OUTPUT); pinMode(greenLight, OUTPUT); } void loop() { val = analogRead(potPin); // read the value from the sensor temperature = (5.0 * val * 100.0)/1024.0; suhu = temperature; Serial.println("Suhu sekarang adalah : "); Serial.print((long)temperature); Serial.println(" C");

Page 12: Materi Workshop ARDUINO Unej r3

if (suhu > 30) { // Jika lebih besar dari 30 derajat digitalWrite(redLight,HIGH); digitalWrite(yellowLight,LOW); digitalWrite(greenLight,LOW); } if (suhu >=27 || suhu <= 30) { // Jika suhunya antara 27-30 derajat digitalWrite(yellowLight,HIGH); digitalWrite(greenLight,LOW); digitalWrite(redLight,LOW); } if (suhu < 27) { // Jika suhunya kurang dari 27 derajat digitalWrite(greenLight,HIGH); digitalWrite(redLight,LOW); digitalWrite(yellowLight,LOW); } delay(5000); }

Catatan:

---------------------------- Jika menggunakan IF - ELSE

if (suhu > 24) // { } if (suhu == 26) // ‘sama dengan’ ditulis dengan simbul == . Tidak sama dengan, simbulnya != { }

if (suhu != 24 || suhu !=26) // simbul || artinya OR, sedangkan simbul && artinya AND

{

}

-------------------------- Jika menggunakan SWICH - CASE

switch (suhu) { case 24 : // Jika suhunya 24 derajat

Page 13: Materi Workshop ARDUINO Unej r3

………. break; case 26 : // Jika suhunya 23 derajat ………. break; default : // jika suhunya selain 23 dan 24 derajat ………. }

Page 14: Materi Workshop ARDUINO Unej r3

Project 6. DISPLAY DATA PENGUKURAN PADA LED MATRIX

Sebelum membuat program display pada LED MATRIX, terlebih dahulu kita harus menginstal

library / driver LED Matris tersebut. Caranya adalah degan meng-copy folder:\ DMD dan folder

:\TIMERONE_r11 ke folder: PROGRAM FILES\ARDUINO\LIBRARIES\

SKETCH MENAMPILKAN SCROLLING TEXT : char text1[] = "Universitas Jember"; // text yang akan ditulis /*-------------------------------------------------------------------------------------- Includes --------------------------------------------------------------------------------------*/ #include <SPI.h> //SPI.h must be included as DMD is written by SPI (the IDE complains otherwise) #include <DMD.h> // #include <TimerOne.h> // #include "SystemFont5x7.h" #include "Arial_black_16.h" //Fire up the DMD library as dmd #define DISPLAYS_ACROSS 1 #define DISPLAYS_DOWN 1 DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN); /*-------------------------------------------------------------------------------------- Interrupt handler for Timer1 (TimerOne) driven DMD refresh scanning, this gets called at the period set in Timer1.initialize(); --------------------------------------------------------------------------------------*/

Page 15: Materi Workshop ARDUINO Unej r3

void ScanDMD() { dmd.scanDisplayBySPI(); } /*-------------------------------------------------------------------------------------- setup Called by the Arduino architecture before the main loop begins --------------------------------------------------------------------------------------*/ void setup(void) { //initialize TimerOne's interrupt/CPU usage used to scan and refresh the display Timer1.initialize( 5000 ); //period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker. Timer1.attachInterrupt( ScanDMD ); //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI() //clear/init the DMD pixels held in RAM dmd.clearScreen( true ); //true is normal (all pixels off), false is negative (all pixels on) } /*-------------------------------------------------------------------------------------- loop Arduino architecture main loop --------------------------------------------------------------------------------------*/ void loop(void) { // SCROLLING TEXT dmd.clearScreen( true ); dmd.selectFont(Arial_Black_16); dmd.drawMarquee(text1,strlen(text1),(32*DISPLAYS_ACROSS)-1,0); long start=millis(); long timer=start; boolean ret=false; while(!ret){ if ((timer+30) < millis()) { ret=dmd.stepMarquee(-1,0); timer=millis(); } } }

Page 16: Materi Workshop ARDUINO Unej r3

SKETCH MENAMPILKAN SCROLLING TEXT & FRAME: char text1[] = "Suhu udara saat ini"; char text2[] = "30"; /*-------------------------------------------------------------------------------------- Includes --------------------------------------------------------------------------------------*/ #include <SPI.h> //SPI.h must be included as DMD is written by SPI (the IDE complains otherwise) #include <DMD.h> // #include <TimerOne.h> // #include "SystemFont5x7.h" #include "Arial_black_16.h" //Fire up the DMD library as dmd #define DISPLAYS_ACROSS 1 #define DISPLAYS_DOWN 1 DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN); /*-------------------------------------------------------------------------------------- Interrupt handler for Timer1 (TimerOne) driven DMD refresh scanning, this gets called at the period set in Timer1.initialize(); --------------------------------------------------------------------------------------*/ void ScanDMD() { dmd.scanDisplayBySPI(); } /*-------------------------------------------------------------------------------------- setup Called by the Arduino architecture before the main loop begins --------------------------------------------------------------------------------------*/ void setup(void) { //initialize TimerOne's interrupt/CPU usage used to scan and refresh the display Timer1.initialize( 5000 ); //period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker. Timer1.attachInterrupt( ScanDMD ); //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI() //clear/init the DMD pixels held in RAM

Page 17: Materi Workshop ARDUINO Unej r3

dmd.clearScreen( true ); //true is normal (all pixels off), false is negative (all pixels on) } /*-------------------------------------------------------------------------------------- loop Arduino architecture main loop --------------------------------------------------------------------------------------*/ void loop(void) { // SCROLLING TEXT dmd.clearScreen( true ); dmd.selectFont(Arial_Black_16); dmd.drawMarquee(text1,strlen(text1),(32*DISPLAYS_ACROSS)-1,0); long start=millis(); long timer=start; boolean ret=false; while(!ret){ if ((timer+30) < millis()) { ret=dmd.stepMarquee(-1,0); timer=millis(); } } // BORDER dmd.clearScreen( true ); // draw a border rectangle around the outside of the display dmd.clearScreen( true ); dmd.drawBox( 0, 0, (32*DISPLAYS_ACROSS)-1, (16*DISPLAYS_DOWN)-1, GRAPHICS_NORMAL ); // tulis text dmd.selectFont(System5x7); for (byte x=0;x<DISPLAYS_ACROSS;x++) { for (byte y=0;y<DISPLAYS_DOWN;y++) { dmd.drawString( 6+(32*x), 5+(16*y), text2, 4, GRAPHICS_NORMAL ); // 6 = kolom, 4 = baris

Page 18: Materi Workshop ARDUINO Unej r3

//dmd.drawString( 2+(32*x), 9+(16*y), "ronic", 5, GRAPHICS_NORMAL ); } } delay( 1000 ); }

SKETCH MENAMPILKAN DATA TEMPERATUR PADA LED MATRIX: int potPin = 0; // select the input pin for the LM35 int temperature = 0; // type float -> 2 angka di blkng koma long val = 0; String str; char nilai[16]; /*-------------------------------------------------------------------------------------- Includes --------------------------------------------------------------------------------------*/ #include <SPI.h> //SPI.h must be included as DMD is written by SPI (the IDE complains otherwise) #include <DMD.h> // #include <TimerOne.h> // #include "SystemFont5x7.h" #include "Arial_black_16.h" //Fire up the DMD library as dmd #define DISPLAYS_ACROSS 1 #define DISPLAYS_DOWN 1 DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN); /*-------------------------------------------------------------------------------------- Interrupt handler for Timer1 (TimerOne) driven DMD refresh scanning, this gets called at the period set in Timer1.initialize(); --------------------------------------------------------------------------------------*/ void ScanDMD() { dmd.scanDisplayBySPI(); } /*-------------------------------------------------------------------------------------- setup Called by the Arduino architecture before the main loop begins

Page 19: Materi Workshop ARDUINO Unej r3

--------------------------------------------------------------------------------------*/ void setup(void) { pinMode(potPin, INPUT); Serial.begin(9600); //initialize TimerOne's interrupt/CPU usage used to scan and refresh the display Timer1.initialize( 5000 ); //period in microseconds to call ScanDMD. Anything longer than 5000 (5ms) and you can see flicker. Timer1.attachInterrupt( ScanDMD ); //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI() //clear/init the DMD pixels held in RAM dmd.clearScreen( true ); //true is normal (all pixels off), false is negative (all pixels on) } /*-------------------------------------------------------------------------------------- loop Arduino architecture main loop --------------------------------------------------------------------------------------*/ void loop(void) { val = analogRead(potPin); // read the value from the sensor temperature = (5.0 * val * 100.0)/1024.0; // convertion formula to Celcius str = String(temperature); str.toCharArray(nilai,16); //Serial.println(nilai); // display di layar computer // tulis text dmd.selectFont(System5x7); dmd.clearScreen( true ); delay( 1000 ); for (byte x=0;x<DISPLAYS_ACROSS;x++) { for (byte y=0;y<DISPLAYS_DOWN;y++) { dmd.drawString( 6+(32*x), 5+(16*y), nilai, 4, GRAPHICS_NORMAL ); // 6 = kolom, 4 = baris dmd.drawString( 21+(32*x), 5+(16*y), "C", 4, GRAPHICS_NORMAL ); // 22 = kolom, 4 = baris } }

Page 20: Materi Workshop ARDUINO Unej r3

delay( 1000 ); }

Page 21: Materi Workshop ARDUINO Unej r3

Project 7. DISPLAY DATA PENGUKURAN PADA PESAWAT TELEVISI

Sebelum membuat program display pada pesawat TV, terlebih dahulu kita harus menginstal

library / driver LED Matris tersebut. Caranya adalah degan meng-copy folder:\ TVOUT,

\TVOUTFONTS dan folder :\POOLSERIAL ke folder: PROGRAM FILES\ARDUINO\LIBRARIES\

SKETCH DISPLAY STATIC TEXT PADA PESAWAT TV: : #include <TVout.h> #include <fontALL.h> TVout TV; void setup() { TV.begin(_PAL); // for PAL system TV.clear_screen(); }

Page 22: Materi Workshop ARDUINO Unej r3

void loop() { TV.select_font(font6x8); TV.set_cursor(25,10); //kolom, baris TV.print("UNIVERSITAS JEMBER"); TV.select_font(font6x8); TV.set_cursor(38,40); TV.print("Temperature:"); TV.select_font(font8x8); TV.set_cursor(65,70); TV.print("40"); delay(1000); TV.clear_screen(); } SKETCH MENAMPILKAN DATA TEMPERATUR PADA PESAWAT TV: #include <TVout.h> #include <fontALL.h> TVout TV; #define BEEP TV.tone(1046,200); // TV.tone(random(60,100),150); int potPin = 0; // select the input pin analog for the LM35 float temperature = 0; // type float -> 2 angka di blkng koma long val = 0; // void setup() { pinMode(potPin, INPUT); TV.begin(_PAL); // for PAL system TV.clear_screen(); Serial.begin(9600); } void loop() { // baris 1 TV.select_font(font6x8); for (int b=0; b<30; b++) {

Page 23: Materi Workshop ARDUINO Unej r3

//TV.set_cursor(25,10); //kolom, baris TV.set_cursor(b,10); //kolom, baris TV.print("UNIVERSITAS JEMBER"); delay(20); TV.clear_screen(); } TV.set_cursor(25,10); //kolom, baris TV.print("UNIVERSITAS JEMBER"); // baris 2 TV.select_font(font6x8); TV.set_cursor(38,40); TV.print("Temperature:"); // baris 3 TV.select_font(font8x8); TV.set_cursor(65,70); val = analogRead(potPin); // read the value from the sensor temperature = (5.0 * val * 100.0)/1024.0; // convertion formula to Celcius //Serial.println(temperature); // write temperature to notebook monitor // Serial.println((long)temperature); // jika nilainya ingin dibulatkan TV.print((long)temperature); BEEP delay(3000); TV.clear_screen(); }

Page 24: Materi Workshop ARDUINO Unej r3

Project 8. DISPLAY DATA PENGUKURAN PADA BROWSER

PETUNJUK :

1. Install software VCExpress (Vicual C++) ke sistem windows 2. Buat folder baru di htdocs, misal: \htdocs\baca 3. Copy file serialread.exe dan read_arduino.php ke folder : \htdocs\baca 4. Jalankan salah satu program yg telah dibuat ( misal: program ukur suhu , ukur jarak,

atau ukur cahaya ) 5. Buka Browser dan akses : http://localhost/baca/read_arduino.php 6. Data pengukuran sensor akan tampil di Browser

SKETCH MENAMPILKAN DATA TEMPERATUR PADA BROWSER (read_arduino.php): <?php //sesuaikan COM PORT nya exec("serialread.exe COM7",$output); echo "<br><br><br><br><br><br><center><span style='font-size: 120pt; color: #3300FF; font-family: verdana;'>"; foreach($output as $line) //Untuk menampilkan nilai ke browser

Page 25: Materi Workshop ARDUINO Unej r3

echo chr(substr($line,0,2)); //nilai1 echo chr(substr($line,2,2)); //nilai2 echo chr(substr($line,4,2)); //nilai3 echo " C</span></center>"; // script untuk melakukan refresh pada browser echo "<META HTTP-EQUIV=REFRESH CONTENT='1;URL=http://localhost/baca/read_arduino.php'>";

?>

Page 26: Materi Workshop ARDUINO Unej r3

Project 9. PROGRAM SIMPAN DATA PENGUKURAN

PETUNJUK :

1. Buat database dengan nama arduino dan tabel dengan nama suhu. 2. Tabel suhu terdapat field pertama yaitu `waktu` dengan tipe data timestamp dan defaut

CURRENT_TIMESTAMP. Dan field kedua yaitu `nilai` dengan tipe data varchar dan length sebanyak 3.

3. Simpan script read_arduino_database.php ke folder : \htdocs\baca 4. Jalankan salah satu program yg telah dibuat ( misal: program ukur suhu , ukur jarak,

atau ukur cahaya ). 5. Buka Browser dan akses : http://localhost/baca/read_arduino_database.php 6. Data pengukuran sensor akan tampil di Browser dan masuk ke database.

SKETCH MENAMPILKAN DATA TEMPERATUR PADA BROWSER SEKALIGUS MEMASUKAN DATA PENGUKURAN KE DALAM DATABASE (read_arduino_database.php): <?php //Sesuaikan COM PORT nya exec("serialread.exe COM7",$output);

Page 27: Materi Workshop ARDUINO Unej r3

echo "<br><br><br><br><br><br><center><span style='font-size: 120pt; color: #3300FF; font-family: verdana;'>"; foreach($output as $line) //Variable yang digunakan untuk memasukan nilai ke database $nilai1=chr(substr($line,0,2)); $nilai2=chr(substr($line,2,2)); $nilai3=chr(substr($line,4,1)); //Untuk menampilkan nilai ke browser echo $nilai1; echo $nilai2; echo $nilai3; echo " C</span></center>"; /* Jika ingin menyimpan data hasil pembacaan sensor ke data base mysql, lakukan langkah sbb: */ //1. Membuat script Connect ke database mysql $con=mysqli_connect("localhost","root","","arduino"); //2. Gabungkan variable nilai1, nilai2, nilai3 menjadi sebuah nama variable, misal nilai $nilai=$nilai1.$nilai2.$nilai3; //3. Insert data pengukuran sensor ke database mysql mysqli_query($con,"INSERT INTO suhu (nilai) VALUES ('$nilai')"); mysqli_close($con) ; //4. Cobalah membuat program tampilan grafik //Script untuk melakukan refresh pada browser echo "<META HTTP-EQUIV=REFRESH CONTENT='1;URL=http://localhost/baca/read_arduino_database.php'>"; ?>