Gerak lurus berubah beraturan (GLBB) adalah gerak lurus yang percepatannya tetap, artinya kecepatannya berubah beraturan. terdapat beberapa jenis GLBB yaitu :
- Gerak vertikal ke atas
- Gerak jatuh bebas
- Gerak vertikal ke bawah
untuk keperluan simulasi gerak lurus berubah beraturan diperlukan peralatan sebagai berikut :
- Arduino uno
- 3x sensor obstacle
- sensor ultrasonic
- Tombol
Dengan tata letak seperti berikut:
Skema simulasi GLBB menggunakan arduino:
sketch/koding simulasi gerak lurus berubah beraturan berbasis arduino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | #define tinggiSensorBawah 10//cm #define pinTombolMulai A0 #define pinSensorA 8 #define pinSensorB 9 #define pinSensorC 10 #include <Ultrasonic.h> Ultrasonic ultrasonic(3, 2); uint16_t nomor; void setup() { pinMode(pinTombolMulai, INPUT_PULLUP); pinMode(pinSensorA, INPUT_PULLUP); pinMode(pinSensorB, INPUT_PULLUP); pinMode(pinSensorC, INPUT_PULLUP); Serial.begin(9600); Serial.println( "Gerak Lurus Berubah Beraturan" ); Serial.println(); Serial.println( "Gerak Lurus Berubah Beraturan (jatuh bebas)" ); Serial.println( "No\tJarak (cm)\tWaktu (s)\tPercepatan (cm/s2)" ); } void loop() { if (!digitalRead(pinTombolMulai)) { delay(50); if (!digitalRead(pinTombolMulai)) { while (!digitalRead(pinTombolMulai)); uint16_t tinggi = 1.0 * ultrasonic.read() - tinggiSensorBawah; float jarakSensor = 1.0 * tinggi / 2; unsigned long waktuA, waktuB, waktuC; bool mulaiDiTitikA, mulaiDiTitikC = false ; while (1) { if (!digitalRead(pinSensorA)) { waktuA = micros(); mulaiDiTitikA = true ; break ; } if (!digitalRead(pinSensorC)) { waktuC = micros(); mulaiDiTitikC = true ; break ; } } while (digitalRead(pinSensorB)); waktuB = micros(); while (1) { if (!digitalRead(pinSensorA)) { waktuA = micros(); break ; } if (!digitalRead(pinSensorC)) { waktuC = micros(); break ; } } float waktu_ac = abs (1.0 * waktuC - waktuA) / 1000000; //detik float waktu_ab = abs (1.0 * waktuB - waktuA) / 1000000; //detik float waktu_bc = abs (1.0 * waktuC - waktuB) / 1000000; //detik float kecepatan_ab = 0.5 * jarakSensor / waktu_ab; //cm/s float kecepatan_cb = 0.5 * jarakSensor / waktu_ab; //cm/s float kecepatan_bc = 0.5 * jarakSensor / waktu_bc; //cm/s float percepatan; if (mulaiDiTitikA) { percepatan = (1.0 * kecepatan_bc - kecepatan_ab) / waktu_bc; //cm/s2 } if (mulaiDiTitikC) { percepatan = (1.0 * kecepatan_ab - kecepatan_bc) / waktu_ab; //cm/s2 } char buffer[200]; char strWaktu_ac[10]; char strPercepatan[10]; dtostrf(waktu_ac, 8, 2, strWaktu_ac); dtostrf(percepatan, 8, 2, strPercepatan); sprintf (buffer, "%d\t%d\t\t%s\t%s" , nomor, tinggi, strWaktu_ac, strPercepatan); Serial.println(buffer); nomor++; } } } |
Library: