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:
#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("https://www.project.semesin.com"); 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: