• Tidak ada hasil yang ditemukan

BAB VI KESIMPULAN DAN SARAN

6.2 Saran

DAFTAR PUSTAKA

[1] A. Musthafa, R. V. H. Ginardi, and A. Arunanto, “Sistem Navigasi Indoor Menggunakan Sinyal Wi-Fi dan Kompas Digital Berbasis Integrasi dengan Smartphone untuk Studi Kasus pada Gedung Bertingkat,” J. Tek. ITS, vol. 5, Oct. 2016, doi:

10.12962/j23373539.v5i2.17407.

[2] V. J. Expósito Jiménez, C. Schwarzl and H. Martin, "Evaluation of an indoor localization system for a mobile robot," 2019 IEEE International Conference on Connected Vehicles and Expo (ICCVE), Graz, Austria, 2019, pp. 1-5, doi: 10.1109/ICCVE45908.2019.8965234.

[3] V. J. E. Jiménez, C. Schwarzl, and H. Martin, “Evaluation of an indoor localization system for a mobile robot,” in 2019 IEEE International Conference on Connected Vehicles and Expo (ICCVE), 2019, pp. 1–5, doi: 10.1109/ICCVE45908.2019.8965234.

[4] S. Macenski, T. Foote, and B. Gerkey, “Robot Operating System 2: Design, architecture, and uses in the wild,” 2021.

[5] A. Koubaa, Robot Operating System - The Complete Reference (Volume 4). 2019.

[6] U. Ros, T. Ros, P. Server, and T. Ros, “EE106A : Lab 1 - Introduction to Robot Operating System ( ROS ),” pp. 1–10, 2017.

[7] A. P. More, M. S. Patil, R. V. Patil, S. S. Saudagar, and C. Engineering, “Autonomous Car Using,” vol. 7, no. 4, pp. 311–313, 2020.

LAMPIRAN

Lembar Penilaian

Laporan Kehadiran Kerja Praktik

Nama Perusahaan : Badan Riset dan Inovasi Nasional

Kode Kelompok : 06

Nama/NIM : Erdianto P. Sitorus /14S20009

Judul/Topik Kerja Praktik : Sistem Kendaraan Otonom

Minggu Tanggal Jam Kerja Tanda Tangan Mahasiswa

Tanda Tangan Pembimbing

Lapangan

1

12/6/2023 08.00-17.00

13/6/2023 08.00-17.00

14/6/2023 08.00-17.00

15/6/2023 08.00-17.00

16/6/2023 08.00-21.00

2

19/6/2023 08.00-17.00

20/6/2023 08.00-17.00

21/6/2023 08.00-17.00

22/6/2023 08.00-17.00

23/6/2023 08.00-17.00

3

26/6/2023 08.00-17.00

27/6/2023 08.00-17.00

28/6/2023 Libur Hari Raya Idul

Adha 1444 Hijriah Libur Hari Raya Idul

Adha 1444 Hijriah Libur Hari Raya Idul Adha 1444 Hijriah 29/6/2023 Libur Hari Raya Idul

Adha 1444 Hijriah Libur Hari Raya Idul

Adha 1444 Hijriah Libur Hari Raya Idul Adha 1444 Hijriah 30/6/2023 Libur Hari Raya Idul

Adha 1444 Hijriah

Libur Hari Raya Idul Adha 1444 Hijriah

Libur Hari Raya Idul Adha 1444 Hijriah

4 3/7/2023 08.00-17.00

4/7/2023 08.00-17.00

5/7/2023 08.00-17.00

6/7/2023 08.00-17.00

7/7/2023 08.00-17.00

5

10/7/2023 08.00-17.00

11/7/2023 08.00-17.00

12/7/2023 08.00-17.00

13/7/2023 08.00-17.00

14/7/2023 08.00-17.00

6

17/7/2023 08.00-17.00

18/7/2023 08.00-17.00

19/7/2023 Libur Nasional: Tahun

Baru Islam Libur Nasional:

Tahun Baru Islam

Libur Nasional:

Tahun Baru Islam

20/7/2023 08.00-17.00

21/7/2023 08.00-17.00

7

24/7/2023 08.00-17.00

25/7/2023 08.00-17.00

26/7/2023 08.00-17.00

27/7/2023 08.00-17.00

28/7/2023 08.00-17.00

8

31/7/2023 08.00-17.00

1/8/2023 08.00-17.00

2/8/2023 08.00-17.00

3/8/2023 08.00-17.00

4/8/2023 08.00-17.00

9

7/8/2023 08.00-17.00

8/8/2023 08.00-17.00

9/8/2023 08.00-17.00

10/8/2023 08.00-17.00

11/8/2023 08.00-17.00

10

14/8/2023 08.00-17.00

15/8/2023 08.00-17.00

16/8/2023 08.00-17.00

17/8/2023

Hari Kemerdekaan Republik Indonesia ke 78

Hari Kemerdekaan Republik Indonesia ke 78

Hari Kemerdekaan Republik Indonesia ke 78

18/8/2023 08.00-17.00

11

21/8/2023 08.00-17.00

22/8/2023 08.00-17.00

23/8/2023 08.00-17.00

24/8/2023 08.00-17.00

25/8/2023 08.00-17.00

Bandung, Menyetujui,

Dilaporakan oleh. Pembimbing Lapangan

(Erdianto P. Sitorus) (Erik Adiwiguna)

FAKULTAS INFORMATIKA DAN TEKNIK ELEKTRO (FITE)

Jl. Sisingamangaraja, Sitoluama, Laguboti, Kabupaten Toba Samosir, Sumatera Utara 22381. Phone : (0632) – 331234 / Fax : (0632) – 331116 / http :

Laporan Kegiatan Kerja Praktik

Nama Perusahaan : Badan Riset dan Inovasi Nasional

Kode Kelompok : 06

Anggota : 14S20009 / Erdianto P. Sitorus

Judul/Topik Kerja Praktik : Riset Sistem Otonom Kendaraan Listrik (Autonomous Vehicle) Perioda : Minggu ke 1, Tanggal 12 Juni s/d 16 Juni 2023

Tahapan Kerja :

Target Deliverable

Rincian Kegiatan Mingguan Minggu ke : 1

No Hari/

Tanggal

Perioda Jam Kerja

Kegiatan PIC

1 Senin/

12 Juni 2023

08.00 – 17.00  Membuat program nodeMCU Esp8266 dapat membaca sensor DFrobot Gravity.

 Menghitung pulse pada oscilloscope (membuat perhitungan pada program agar ukuran pulse tepat ditampilkan oscilloscope

 Mempelajari Driver motor servo agar bisa membuat komunikasi dengan nodeMCU ESP8266 menggunakan komunikasi I2C. Driver motor servo (I2C) membangkitkan tenaga pwm / energi pwm. Output yang dikendalikan oleh pwm, output serial dari oscilloscope.

 Belajar bersama pembimbing mengenai code untuk dapat merotasikan dan menghitung serta mengatur kecepatan roda berputar pada mobil mobil remote.

 Afrias Soratama

 Erik Adiwiguna

2 Selasa/

13 Juni 2023

08.00 – 17.00

 Mencoba komunikasi serial dengan menggunakan library pyserial.

 Mempelajari structure phyton pada code sensor DFrobot Gravity.

 Melakukan percobaan untuk membuat sensor Dfrobot dapat menerima data dengan baik.

 Afrias Soratama

 Erik Adiwiguna

 Membuat sensor Dfrobot agar dapat membaca data (rotasi) dengan baik dimonitor

 Menyesuaikan library pada DfRobot_BnO05 agar IMO dapat membaca data dengan baik

 Pembimbing menjelaskan IndoorGPS agar dapat melakukan pelacakan sesuatu benda.

3 Rabu/

14 Juni 2023

08.00 – 17.00  Penjelasan pengenalan Indoor Positioning System dan Marvelmind Robotic untuk dapat digunakan sebagai pelacakan indoor menggunakan teknologi beacon.

 Melakukan percobaan pada Indoor GPS agar dapat berjalan pada software dan juga dapat di deteksi pelacakannya.

 Afrias Soratama

 Erik Adiwiguna

4 Kamis/

15 Juni 2023

08.00 – 17.00  Pengenalan software INAV (aplikasi opensource yang dikembangkan untuk mengendalikan kendaraan otonom).

 Membuat waypoints Kawasan P2 Telimek LIPI Bandung di software INAV agar kendaraan otonom bisa bergerak sesuai dengan titik atau waypoints yang telah ditentukan

 Afrias Soratama

 Erik Adiwiguna

5 Jumat/

16 juni 2023

08.00 – 17.00  Pengenalan aplikasi OpenCPN (aplikasi opensource yang dibuat untuk navigasi)

 Membuat Indoor GPS Marvelmind dapat dibaca di serial

 Membuat peta Kawasan P2 Telimek LIPI di aplikasi OpenCpN guna agar kendaraan otonom berjalan dikawasan yang kita inginkan dan dapat kembali juga ke Kawasan awal.

 Membuat Indoor GPS Marvelmind dapat dibaca di phyton.

 Melakukan perhitungan jarak (kordinat X, Y, Z) pada Indoor GPS Marvelmind

 Afrias Soratama

 Erik Adiwiguna

Bandung, 16 Juni 2023

Dilaporkan oleh, Menyetujui,

Erdianto Sitorus Erik Adiwiguna

Laporan Kegiatan Kerja Praktik

Nama Perusahaan : Badan Riset dan Inovasi Nasional

Kode Kelompok : 06

Anggota : 14S20009 / Erdianto P. Sitorus

Judul/Topik Kerja Praktik : Riset Sistem Otonom Kendaraan Listrik (Autonomous Vehicle) Perioda : Minggu ke 2, Tanggal 19 Juni s/d 23 Juni 2023

Tahapan Kerja :

Target Deliverable

Rincian Kegiatan Mingguan Minggu ke : 2

No Hari/Tanggal Kegiatan PIC

1 Senin/ 19 Juni 2023

Membuat hasil output dari serial Arduino IDE dapat ditampilkan di phyton

Hasil pembacaan peta dari Indoor GPS dapat ditampilkan di phyton

Melakukan percobaan menyambungkan Indoor GPS ke python

Afrias Soratama

Erik Adiwiguna

2 Selasa/ 20 Juni 2023

Melakukan percobaan data sensor DFrobot dapat dibaca di phyton

Membuat peta Bandung di aplikasi OpenCPN

Afrias Soratama

Erik FAKULTAS INFORMATIKA DAN TEKNIK ELEKTRO (FITE)

Jl. Sisingamangaraja, Sitoluama, Laguboti, Kabupaten Toba Samosir, Sumatera Utara 22381. Phone : (0632) – 331234 / Fax : (0632) – 331116 / http :

Membuat waypoints untuk wilayah Bandung di aplikasi OpenCPN

Adiwiguna

3 Rabu/ 21 Juni 2023

Membahas mengenai kecepatan roda kiri dan kanan serta rotasi roda yang baik agar perputaran arah pada saat roda berjalan dapat dilakukan dengan baik dan benar.

Membahas mengenai Robotic Operating System (ROS) di linux. Pada ROS dapat mengarahkan turtle ke kanan , ke kiri. Untuk kegiatan ini diminta agar dapat membuat roda bergerak maju, mundur, ke kiri, ke kanan melalui

komunikasi di windows terlebih dahulu.

Afrias Soratama

Erik Adiwiguna

4 Kamis/ 22 Juni 2023

Membuat komunikasi Indoor GPS Marvelmind menggunakan ROS (Robot Operating System) yang bertujuan menampilkan koordinat dari heaghod (landak) di linux. Dan ada yang namanya subscriber yang

menampung data dari posisi landaknya.Ada juga display yang menampilkkan posisi dari landaknya.

Membuat pulse agar dapat ditampilkan pada oscilloscope dengan menyambungkan ground dan pin D1 pada pin nodeMCU esp8266

Afrias Soratama

Erik Adiwiguna

5 Jumat/ 23 juni 2023

Melakukan Instalasi ROS (Robot Operating System) di linux

Melakukan konfigurasi Indoor GPS Marvelmind di windows dan heaghod (landak) dihubungkan ke linux yang ada di raspberry pi

Afrias Soratama

Erik Adiwiguna

Bandung, 19 Juni 2023

Dilaporkan oleh, Menyetujui,

Erdianto Sitorus Erik Adiwiguna

Laporan Kegiatan Kerja Praktik

Nama Perusahaan : Badan Riset dan Inovasi Nasional

Kode Kelompok : 06

Anggota : 14S20009 / Erdianto P. Sitorus

Judul/Topik Kerja Praktik : Riset Sistem Otonom Kendaraan Listrik (Autonomous Vehicle) Perioda : Minggu ke 3, Tanggal 26 Juni s/d 30 Juni 2023

Tahapan Kerja :

Target Deliverable

Rincian Kegiatan Mingguan Minggu ke : 3

No Hari/Tanggal Kegiatan PIC

1 Senin/ 26 Juni

2023  Mencoba menjalakan turtleROS di windows dan raspberry pi.

 Mencoba menjalankan turtleROS di windows dan dapat dikontrol di raspberry pi.

 Afrias Soratama

 Erik Adiwiguna FAKULTAS INFORMATIKA DAN TEKNIK ELEKTRO (FITE)

Jl. Sisingamangaraja, Sitoluama, Laguboti, Kabupaten Toba Samosir, Sumatera Utara 22381. Phone : (0632) – 331234 / Fax : (0632) – 331116 / http :

 Mencoba menjalankan turtleROS di raspberry pi dan dapat mengontrolnya di windows

 Mencoba menjalankan turtleROS disistem operasi windows dan linux yang terdapat pada mobil autonomy.

2 Selasa/ 27 Juni

2023  Membahas pergerakan mobil untuk tahap awal dalam keadaan maju dan mundur yang dijalan menggunakan ROStopic.

 Mempelajari dan mencari datasheet komponen yang digunakan pada mobil.

 Afrias Soratama

 Erik Adiwiguna

3 Rabu/ 28 Juni 2023

Libur Hari Raya Idul Adha 1444 Hijriah Libur Hari Raya Idul Adha 1444 Hijriah

4 Kamis/ 29

Juni 2023 Libur Hari Raya Idul Adha 1444 Hijriah Libur Hari Raya Idul Adha 1444

Hijriah 5 Jumat/ 30 juni

2023

Libur Hari Raya Idul Adha 1444 Hijriah Libur Hari Raya Idul Adha 1444 Hijriah

Bandung, 30 Juni 2023

Dilaporkan oleh, Menyetujui,

Erdianto Sitorus Erik Adiwiguna

Laporan Kegiatan Kerja Praktik

Nama Perusahaan : Badan Riset dan Inovasi Nasional

Kode Kelompok : 06

Anggota : 14S20009 / Erdianto P. Sitorus

Judul/Topik Kerja Praktik : Riset Sistem Otonom Kendaraan Listrik (Autonomous Vehicle) Perioda : Minggu ke 4, Tanggal 3 Juli s/d 7 Juli 2023

Tahapan Kerja :

Target Deliverable

Rincian Kegiatan Mingguan Minggu ke : 4

No Hari/Tanggal Kegiatan PIC

1 Senin/ 3 Juli 2023

 Membahas mengenai bagaimana komunikas dengan ROS dari serial,

Contoh : Bagaimana mengirimkan melalui ROS sampai

 Afrias Soratama

 Erik FAKULTAS INFORMATIKA DAN TEKNIK ELEKTRO (FITE)

Jl. Sisingamangaraja, Sitoluama, Laguboti, Kabupaten Toba Samosir, Sumatera Utara 22381. Phone : (0632) – 331234 / Fax : (0632) – 331116 / http :

ke serial agar dapat menghidupkan LED pada Arduino DUE, menggerakkan servo.

 Membahas mengenai ESP8266 dengan Arduino UNO. ESP8266 merupakan pengembangan dari Arduino UNO.

Bedanya :

 Mencoba Arduino UNO untuk komunikasi serial, melakukan instalasi ROS pada windows dan raspberry pi lalu Arduino IDE Set Up. Kemudian mencoba Arduino Due untuk komunikasi serialnya.

code :

Adiwiguna

2 Selasa/ 4 Juli 2023

 Membahas bagaimana cara mendapatkan koordinat belok kanan dan kiri dengan range -1 sampai 1pada mobil.

 Afrias Soratama

 Erik

 Melakukan instalasi pygame pada windows dan raspberry pi, menjalankan pygame dimana publisher ROS (window) akan mengirimkan data (arah,gas) ke subscriber (raspberry pi).

 Mencari referensi mengenai code untuk dapat mengirimkan data joystick melalui windows ke raspberry pi .

Adiwiguna

3 Rabu/ 5 Juli 2023

 Mencari kode referensi untuk dapat mengirimkan data joystick dari window ke raspberty pi

 Melakukan instalasi board Arduino DUE pada windows untuk dapat menghidupkan dan mematikan LED pada Arduino DUE.

 Afrias Soratama

 Erik Adiwiguna

4 Kamis/ 6 Juli 2023

 Mencoba turtle ROS dari windows ke raspberry pi.

 Membahas code untuk menghidupkan LED Arduino Due yang sudah dipasang pada mobil dan mencoba mematikan dan menghidupkan LED tersebut pada saat roda berputar dan berhenti.

 Afrias Soratama

 Erik Adiwiguna

5 Jumat/ 7 juli 2023

 Memperbaiki code dengan menambahkan tiga kondisi pada pergerakan mobil yaitu : maju, mundur, dan berhenti.

 Melakukan instalasi board Arduino DUE pada raspberry pi untuk dapat menghidupkan dan mematikan LED Arduino DUE.

 Afrias Soratama

 Erik Adiwiguna

 Mencoba menjalankan roda mobil pada tiga kondisi yang telah ditentukan pada pc masing masing.

Bandung, 7 Juli 2023

Dilaporkan oleh, Menyetujui,

Erdianto Sitorus Erik Adiwiguna

Laporan Kegiatan Kerja Praktik

Nama Perusahaan : Badan Riset dan Inovasi Nasional

Kode Kelompok : 06

Anggota : 14S20009 / Erdianto P. Sitorus

Judul/Topik Kerja Praktik : Riset Sistem Otonom Kendaraan Listrik (Autonomous Vehicle) Perioda : Minggu ke 5, Tanggal 10 Juli s/d 14 Juli 2023

Tahapan Kerja :

Target Deliverable

Rincian Kegiatan Mingguan Minggu ke : 5

No Hari/Tanggal Kegiatan Pelaksanaa n

PIC

1 Senin/

10 Juli 2023

 Membuat program Arduino untuk dapat menggerakkan roda dalam tiga keadaan yaitu : maju, mundur, dan berhenti menggunakan joysctick.

Code :

 Angelin Purba

 Erdianto Sitorus

 Rai

 Afrias Soratama

 Erik Adiwigun a

FAKULTAS INFORMATIKA DAN TEKNIK ELEKTRO (FITE)

Jl. Sisingamangaraja, Sitoluama, Laguboti, Kabupaten Toba Samosir, Sumatera Utara 22381. Phone : (0632) – 331234 / Fax : (0632) – 331116 / http :

/*

* rosserial Subscriber Example * Blinks an LED on callback */

#define USE_USBCON

#include <ros.h>

#include <std_msgs/Empty.h>

#define STEP_PIN1 5 // Connect the driver's step pin to pin 5

#define DIRECTION_PIN1 6 // Connect the driver's direction pin pin 6

#define STEP_PIN2 7 // Connect the driver's step pin to pin 5

#define DIRECTION_PIN2 8 // Connect the driver's direction pin pin 6

#define VRM1 22

#define CW1 23

#define RUN1 24

#define VRM2 26

#define CW2 27

#define RUN2 28

#define BERHENTI 0

#define MAJU 1

#define MUNDUR -1 int keadaan;

ros::NodeHandle nh;

void messageCb( const std_msgs::Empty&

toggle_msg){

digitalWrite(LED_BUILTIN, HIGH-

Yunus Sihombin g

digitalRead(LED_BUILTIN)); // blink the led if(keadaan==MAJU){

keadaan=MUNDUR;

}else{

keadaan=MAJU;

} }

ros::Subscriber<std_msgs::Empty>

sub("toggle_led", &messageCb );

void setup() {

pinMode(LED_BUILTIN, OUTPUT);

nh.initNode();

nh.subscribe(sub);

pinMode(STEP_PIN1, OUTPUT);

pinMode(DIRECTION_PIN1, OUTPUT);

pinMode(STEP_PIN2, OUTPUT);

pinMode(DIRECTION_PIN2, OUTPUT);

pinMode(VRM1, OUTPUT);

pinMode(CW1 , OUTPUT);

pinMode(RUN1, OUTPUT);

pinMode(VRM2, OUTPUT);

pinMode(CW2 , OUTPUT);

pinMode(RUN2, OUTPUT);

delay(10);

digitalWrite(RUN1, HIGH);

delay(10);

digitalWrite(CW1, LOW);

delay(10);

digitalWrite(RUN1, LOW);

digitalWrite(VRM1, HIGH);

keadaan = MAJU;

maju();

}

void maju() {

delay(10);

digitalWrite(RUN2, HIGH);

delay(10);

digitalWrite(CW2, HIGH);

delay(10);

digitalWrite(RUN2, LOW);

digitalWrite(VRM2, HIGH);

}

void mundur() {

delay(10);

digitalWrite(RUN2, HIGH);

delay(10);

digitalWrite(CW2, LOW);

delay(10);

digitalWrite(RUN2, LOW);

digitalWrite(VRM2, HIGH);

}

void loop() {

if(keadaan==MAJU){

MoveSteps1(5, 600);

MoveSteps2(-5, 600);

}else if(keadaan==MUNDUR){

MoveSteps1(-5, 600);

MoveSteps2(5, 600);

}

nh.spinOnce();

delay(1);

}

void MoveSteps1(int steps, unsigned int microsecondStepDelay)

{

if (steps < 0){

digitalWrite(DIRECTION_PIN1, LOW); //

Set counter-clockwise direction }else{

digitalWrite(DIRECTION_PIN1, HIGH); //

Set clockwise direction }

// Moves desired number of steps

// Motor rotates one step when STEP_PIN changes from HIGH to LOW

for(int i = 0; i < abs(steps); i++){

digitalWrite(STEP_PIN1, HIGH);

delayMicroseconds(microsecondStepDelay/2 );

digitalWrite(STEP_PIN1, LOW);

delayMicroseconds(microsecondStepDelay/2 );

} }

void MoveSteps2(int steps, unsigned int microsecondStepDelay)

{

if (steps < 0){

digitalWrite(DIRECTION_PIN2, LOW); //

Set counter-clockwise direction }else{

digitalWrite(DIRECTION_PIN2, HIGH); //

Set clockwise direction }

// Moves desired number of steps

// Motor rotates one step when STEP_PIN changes from HIGH to LOW

for(int i = 0; i < abs(steps); i++){

digitalWrite(STEP_PIN2, HIGH);

delayMicroseconds(microsecondStepDelay/2 );

digitalWrite(STEP_PIN2, LOW);

delayMicroseconds(microsecondStepDelay/2 );

} }

 Melakukan modifikasi pada code program untuk dapat membuat roda berjalan dengan 3 keadaan yaitu : maju, mundur, berhenti sesuai dengan angka yang diinput pada joy stick.

Code:

/*

* rosserial Subscriber Example * Blinks an LED on callback */

#define USE_USBCON

#include <ros.h>

#include <std_msgs/Float32.h>

#define STEP_PIN1 5 // Connect the driver's step pin to pin 5

#define DIRECTION_PIN1 6 // Connect the driver's direction pin pin 6

#define STEP_PIN2 7 // Connect the driver's step pin to pin 5

#define DIRECTION_PIN2 8 // Connect the driver's direction pin pin 6

#define VRM1 22

#define CW1 23

#define RUN1 24

#define VRM2 26

#define CW2 27

#define RUN2 28

#define BERHENTI 0

#define MAJU 1

#define MUNDUR -1 int keadaan;

ros::NodeHandle nh;

void messageCb( const std_msgs::Float32&

cmd_msg){

digitalWrite(LED_BUILTIN, HIGH- digitalRead(LED_BUILTIN)); // blink the led if(cmd_msg.data>=-0.7 &&

cmd_msg.data<=0.7){

keadaan=BERHENTI;

berhenti();

}else if (cmd_msg.data>0.7){

keadaan=MAJU;

maju();

}else if (cmd_msg.data<-0.7){

keadaan=MUNDUR;

mundur();

} }

ros::Subscriber<std_msgs::Float32>

sub("turtle_traction", &messageCb );

void setup() {

pinMode(LED_BUILTIN, OUTPUT);

nh.initNode();

nh.subscribe(sub);

pinMode(STEP_PIN1, OUTPUT);

pinMode(DIRECTION_PIN1, OUTPUT);

pinMode(STEP_PIN2, OUTPUT);

pinMode(DIRECTION_PIN2, OUTPUT);

pinMode(VRM1, OUTPUT);

pinMode(CW1 , OUTPUT);

pinMode(RUN1, OUTPUT);

pinMode(VRM2, OUTPUT);

pinMode(CW2 , OUTPUT);

pinMode(RUN2, OUTPUT);

delay(10);

digitalWrite(RUN1, HIGH);

delay(10);

digitalWrite(CW1, LOW);

delay(10);

digitalWrite(RUN1, LOW);

digitalWrite(VRM1, HIGH);

keadaan = BERHENTI;

berhenti();

//keadaan = MAJU;

//maju();

//keadaan = MUNDUR;

//mundur();

}

void berhenti() {

delay(10);

digitalWrite(RUN2, LOW);

delay(10);

digitalWrite(CW2, LOW);

delay(10);

digitalWrite(RUN2, LOW);

digitalWrite(VRM2, LOW);

}

void maju() {

delay(10);

digitalWrite(RUN2, HIGH);

delay(10);

digitalWrite(CW2, HIGH);

delay(10);

digitalWrite(RUN2, LOW);

digitalWrite(VRM2, HIGH);

}

void mundur() {

delay(10);

digitalWrite(RUN2, HIGH);

delay(10);

digitalWrite(CW2, LOW);

delay(10);

digitalWrite(RUN2, LOW);

digitalWrite(VRM2, HIGH);

}

void loop() {

if(keadaan==MAJU){

MoveSteps1(5, 600);

MoveSteps2(-5, 600);

}else if(keadaan==MUNDUR){

MoveSteps1(-5, 600);

MoveSteps2(5, 600);

}

nh.spinOnce();

delay(1);

}

void MoveSteps1(int steps, unsigned int microsecondStepDelay)

{

if (steps < 0){

digitalWrite(DIRECTION_PIN1, LOW); //

Set counter-clockwise direction }else{

digitalWrite(DIRECTION_PIN1, HIGH); //

Set clockwise direction

}

// Moves desired number of steps

// Motor rotates one step when STEP_PIN changes from HIGH to LOW

for(int i = 0; i < abs(steps); i++){

digitalWrite(STEP_PIN1, HIGH);

delayMicroseconds(microsecondStepDelay/2 );

digitalWrite(STEP_PIN1, LOW);

delayMicroseconds(microsecondStepDelay/2 );

} }

void MoveSteps2(int steps, unsigned int microsecondStepDelay)

{

if (steps < 0){

digitalWrite(DIRECTION_PIN2, LOW); //

Set counter-clockwise direction }else{

digitalWrite(DIRECTION_PIN2, HIGH); //

Set clockwise direction }

// Moves desired number of steps

// Motor rotates one step when STEP_PIN changes from HIGH to LOW

for(int i = 0; i < abs(steps); i++){

digitalWrite(STEP_PIN2, HIGH);

delayMicroseconds(microsecondStepDelay/2 );

digitalWrite(STEP_PIN2, LOW);

delayMicroseconds(microsecondStepDelay/2 );

} }

2 Selasa / 11 Juli 2023

 Membuat code program python untuk mengendaikan mobil menggunakan joystick

Code :

import pygame import rospy

from std_msgs.msg import Float32 pygame.init()

rospy.init_node('joystick_control') class TextPrint:

# ... (kode TextPrint seperti pada contoh sebelumnya) ...

def main():

# ... (kode main seperti pada contoh sebelumnya) ...

# Buat publisher untuk mengirim perintah maju/mundur ke program Arduino pada Ubuntu pub = rospy.Publisher('turtle_traction', Float32, queue_size=1)

done = False while not done:

for event in pygame.event.get():

# ... (kode event handling seperti pada contoh sebelumnya) ...

 Angelin Purba

 Erdianto Sitorus

 Rai Yunus Sihombin g

 Afrias Soratama

 Erik Adiwigun a

if event.type ==

pygame.JOYAXISMOTION:

# Mengirim perintah maju/mundur ke program Arduino berdasarkan nilai sumbu joystick

if event.axis == 1: # Sumbu Y pada joystick

value = event.value if value >= 0.7:

pub.publish(1.0) # Maju elif value <= -0.7:

pub.publish(-1.0) # Mundur else:

pub.publish(0.0) # Berhenti # ... (kode tampilan dan update layar seperti pada contoh sebelumnya) ...

if _name_ == "_main_":

main()

pygame.quit() 3 Rabu/

12 Juli 2023

 Memodifikasi code program pada arduino agar mobil dapat berjalan dalam beberapa keadaan:

Berhenti;

Maju;

Mundur;

Majukanan;

Majukiri;

Mundurkanan;

Mundurkiri;

Putarkanan;

Putarkiri;

 Angelin Purba

 Erdianto Sitorus

 Rai Yunus Sihombin g

 Afrias Soratama

 Erik Adiwigun a

Code :

#define USE_USBCON

#include <ros.h>

#include <std_msgs/Float32.h>

// Pin untuk motor roda depan

#define FRONT_STEP_PIN 5

#define FRONT_DIRECTION_PIN 6

#define FRONT_VRM_PIN 22

#define FRONT_CW_PIN 23

#define FRONT_RUN_PIN 24 // Pin untuk motor roda belakang kiri

#define BACK_LEFT_STEP_PIN 7

#define BACK_LEFT_DIRECTION_PIN 8 // Pin untuk motor roda belakang kanan

#define BACK_RIGHT_STEP_PIN 9

#define BACK_RIGHT_DIRECTION_PIN 10

#define BERHENTI 0

#define MAJU 1

#define MUNDUR -1

#define MAJUKANAN 2

#define MAJUKIRI 3

#define MUNDURKANAN -2

#define MUNDURKIRI -3

#define PUTARKANAN 4

#define PUTARKIRI -4 int keadaan;

ros::NodeHandle nh;

ros::Subscriber<std_msgs::Float32>

sub("turtle_command", &messageCallback);

void setup() {

pinMode(FRONT_STEP_PIN, OUTPUT);

pinMode(FRONT_DIRECTION_PIN, OUTPUT);

pinMode(FRONT_VRM_PIN, OUTPUT);

pinMode(FRONT_CW_PIN, OUTPUT);

pinMode(FRONT_RUN_PIN, OUTPUT);

pinMode(BACK_LEFT_STEP_PIN, OUTPUT);

pinMode(BACK_LEFT_DIRECTION_PIN, OUTPUT);

pinMode(BACK_RIGHT_STEP_PIN, OUTPUT);

pinMode(BACK_RIGHT_DIRECTION_PIN, OUTPUT);

nh.initNode();

nh.subscribe(sub);

keadaan = BERHENTI;

berhenti();

}

void loop() {

switch (keadaan) {

case BERHENTI:

break;

case MAJU:

maju();

break;

case MUNDUR:

mundur();

break;

case MAJUKANAN:

majuKanan();

break;

case MAJUKIRI:

majuKiri();

break;

case MUNDURKANAN:

mundurKanan();

break;

case MUNDURKIRI:

mundurKiri();

break;

case PUTARKANAN:

putarKanan();

break;

case PUTARKIRI:

putarKiri();

break;

}

nh.spinOnce();

delay(1);

}

void messageCallback(const

std_msgs::Float32& cmd_msg) {

if (cmd_msg.data >= -0.7 && cmd_msg.data

<= 0.7) {

switch (keadaan) {

case BERHENTI:

case MAJU:

case MUNDUR:

break;

case MAJUKANAN:

case MAJUKIRI:

keadaan = MAJU;

break;

case MUNDURKANAN:

case MUNDURKIRI:

keadaan = MUNDUR;

break;

case PUTARKANAN:

case PUTARKIRI:

keadaan = BERHENTI;

break;

} }

else if (cmd_msg.data > 0.7) {

switch (keadaan) {

case BERHENTI:

keadaan = PUTARKANAN;

break;

case MAJU:

keadaan = MAJUKANAN;

break;

case MUNDUR:

keadaan = BERHENTI;

break;

case MAJUKANAN:

case MAJUKIRI:

break;

case MUNDURKANAN:

keadaan = PUTARKANAN;

break;

case MUNDURKIRI:

break;

case PUTARKANAN:

break;

case PUTARKIRI:

keadaan = BERHENTI;

break;

} }

else if (cmd_msg.data < -0.7) {

switch (keadaan) {

case BERHENTI:

keadaan = PUTARKIRI;

break;

case MAJU:

keadaan = MAJUKIRI;

break;

case MUNDUR:

keadaan = BERHENTI;

break;

case MAJUKANAN:

keadaan = MAJU;

break;

case MAJUKIRI:

break;

case MUNDURKANAN:

break;

case MUNDURKIRI:

keadaan = MUNDUR;

break;

case PUTARKANAN:

keadaan = BERHENTI;

break;

case PUTARKIRI:

break;

} } }

void berhenti() {

digitalWrite(FRONT_RUN_PIN, LOW);

digitalWrite(FRONT_CW_PIN, LOW);

digitalWrite(FRONT_RUN_PIN, LOW);

digitalWrite(FRONT_VRM_PIN, LOW);

}

void maju() {

digitalWrite(FRONT_RUN_PIN, HIGH);

digitalWrite(FRONT_CW_PIN, HIGH);

digitalWrite(FRONT_RUN_PIN, LOW);

digitalWrite(FRONT_VRM_PIN, HIGH);

}

void mundur() {

digitalWrite(FRONT_RUN_PIN, HIGH);

digitalWrite(FRONT_CW_PIN, LOW);

digitalWrite(FRONT_RUN_PIN, LOW);

digitalWrite(FRONT_VRM_PIN, HIGH);

}

void majuKanan() {

MoveSteps(BACK_LEFT_STEP_PIN, BACK_LEFT_DIRECTION_PIN, 5, 600);

MoveSteps(BACK_RIGHT_STEP_PIN, BACK_RIGHT_DIRECTION_PIN, -5, 6000);

}

void majuKiri() {

MoveSteps(BACK_LEFT_STEP_PIN, BACK_LEFT_DIRECTION_PIN, 5, 6000);

MoveSteps(BACK_RIGHT_STEP_PIN, BACK_RIGHT_DIRECTION_PIN, -5, 600);

}

void mundurKanan() {

MoveSteps(BACK_LEFT_STEP_PIN, BACK_LEFT_DIRECTION_PIN, -5, 6000);

MoveSteps(BACK_RIGHT_STEP_PIN, BACK_RIGHT_DIRECTION_PIN, 5, 600);

}

void mundurKiri() {

MoveSteps(BACK_LEFT_STEP_PIN, BACK_LEFT_DIRECTION_PIN, -5, 600);

MoveSteps(BACK_RIGHT_STEP_PIN, BACK_RIGHT_DIRECTION_PIN, 5, 6000);

}

void putarKanan() {

MoveSteps(BACK_LEFT_STEP_PIN, BACK_LEFT_DIRECTION_PIN, 5, 600);

MoveSteps(BACK_RIGHT_STEP_PIN, BACK_RIGHT_DIRECTION_PIN, 5, 600);

}

void putarKiri() {

MoveSteps(BACK_LEFT_STEP_PIN, BACK_LEFT_DIRECTION_PIN, -5, 600);

MoveSteps(BACK_RIGHT_STEP_PIN, BACK_RIGHT_DIRECTION_PIN, -5, 600);

}

void MoveSteps(int stepPin, int directionPin, int steps, unsigned int microsecondStepDelay) {

if (steps < 0) {

digitalWrite(directionPin, LOW);

} else {

digitalWrite(directionPin, HIGH);

}

for (int i = 0; i < abs(steps); i++) {

digitalWrite(stepPin, HIGH);

delayMicroseconds(microsecondStepDelay/2

Dokumen terkait