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:
