Giriş
Robotik projelerde sensörü döndürmek, durağan sensöre göre çok daha fazla veri sağlar. SG90 servoyu 0-180° arasında adım adım döndürüp her açıda HC-SR04 ile mesafe ölçtüğümüzde, karşımızdaki alanın "yakınlık haritası" çıkar. Bu projede o haritayı minik bir OLED ekranda anlık çubuk grafik olarak çizeceğiz.
Öğreneceklerin
- Servo motor kontrolü ve PWM sinyali
- Süpürme stratejisi ve zamanlama optimizasyonu
- Ölçümlerin görselleştirilmesi (grafik çizimi)
- Gürültü ve besleme püfleri
Gerekli Parçalar
Arduino Uno R3
Ana kontrol kartı
SG90 Servo
Mikro servo motor
HC-SR04
Ultrasonik sensör
0.96" OLED
Grafik ekran
Bağlantı Şeması
Servo Motor Bağlantısı:
Sinyal (Turuncu)→ ArduinoD9VCC (Kırmızı)→ Arduino5VGND (Kahverengi)→ ArduinoGND
HC-SR04 Bağlantısı:
TRIG→ ArduinoD4ECHO→ ArduinoD5VCC→ Arduino5VGND→ ArduinoGND
PlatformIO Konfigürasyonu
[env:uno]
platform = atmelavr
board = uno
framework = arduino
lib_deps =
adafruit/Adafruit SSD1306 @ ^2.5.9
adafruit/Adafruit GFX Library @ ^1.11.10
arduino-libraries/Servo @ ^1.2.1
Arduino Kodu
#include <Arduino.h>
#include <Servo.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Servo sv;
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const int trig = 4;
const int echo = 5;
long measureCM() {
digitalWrite(trig, LOW);
delayMicroseconds(3);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
long duration = pulseIn(echo, HIGH, 30000);
if (duration == 0) return 0;
return duration / 58;
}
void drawBar(int angle, int distance) {
oled.clearDisplay();
oled.setTextSize(1);
oled.setTextColor(SSD1306_WHITE);
oled.setCursor(0, 0);
oled.print("Aci:");
oled.print(angle);
oled.print(" cm:");
oled.print(distance);
int barWidth = map(min(distance, 200), 0, 200, 120, 0);
oled.drawRect(0, 16, 120, 12, SSD1306_WHITE);
oled.fillRect(0, 16, barWidth, 12, SSD1306_WHITE);
oled.display();
}
void setup() {
sv.attach(9);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
Wire.begin();
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
oled.clearDisplay();
oled.println("Radar Basladi");
oled.display();
delay(2000);
}
void sweep(int from, int to, int step) {
for (int angle = from; angle != to; angle += step) {
sv.write(angle);
delay(12);
int cm = measureCM();
drawBar(angle, cm);
}
}
void loop() {
sweep(0, 180, 2);
sweep(180, 0, -2);
}
Sonuç
Bu radar tarayıcı projesi, robotik ve sensör teknolojilerine mükemmel bir giriş sağlar. Servo kontrolü, ultrasonik mesafe ölçümü ve grafik gösterim gibi temel konuları öğrenirken aynı zamanda çalışır bir radar sistemi elde edersiniz.
✅ Proje Tamamlandı!
Artık kendi radar tarayıcı sisteminizi yaptınız! Bu proje size servo kontrolü, grafik arayüz geliştirme ve robotik uygulamalar konusunda sağlam bir temel sağlayacak.