Skip to content

Commit 3107911

Browse files
Elle Kontrol Araba
1 parent 7bfdd20 commit 3107911

File tree

2 files changed

+169
-0
lines changed

2 files changed

+169
-0
lines changed
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
#include "WiFi.h" // wifi kütüphanesi
2+
#include "esp_now.h" // 2 kart arasında wifi haberleşme başlatılması için kullandığımız kütüphane
3+
#define MotorA1 D0 // Motor A1 kontrol pini tanımı
4+
#define MotorA2 D1 // Motor A2 kontrol pini tanımı
5+
#define MotorB1 D8 // Motor B1 kontrol pini tanımı
6+
#define MotorB2 D9 // Motor B2 kontrol pini tanımı
7+
int ileriHiz; // İleri hızı tutacak değişken
8+
// Veri yapısı tanımı: x ve y koordinatlarını içerir
9+
typedef struct struct_message {
10+
int x;
11+
int y;
12+
} struct_message;
13+
struct_message myData; // Alınan veriyi saklayacak struct değişkeni
14+
void OnDataRecv(const uint8_t *mac, const uint8_t *incomingData, int len) {
15+
// Alınan veriyi myData değişkenine kopyala
16+
memcpy(&myData, incomingData, sizeof(myData));
17+
// Y eksenine göre hareket kontrolü
18+
19+
if (myData.y >= 10) { // Eğer Y koordinatı 10 veya daha büyükse
20+
myData.y = map(myData.y, 0, 90, 0, 255); // Y koordinatını 0-90 arasından 0-255 arasına yeniden haritalar
21+
if (myData.y >= 15) { // Eğer Y koordinatı 15 veya daha büyükse
22+
ileri();
23+
} else {
24+
dur(); // Değilse dur
25+
}
26+
ileriHiz = myData.y; // İleri hızı güncelle
27+
Serial.println("Y1: " + String(myData.y) + " Hiz: " + String(ileriHiz)); // Seri monitöre yazdırma
28+
} else if (myData.y <= -10) { // Eğer Y koordinatı -10 veya daha küçükse
29+
myData.y = map(myData.y, -90, 0, 255, 0); // Y koordinatını -90-0 arasından 255-0 arasına yeniden haritalar
30+
if (myData.y >= 15) { // Eğer Y koordinatı 15 veya daha büyükse
31+
geri(); // Geri hareket
32+
} else {
33+
dur(); // Değilse dur
34+
}
35+
ileriHiz = myData.y; // İleri hızı güncelle
36+
Serial.println("Y2: " + String(myData.y) + " Hiz: " + String(ileriHiz)); // Seri monitöre yazdırma
37+
}
38+
// X eksenine göre hareket kontrolü
39+
else if (myData.x >= 10) { // Eğer X koordinatı 10 veya daha büyükse
40+
myData.x = map(myData.x, 5, 85, 0, 255); // X koordinatını 5-85 arasından 0-255 arasına yeniden haritalar
41+
if (myData.x >= 15) { // Eğer X koordinatı 15 veya daha büyükse
42+
sol(); // Sola dönme
43+
} else {
44+
dur(); // Değilse dur
45+
}
46+
Serial.println("X1: " + String(myData.x) + " Araç sola dönüyor."); // Seri monitöre yazdırma
47+
} else if (myData.x <= -10) { // Eğer X koordinatı -10 veya daha küçükse
48+
myData.x = map(myData.x, -85, -5, 255, 0); // X koordinatını -85--5 arasından 255-0 arasına yeniden haritalar
49+
if (myData.x >= 15) { // Eğer X koordinatı 15 veya daha büyükse
50+
sag(); // Sağa dönme
51+
} else {
52+
dur(); // Değilse Dur
53+
}
54+
Serial.println("X2: " + String(myData.x) + " Araç sağa dönüyor."); // Seri monitöre yazdırma
55+
} else {
56+
dur();
57+
}
58+
}
59+
void setup() {
60+
Serial.begin(115200); // Seri haberleşme başlatma
61+
WiFi.mode(WIFI_STA); // WiFi istemci modunu ayarlama
62+
// ESP-NOW başlatma
63+
if (esp_now_init() != ESP_OK) { // Eğer ESP-NOW başlatılamazsa
64+
Serial.println("ESP-NOW başlatılamadı");
65+
return;
66+
}
67+
// Veri alındığında çağrılacak fonksiyonun tanımlanması
68+
esp_now_register_recv_cb(OnDataRecv);
69+
70+
}
71+
void loop() {
72+
delay(20); // 20 milisaniye bekleyerek döngüyü yavaşlatma
73+
}
74+
void ileri() {
75+
analogWrite(MotorA1, ileriHiz);
76+
analogWrite(MotorA2, 0);
77+
analogWrite(MotorB1, ileriHiz);
78+
analogWrite(MotorB2, 0);
79+
}
80+
void geri() {
81+
analogWrite(MotorA1, 0);
82+
analogWrite(MotorA2, ileriHiz);
83+
analogWrite(MotorB1, 0);
84+
analogWrite(MotorB2, ileriHiz);
85+
}
86+
void sol() {
87+
analogWrite(MotorA1, 125);
88+
analogWrite(MotorA2, 0);
89+
analogWrite(MotorB1, 0);
90+
analogWrite(MotorB2, 125);
91+
}
92+
void sag() {
93+
analogWrite(MotorA1, 0);
94+
analogWrite(MotorA2, 125);
95+
analogWrite(MotorB1, 125);
96+
analogWrite(MotorB2, 0);
97+
}
98+
void dur() {
99+
analogWrite(MotorA1, 0);
100+
analogWrite(MotorA2, 0);
101+
analogWrite(MotorB1, 0);
102+
analogWrite(MotorB2, 0);
103+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#include "WiFi.h" // WiFi kütüphanesini ekler
2+
#include "esp_now.h" // ESP-NOW kütüphanesini ekler, haberleşme için kullanılır
3+
#include "lsm6dsm.h" // IMU kütüphanesi tanımlandı
4+
uint8_t broadcastAddress[] = { 0xF4, 0x12, 0xFA, 0xDF, 0x40, 0xA8 }; // Veri yayın adresi tanımlanır( MAC adresi)
5+
float accelX, accelY, accelZ, accAngleY, accAngleX; // IMU değeri değişken tanımlaması yapıldı
6+
7+
// Veri yapısı tanımı: x, y ve c değerlerini içerir
8+
9+
typedef struct struct_message {
10+
int x;
11+
int y;
12+
int c;
13+
} struct_message;
14+
struct_message myData; // Alınan veriyi saklayacak struct değişkeni tanımlanır
15+
16+
esp_now_peer_info_t peerInfo; // ESP-NOW ile ilgili yapı tanımlanır
17+
18+
// Veri gönderildiğinde çağrılacak fonksiyon
19+
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
20+
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Veri gönderme başarılı" : "Veri gönderme başarısız");
21+
}
22+
LSM6DSM IMU; // IMU için class(nesne) tanımlanması
23+
void setup() {
24+
Serial.begin(115200); // Seri haberleşme başlatılır
25+
IMU.begin(); // IMU haberleşme başlatılır
26+
WiFi.mode(WIFI_STA); // WiFi istemci moduna ayarlanır
27+
if (esp_now_init() != ESP_OK) {
28+
Serial.println("ESP-NOW başlatılamadı");
29+
return;
30+
}
31+
esp_now_register_send_cb(OnDataSent); // Veri gönderme geri çağırma işlevi tanımlanır
32+
33+
// Veri yayın adresi tanımlanır
34+
35+
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
36+
peerInfo.channel = 0;
37+
peerInfo.encrypt = false;
38+
39+
// ESP-NOW eşleştirmesi yapılır
40+
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
41+
Serial.println("Eşleşme başarısız");
42+
return;
43+
}
44+
}
45+
void loop() {
46+
imuread(); // IMU'dan veri okunur
47+
myData.x = accAngleX; // X değeri ayarlanır
48+
myData.y = accAngleY; // Y değeri ayarlanır
49+
50+
// Veri gönderilir
51+
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&myData, sizeof(myData));
52+
delay(150);
53+
}
54+
void imuread() {
55+
accelX = IMU.readFloatAccelX(); // sensörden gelen X, Y, Z verileri okundu
56+
accelY = IMU.readFloatAccelY();
57+
accelZ = IMU.readFloatAccelZ();
58+
59+
//Açı değeri hesaplanır
60+
accAngleX = atan(accelX / sqrt(pow(accelY, 2) + pow(accelZ, 2) + 0.001)) * 180 / PI; // Matematik işlemi ile sensör verileri -90-+90 arasında açı değerlerine dönüştürüldi. // X ekseni açı değeri hesaplanır
61+
accAngleY = atan(-1 * accelY / sqrt(pow(accelX, 2) + pow(accelZ, 2) + 0.001)) * 180 / PI; // Y ekseni açı değeri hesaplanır
62+
63+
// Açı değerleri seri port üzerinden gösterilir
64+
Serial.print(" AngleY: " + String(accAngleY));
65+
Serial.println(" AngleX: " + String(accAngleX));
66+
}

0 commit comments

Comments
 (0)