Upload
avianto-marinda
View
47
Download
1
Embed Size (px)
DESCRIPTION
tes
Citation preview
PRAKTEK MIKROKONTROLER DAN ANTARMUKA 2
JOB SHEET 2 :PENGENDALIAN SECARA WIRELESS BERBASIS XBEE
(2 X 4 JAM)
1
1 WIRELESS DOOR BELL (BASIC)
Pengirim(XBee → Router AT)
Penerima(XBee → Coordinator AT)
/* * ********* Wireless Doorbell (Button) ******** * menggunakan sepasang modul XBee * dan Bell di sisi penerima */
int button = 2;
/* * ********* Wireless Doorbell (Bell) ******** * menggunakan sepasang modul XBee * dan Button di sisi pemancar */
int bell = 5;
2
void setup() { pinMode(button, INPUT); digitalWrite(button, HIGH); // enable R Pull up internal Serial.begin(9600);}
void loop() { // kirim huruf “D” melalui port serial jika push button ditekan if (digitalRead(button) == LOW) { Serial.print('D'); delay(10); // mencegah beban lebih pada port serial }}
void setup() { pinMode(bell, OUTPUT); Serial.begin(9600);}
void loop() { // mencari huruf “D” pada port serial dan bunyikan bell jika ada if (Serial.available() > 0) { if (Serial.read() == 'D') { //bunyikan bell singkat digitalWrite(bell, HIGH); delay(10); digitalWrite(bell, LOW); // uncomment perintah di bawah jika bukan buzzer //tone(bell, 440, 100); } }}
3
2 WIRELESS DOOR BELL (FEEDBACK)
Pengirim(XBee → Router AT)
Penerima(XBee → Coordinator AT)
/* ********* Wireless Doorbell + Feedback (Button) ******** * menggunakan sepasang modul XBee * dan Bell di sisi penerima */
int button = 2;int LED = 11;
/* ********** Wireless Doorbell + Feedback (Bell) ******** * menggunakan sepasang modul XBee * dan Button di sisi pemancar */
int bell = 5;
void setup()
4
void setup() { pinMode(button, INPUT); digitalWrite(button, HIGH); // enable R Pull up internal pinMode(LED, OUTPUT); Serial.begin(9600);}
void loop() { // kirim huruf “D” melalui port serial jika button ditekan if (digitalRead(button) == LOW) { Serial.print('D'); delay(10); // mencegah beban lebih pada port serial }
// jika huruf “K” diterima, nyalakan LED feedback if (Serial.available() > 0 ) { if (Serial.read() == 'K') { digitalWrite(LED, HIGH); } }
// jika button dilepas,padamkan LED if (digitalRead(button) == HIGH) { digitalWrite(LED, LOW); }}
{ pinMode(bell, OUTPUT); Serial.begin(9600);}
void loop() { // mencari huruf “D” pada port serial dan bunyikan bell jika ada if (Serial.available() > 0) { if (Serial.read() == 'D') { //kirim feedback karena pesan sudah diterima Serial.print('K'); //bunyikan bell singkat digitalWrite(bell, HIGH); delay(10); digitalWrite(bell, LOW); // uncomment perintah di bawah jika bukan buzzer //tone(bell, 440, 100); } }}
5
3 WIRELESS SERVO MOTOR CONTROL
Pengirim(XBee → Router AT)
Penerima(XBee Coordinator → AT)
//Kirim data dari Potensiometer melalui serial ke komputer
//Pin untuk potensioint potPin = 0;
void setup()
//Kontrol motor Servo dari potensiometer
//Include Servo Library#include <Servo.h>
//Pin untuk servo
6
{ //Setting baud rate (9600 Baud) Serial.begin(9600);}
void loop(){ int val = map(analogRead(potPin), 0, 1023, 0, 9); Serial.println(val); delay(50);}
int servoPin = 9;
//Buat Servo ObjectServo PotServo;
void setup(){ //Start Serial Serial.begin(9600);
//Menghubungkan Servo PotServo.attach(servoPin); delay(500);}
void loop(){ while( Serial.available() == 0); int data = Serial.read() '0'; int pos = map(data, 0, 9, 0, 180); pos = constrain(pos, 0, 180);
//Hidupkan servo Serial.println(pos); PotServo.write(pos); Serial.flush(); }
7
4 WIRELESS LIGHT SENSOR (BASIC)
Pengirim(XBee → Router AT)
Penerima(XBee → Coordinator API)
*** KONFIGURASI ***
PENGIRIM :
ATID3456 (PAN ID) ATDH > set sama dengan SH dari XBee penerima ATDL > set sama dengan SL dari XBee penerima ATJV1 > rejoin dengan Coordinator saat startup ATD02 > pin 0 = analog input
/* * ***** WIRELESS LIGHT SENSOR (BASIC) ******* * menggunakan sepasang modul XBee * fungsi indikator LED di penerima tergantung dari * intensitas cahaya ke LDR di pengirim */
/*
8
ATIR64 > sample rate = 100 ms (64h) *** KONFIGURASI ***
PENERIMA :
ATID3456 (PAN ID) ATDH > set sama dengan SH dari XBee pengirim ATDL > set sama dengan SL dari XBee pengirim */
int LED = 13;int debugLED = 13;int analogValue = 0;
void setup() { pinMode(LED,OUTPUT); pinMode(debugLED,OUTPUT); Serial.begin(9600);}
void loop() { // memastikan semua byte ada di buffer if (Serial.available() >= 21) { // mencari byte start if (Serial.read() == 0x7E) { //blink debug LED sebagai indikasi data diterima digitalWrite(debugLED, HIGH); delay(10); digitalWrite(debugLED, LOW);
9
// buang dari buffer variabel yang tidak diperlukan for (int i = 0; i<18; i++) { byte discard = Serial.read(); }
int analogHigh = Serial.read(); int analogLow = Serial.read(); analogValue = analogLow + (analogHigh * 256); } }
// Atur range nilai analogValue sesuai kebutuhan if (analogValue > 0 && analogValue <= 350) // range gelap { digitalWrite(LED, LOW); }
if (analogValue > 350 && analogValue <= 750) // range sedang { digitalWrite(LED, HIGH); }
if (analogValue > 750 && analogValue <= 1023) // range terang { digitalWrite(LED, LOW); }}
10
5 WIRELESS LIGHT SENSOR (FEEDBACK)
XBee → Router AT XBee → Coordinator API
*** KONFIGURASI ***
PENGIRIM : ATID3456 (PAN ID) ATDH > set sama dengan SH dari XBee penerima ATDL > set sama dengan SL dari XBee penerima ATJV1 > rejoin dengan Coordinator saat startup ATD02 > pin 0 = analog input
/* * *********WIRELESS LIGHT SENSOR (FEEDBACK) ******** * menggunakan sepasang modul XBee * fungsi indikator LED di penerima tergantung dari * intensitas cahaya ke LDR di pengirim */
/*
*** KONFIGURASI ***
11
ATD14 > pin 1 = digital output (default low) ATIR64 > sample rate 100 ms (64h)
PENERIMA : ATID3456 (PAN ID) ATDH > set sama dengan SH dari XBee pengirim ATDL > set sama dengan SL dari XBee pengirim */
int LED = 11;int debugLED = 13;int analogValue = 0;int remoteIndicator = false; // monitor status remote on/offint lastRemoteIndicator = false; // rekam status remoteunsigned long lastSent = 0; // rekam saat terakhir remote direset
void setup() { pinMode(LED,OUTPUT); pinMode(debugLED,OUTPUT); Serial.begin(9600);}
void loop() { // memastikan semua byte di buffer if (Serial.available() >= 23) { // mencari awal byte if (Serial.read() == 0x7E) { //blink debug LED sebagai indikasi data diterima digitalWrite(debugLED, HIGH); delay(10); digitalWrite(debugLED, LOW); // buang variabel yang tidak dipakai // (termasuk dua byte digital pin feedback) for (int i = 0; i<20; i++) {
12
byte discard = Serial.read(); }
int analogHigh = Serial.read(); int analogLow = Serial.read(); analogValue = analogLow + (analogHigh * 256); } }
// Atur range nilai analogValue sesuai kebutuhan
if (analogValue > 0 && analogValue <= 350) // range gelap { digitalWrite(LED, LOW); }
if (analogValue > 350 && analogValue <= 750) // range sedang { digitalWrite(LED, HIGH); }
if (analogValue > 750 && analogValue <= 1023) // range terang { digitalWrite(LED, LOW); }
// set segera indikator jika ada perubahan status if (remoteIndicator != lastRemoteIndicator) { if (remoteIndicator==false) setRemoteState(0x4); if (remoteIndicator==true) setRemoteState(0x5); lastRemoteIndicator = remoteIndicator; }
13
// reset indikator jika tidak sinkron if (millis() lastSent > 10000 ) { if (remoteIndicator==false) setRemoteState(0x4); if (remoteIndicator==true) setRemoteState(0x5); lastSent = millis(); }}
void setRemoteState(int value) { // kirim 0x4 atau 0x5 untuk on atau off pin Serial.write(0x7E); // byte awal Serial.write(0x0); // high byte dari length (selalu nol) Serial.write(0x10); // low byte dari length (jumlah byte // berikutnya, tidak termasuk checksum) Serial.write(0x17); // 0x17 = remote AT command Serial.write(0x0); // frame id diset nol untuk reply
// ID penerima, atau gunakan 0xFFFF untuk broadcast
Serial.write(00); Serial.write(00); Serial.write(00); Serial.write(00); Serial.write(00); Serial.write(00); Serial.write(0xFF); // 0xFF untuk broadcast Serial.write(0xFF); // 0xFF untuk broadcast
// 16 bit penerima atau 0xFFFE jika tidak diketahui Serial.write(0xFF); Serial.write(0xFE);
14
Serial.write(0x02); // 0x02 untuk perubahan segera // karakter ASCII untuk command name Serial.write('D'); Serial.write('1'); // command data yang masuk sebanyak byte yang diperlukan Serial.write(value); // checksum = semua bytes setelah length byte long sum = 0x17 + 0xFF + 0xFF + 0xFF + 0xFE + 0x02 + 'D' + '1' + value;
Serial.write( 0xFF ( sum & 0xFF)); // hitung checksum delay(10); // safety pause untuk menghindari beban berlebih // pada port serial}
15