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