Skip to main content

UAS INTERFACE

18 JANUARI 2016

SMART KONTRAKAN MEKATRONIKA 
Merangkai Komunikasi 
Semester 5 
Assalamualaikum sahabat,  semester ini udah mau berlalu nah kali ini kami di kasih project untuk satu kelas yaitu tugas UAS Interface, dimana kami harus menggunakan komunikasi menggunakan I2C, RS485 dan SPI dengan menggunakan minimal 3 Slave dan 1 Master. 
Nah, berikut ini hasil dari perjuangan begadang selama 4 Hari dari jumat-Senin (03:00) WIB, walaupun masih ada kekurangan semoga bisa jadi referensi untuk teman-teman. 
---------------------------------------------------------------------------------------------------------------------
Dalam Project ini kami menggunkan 3 Jenis Komunikasi yang menggunakan 3 Slave ,jadi untuk setiap slave memiliki komunikasi yang berbeda-beda, dan memiliki 1 Master.
Gambarannya seperti ini ;
untuk komunikasi I2C dan RS485 kami gunakan untuk pembacaan nilai sensor , sedangkan  untuk SPI digunakan untuk mengirimkan data yang telah di dikirim ke master dan data tersebut di kirimkan ke PC untuk diparsing dan kirimkan kembali ke master dan master mengirimkan kembali ke slave (aktuator ) dengan menggunakan komunikasi SPI. 
Design Room
Dalam setiap ruangan terdapat 3 komunikasin dimana I2C dan RS485 akan dikolaborasi untuk mempengaruhi Aktuator yang menggunakan SPI. Berikut ini sensor dan aktuator yang digunakan; 
Pembagian Kerja 
Logika Slave1 dan Slave 2 terhadap Slave 3
Secara umum setiap ruangan memiliki kontrol ruangan, nah ini program yang ada di master dan slave :)
Master (Dionisius) 







Slave 1  (I2C)
//Port 4 Slave
#include<Wire.h>
void setup(){
  Wire.begin(2);
  Wire.onRequest(requestEvent);
}

void loop(){
  delay (100);
}
void requestEvent() {
//  unsigned int dataADC =analogRead(A0);
//  unsigned int dataADC1 =analogRead(A1);
//  unsigned int dataADC2 =analogRead(A2);
  unsigned int dataADC1 =analogRead(A0);
  unsigned int dataADC2 =analogRead(A1);
  unsigned int dataADC3 =analogRead(A2);
  unsigned int dataADC4 =analogRead(A3);
  unsigned int dataADC5 =analogRead(A4);
  unsigned int dataADC6 =digitalRead(2);
  unsigned char dataI2C[12];
  dataI2C[0]=lowByte(dataADC1);
  dataI2C[1]=highByte(dataADC1);
  dataI2C[2]=lowByte(dataADC2);
  dataI2C[3]=highByte(dataADC2);
  dataI2C[4]=lowByte(dataADC3);
  dataI2C[5]=highByte(dataADC3);
  dataI2C[6]=lowByte(dataADC4);
  dataI2C[7]=highByte(dataADC4);
  dataI2C[8]=lowByte(dataADC5);
  dataI2C[9]=highByte(dataADC5);
  dataI2C[10]=lowByte(dataADC6);
  dataI2C[11]=highByte(dataADC6);
  Wire.write(dataI2C,12);
   //Wire.write("123vnb12gj3423");
}


Slave 2(RS485)
//Slave Kirim Data
#include <SoftwareSerial.h>
SoftwareSerial RS485Serial(5, 6); //RX =10 TX = 11
int data1, data2, data3, data4, data5, data6;
const int pingPin = 7;

void setup() {
  // put your setup code here, to run once:
  pinMode(3, OUTPUT);
  digitalWrite(3, LOW);
  RS485Serial.begin(9600);
  //Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  long duration, cm;
  int s;
  data1 = analogRead(A0);//RANGE MAX 255
  data2 = analogRead(A1);//RANGE MAX 255
  data3 = analogRead(A2);//RANGE MAX 255
  data4 = analogRead(A3);
  //data5 = 55;
  data6 = analogRead(A5)/4;
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);

  pinMode(pingPin, INPUT);
  duration = pulseIn(pingPin, HIGH);

  // convert the time into a distance
  cm = microsecondsToCentimeters(duration);
  data5 = cm;


//  Serial.print(data1);
//  Serial.print("\t");
//  Serial.print(data2);
//  Serial.print("\t");
//  Serial.print(data3);
//  Serial.print("\t");
//  Serial.print(data4);
//  Serial.print("\t");
//  Serial.print(data6);
//  Serial.print("\n");
  digitalWrite(3, HIGH); //Set DE RE Transmit Data
  RS485Serial.write(data1);
  RS485Serial.write(data2);
  RS485Serial.write(data3);
  RS485Serial.write(data4);
  RS485Serial.write(data5);
  RS485Serial.write(data6);
  delay(100);
}

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;
}

PC (Krismametra)
Tampilan C# 
Interface di C# digunakan untuk memparsing data yang telah diterima dari Master.
Data yang dikirim Maser to PC
Program C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            string[] nama_port = System.IO.Ports.SerialPort.GetPortNames(); //mendapatkan nama port dalam bentuk array
            comport.Items.AddRange(nama_port); //menambahkan item array nama port pada combo box1
            //menambahkan item pada combo box2
            Baudrate.Items.Add("300");
            Baudrate.Items.Add("1200");
            Baudrate.Items.Add("4600");
            Baudrate.Items.Add("9600");
            Baudrate.Items.Add("19200");
            Baudrate.Items.Add("57600");
            Baudrate.Items.Add("115200");
            //menampilkan tanggal dan waktu pada form1
            label3.Text = DateTime.Now.ToLongDateString();
            label4.Text = DateTime.Now.ToShortTimeString();
        }

        //daftar variabel yang digunakan
        string datamasuk;
        double slave2_photodioda, slave2_photodioda1, slave2_photodioda2, slave2_lmtswtch, slave2_ldr, slave2_ping, slave1_photodioda, slave1_photodioda1, slave1_ldr, slave1_ldr1, slave1_lm35, slave1_gas;
        int slave3_akuatormotor, slave3_akuatorled, slave3_akuatorled1, slave3_akuatorled2, slave3_akuatorbzr1, slave3_akuatorbzr;
            


        private void connect_Click(object sender, EventArgs e)
        {
            if (connect.Text == "CONNECT")
            {
                try
                {
                    serialPort1.PortName = (comport.SelectedItem).ToString(); //mengambil nama string dari combo box1 yang dipilih
                    serialPort1.BaudRate = Convert.ToInt32(Baudrate.SelectedItem); // mengambil nilai baudrate dari combo box2 yang dipilih
                    serialPort1.Open(); //srialport1 buka
                    timer1.Enabled = true; //aktifkan fungsi timer1
                    connect.Text = "DISCONNECT"; //tulisan di button diganti menjadi DISCONNECT
                }
                catch
                {
                    MessageBox.Show("Program gagal merespon");
                    this.Close();
                }
            }
            else if (connect.Text == "DISCONNECT")
            {
                try
                {
                    serialPort1.Close(); //serialport1 ditutup
                    timer1.Enabled = false; //timer1 dinon-aktifkan
                    connect.Text = "CONNECT"; //tulisan di button diganti menjadi CONNECT
                }
                catch
                {
                    MessageBox.Show("Program gagal merespon");
                    this.Close();
                }
            }
        }
  
        private void timer1_Tick(object sender, EventArgs e)
        {
            datamasuk = serialPort1.ReadLine(); //membaca data yang masuk di serialport1
            string[] dat = datamasuk.Split(','); //data diparsing sesuai koma
            if (dat.Length == 14) //jika panjang data array 14
            {
                if (dat[0].CompareTo("AA") == 0) //header
                {
                    dat[13] = "BB"; //tail
                    if (dat[0] == "AA" && dat[13] == "BB")//jika header dan tail sesuai
                    {
                        //Simpan data ke variabel sensor
                        slave1_photodioda = Convert.ToDouble(dat[1]); // variabel untuk menampung data sensor photodioda pada slave 1
                        slave1_photodioda1 = Convert.ToDouble(dat[2]); // variabel untuk menampung data sensor photodioda1 pada slave 1
                        slave1_ldr = Convert.ToDouble(dat[3]); // variabel untuk menampung data sensor ldr pada slave 1
                        slave1_ldr1 = Convert.ToDouble(dat[4]); // variabel untuk menampung data sensor ldr1 pada slave 1 
                        slave1_lm35 = Convert.ToDouble(dat[5]); // variabel untuk menampung data sensor lm35 pada slave 1
                        slave1_gas = Convert.ToDouble(dat[6]); // variabel untuk menampung data sensor gas pada slave 1
                        slave2_photodioda = Convert.ToDouble(dat[7]); // variabel untuk menampung data sensor photodioda pada slave 2
                        slave2_photodioda1 = Convert.ToDouble(dat[8]); // variabel untuk menampung data sensor photodioda1 pada slave 2
                        slave2_photodioda2 = Convert.ToDouble(dat[9]); // variabel untuk menampung data sensor photodioda2 pada slave 2
                        slave2_ldr = Convert.ToDouble(dat[10]); // variabel untuk menampung data sensor ldr pada slave 2
                        slave2_ping = Convert.ToDouble(dat[11]); // variabel untuk menampung data sensor ping pada slave 2
                        slave2_lmtswtch = Convert.ToDouble(dat[12]); // variabel untuk menampung data sensor limit switch pada slave 2
                        //tampilkan data sensor pada textbox
                        //data-data di SLAVE 1 (I2C)
                        textBox1.Text = dat[1]; //data1
                        textBox2.Text = dat[2]; //data2
                        textBox3.Text = dat[3]; //data3
                        textBox4.Text = dat[4]; //data4
                        textBox5.Text = dat[5]; //data5
                        textBox6.Text = dat[6]; //data6
                        //data-data di SLAVE2 (RS485)
                        textBox7.Text = dat[7]; //data7
                        textBox8.Text = dat[8]; //data8
                        textBox9.Text = dat[9]; //data9
                        textBox13.Text = dat[10]; //data10
                        textBox11.Text = dat[11]; //data11
                        textBox10.Text = dat[12]; //data12
                    }
                }
            }
            //DATA UNTUK AKUATOR
            //AKUATOR 1 BUZZER
            if (slave2_photodioda <= 20 || slave1_photodioda <= 100)
            {
                slave3_akuatorbzr = 1;
            }
            else
            {
                slave3_akuatorbzr = 0;
            }
            //AKUATOR 2 LED
            if (slave2_photodioda1 <= 20 && slave1_photodioda1 <= 100)
            {
                slave3_akuatorled = 1;
            }
            else
            {
                slave3_akuatorled = 0;
            }
            //AKUATOR 3 LED 1
            if (slave2_photodioda2 <= 20 || slave1_ldr >= 700)
            {
                slave3_akuatorled1 = 1;
            }
            else
            {
                slave3_akuatorled1 = 0;
            }
            //AKUATOR 4 LED 2
            if (slave2_ldr >= 100 && slave1_ldr1 >= 700)
            {
                slave3_akuatorled2 = 1;
            }
            else
            {
                slave3_akuatorled2 = 0;
            }
            //AKUATOR 5 MOTOR
            if (slave2_ping <= 5 || slave1_lm35 >= 50)
            {
                slave3_akuatormotor = 1;
            }
            else
            {
                slave3_akuatormotor = 0;
            }
            //AKUATOR 6 BUZZER 1
            if (slave1_gas == 0)
            {
                slave3_akuatorbzr1 = 1;
            }
            else if ( slave2_lmtswtch ==255 || slave1_gas == 1 )
            {
                slave3_akuatorbzr1 = 0;
            }
            //MENGIRIM DATA AKUATOR KE MASTER
            serialPort1.Write('~' + slave3_akuatorbzr.ToString() + '!' + slave3_akuatorled.ToString() + '@' + slave3_akuatorled1.ToString() + '#' + slave3_akuatorled2.ToString()
            + '$' + slave3_akuatormotor.ToString() + '%' + slave3_akuatorbzr1.ToString() + '^' + "\n");

            //tess mengirim data
            richTextBox1.Text = '~' + slave3_akuatorbzr.ToString() + '!' + slave3_akuatorled.ToString() + '@' + slave3_akuatorled1.ToString() + '#' + slave3_akuatorled2.ToString()
            + '$' + slave3_akuatormotor.ToString() + '%' + slave3_akuatorbzr1.ToString() + '^' + "\n";
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            serialPort1.Close(); //serialport1 ditutup
            timer1.Enabled = false; //timer1 di non-aktifkan
        }
    }
}


Terima Kasih 
Semoga Bermanfaat 
Salam Mekatronika :)





UAS INTERFACE DONE18 /01/2016




Comments

Popular posts from this blog

Magang Industri di PT Citra Tubindo TBK

Assalamualaikum Sahabat, Pagi ini tanggal 31 Desember 2017, diluar sedang turun hujan. Aku sedang di kamar sambil memutar lagu virgoun-bukti. Sebelum tahun ini berlalu aku ingin membuat rangkaian cerita diawal tahun 2017 yang sudah berlalu. Why? karena bagiku tahun ini tahun istimewa untukku. Walaupun setiap tahun tentu saja selalu menyimpan ceritanya sendiri.  Izinkan aku menceritakan pengalaman yang aku dapatkan diawal tahun ini.   Statusku masih menjadi mahasiswa aktif tingkat akhir di Politeknik Negeri Batam dan harus menjalani proses magang. Terus magang dimana? di Citra Tubindo. Caranya gimana? Ok biar ku beritahu.  MAGANG DI CITRA TUBINDO TBK Polibatam dan Citra tubindo sudah menjalani kerja sama untuk program magang. Jadi kalau kalian berminat yang perlu kalian cari tahu di web polibatam atau ke TPS jurusan kalian. Terus aku taunya dari sana? enggak sih, saat itu kami memang diberi tahu langsung dari jurusan. Yap kami ditawari untuk magang disana. Waktu itu i

Tonsilektomi (Operasi Amandel)

Assalamualaikum sahabat semua. Beberapa hari yang lalu saya baru saja melakukan operasi amandel, nah saya mau sedikit sharing nih mekanisme pengajuan operasi amandel kalau teman-teman mau mengajukannya lewat BPJS.  Oke saya mulai pada tanggal 26 Juli lalu nah untuk awal kita melakukan pengecekan di klinik yang ada di BPJS yang tertera di kartu BPJS kita, Nah kemudian disana diperiksa biasa dengan dokter yang ada, waktu diperiksa dokter langsung mengajukan saya untuk operasi dan saya langsung meng-"IYA" kan setelah itu dari klinik itu saya dikasih surat rujukan di Rumah sakit Casa (Kelas C) karena untuk rujukan awal jadi harus kesana dulu kata perawatnya sih gitu. Tanggal 27 Julinya saya kerumah sakit Casa dan menemui dokter THT disana, jangan lupa untuk bawa surat rujukan, kartu BPJS dan KTP karena nanti mereka minta fotocopyanya sediain aja masing-masing 2 copyan, Setelah itu saya di periksa dokter THT disana,  nah kata dokternya sih yang bermasalah itu karena hidung sa

Ikatan Mahasiswa Muslim Politeknik Negeri Batam (IMMPB)

Assalamualaikum Apa kabar sahabat ? itu sapaan saya kepada sahabat-sahabat saya di IMMPB , organisasi yang saya cintai 6 bulan belakangan ini. saya di amanahi mejadi sekretaris dalam periode ini di organisasi ini. suka senang sangat dirasakan dalam perjalannya." Ini organisasi sosial tidak ada paksaan di dalam menjalankannya" kalimat itu selalu saya ingat kalimat itu disampaikan oleh pembina kami bapak kamarudin. selama ini beliau sangat membantu kami dalam menjalankan roda organisasi ini, IMMPB ini sudah seumuran dengan politeknik negeri batam sekarang IMMPB sudah berumur 13th ,IMMPB lahir 1 November 2001 motto kami TIADA HARI TANPA AMAL . Disini saya berjumpa para sahabat yang luar biasa yang selalu ada untuk melaksankan program-program yang direncanakan,walaupun masih ada kendala tapi itu harus menjadi cambuk semangat untuk kami kedepanya. karena kami semua telah menjadi keluarga dalam satu ikatan dalam satu naungan bernama IMMPB. Dan ini adalah pejuang ,sahabat,dan kel