Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

15
PRAKTEK MIKROKONTROLER DAN ANTARMUKA 2 JOB SHEET 2 : PENGENDALIAN SECARA WIRELESS BERBASIS XBEE (2 X 4 JAM) 1

description

tes

Transcript of Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

Page 1: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

PRAKTEK MIKROKONTROLER DAN ANTARMUKA 2

JOB SHEET 2 :PENGENDALIAN SECARA WIRELESS BERBASIS XBEE

(2 X 4 JAM)

1

Page 2: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

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

Page 3: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

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

Page 4: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

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

Page 5: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

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

Page 6: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

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

Page 7: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

{    //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

Page 8: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

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

Page 9: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

 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

Page 10: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

              // 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

Page 11: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

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

Page 12: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

 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

Page 13: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

        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

Page 14: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

  // 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

Page 15: Job Sheet 2 - Pengendalian Secara Wireless Berbasis XBee

  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