Arduino NRF24L01 ile kas sensörü projesi, insan vücudundaki kas sinyallerini (EMG – Electromyography) algılayarak kablosuz olarak ev aletlerini kontrol etmeyi sağlayan ileri seviye bir biyomedikal mühendislik projesidir. Bu projede kas kasılması sinyalleri NRF24L01 modülü ile kablosuz olarak iletilerek uzaktan lamba kontrolü gerçekleştirilir.
Kas ve sinir modülü, insan vücudundaki elektriksel aktiviteyi algılayan özel bir sensördür. Kaslar kasıldığında oluşturdukları biyoelektriksel sinyalleri (EMG sinyalleri) ölçer ve bunları Arduino’nun anlayabileceği dijital sinyallere dönüştürür.
NRF24L01, 2.4GHz frekansında çalışan düşük güçlü kablosuz iletişim modülüdür. Bu projede kas sinyallerini verici Arduino’dan alıcı Arduino’ya iletmek için kullanılır.
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
[Üye Girişi Yaparak Tüm Kodlara Erişin]
Premium paket: Gelişmiş EMG filtreleme algoritmaları, çoklu kas grubu kontrolü, adaptif eşik değerleri, veri loglama, kalibrasyon rutinleri
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
// NRF24L01 pin tanımlamaları
RF24 radio(9, 10); // CE, CSN
// İletişim adresi
const byte address[6] = "00001";
// Kas sensörü pin
#define EMG_PIN A0
#define LED_PIN 7
// Değişkenler
int emgValue = 0;
int emgThreshold = 400; // Eşik değeri (kalibrasyon gerekli)
bool muscleActive = false;
bool lastMuscleState = false;
int signalData = 0;
void setup() {
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
// NRF24L01 başlatma
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
Serial.println("Kas Sensörü Verici Başlatıldı");
Serial.println("Kas kasılması bekleniyor...");
// Kalibrasyon süresi
Serial.println("5 saniye sonra sistem aktif olacak...");
delay(5000);
}
void loop() {
// EMG sensöründen veri oku
emgValue = analogRead(EMG_PIN);
// Sinyal filtreleme (basit)
emgValue = digitalFilter(emgValue);
// Eşik kontrolü
if (emgValue > emgThreshold) {
muscleActive = true;
digitalWrite(LED_PIN, HIGH);
} else {
muscleActive = false;
digitalWrite(LED_PIN, LOW);
}
// Durum değişikliği kontrolü
if (muscleActive != lastMuscleState) {
if (muscleActive) {
signalData = 1; // Lamba aç komutu
Serial.println("KAS KASILDI - Lamba açma sinyali gönderiliyor");
} else {
signalData = 0; // Lamba kapat komutu
Serial.println("KAS GEVŞEDİ - Lamba kapatma sinyali gönderiliyor");
}
// Kablosuz veri gönderimi
bool result = radio.write(&signalData, sizeof(signalData));
if (result) {
Serial.println("Sinyal başarıyla gönderildi");
} else {
Serial.println("Sinyal gönderimi başarısız!");
}
lastMuscleState = muscleActive;
}
// Seri monitöre EMG değerini yazdır
Serial.print("EMG Değeri: ");
Serial.print(emgValue);
Serial.print(" | Eşik: ");
Serial.print(emgThreshold);
Serial.print(" | Durum: ");
Serial.println(muscleActive ? "KASİLDİ" : "GEVŞEDİ");
delay(50); // Örnekleme hızı
}
int digitalFilter(int rawValue) {
// Basit low-pass filter
static int filteredValue = 0;
filteredValue = (filteredValue * 0.8) + (rawValue * 0.2);
return filteredValue;
}
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
// NRF24L01 pin tanımlamaları
RF24 radio(9, 10); // CE, CSN
// İletişim adresi
const byte address[6] = "00001";
// Kontrol pinleri
#define RELAY_PIN 8
#define STATUS_LED 7
// Değişkenler
int receivedData = 0;
bool lampStatus = false;
unsigned long lastReceiveTime = 0;
unsigned long communicationTimeout = 5000; // 5 saniye timeout
void setup() {
Serial.begin(9600);
// Pin modları
pinMode(RELAY_PIN, OUTPUT);
pinMode(STATUS_LED, OUTPUT);
// Başlangıç durumu
digitalWrite(RELAY_PIN, LOW);
digitalWrite(STATUS_LED, LOW);
// NRF24L01 başlatma
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
Serial.println("Lamba Kontrol Alıcısı Başlatıldı");
Serial.println("Kas sensörü sinyali bekleniyor...");
}
void loop() {
// Kablosuz veri alma kontrolü
if (radio.available()) {
radio.read(&receivedData, sizeof(receivedData));
lastReceiveTime = millis();
Serial.print("Alınan sinyal: ");
Serial.println(receivedData);
// Komut işleme
if (receivedData == 1) {
// Lamba açma komutu
if (!lampStatus) {
digitalWrite(RELAY_PIN, HIGH);
digitalWrite(STATUS_LED, HIGH);
lampStatus = true;
Serial.println("LAMBA AÇILDI - Kas kasılması algılandı");
}
} else if (receivedData == 0) {
// Lamba kapatma komutu
if (lampStatus) {
digitalWrite(RELAY_PIN, LOW);
digitalWrite(STATUS_LED, LOW);
lampStatus = false;
Serial.println("LAMBA KAPANDI - Kas gevşemesi algılandı");
}
}
}
// İletişim timeout kontrolü
if (millis() - lastReceiveTime > communicationTimeout) {
// Güvenlik: İletişim kesilirse lambayı kapat
if (lampStatus) {
digitalWrite(RELAY_PIN, LOW);
digitalWrite(STATUS_LED, LOW);
lampStatus = false;
Serial.println("İletişim timeout - Güvenlik için lamba kapatıldı");
}
// Status LED yanıp sönsün (bağlantı sorunu göstergesi)
digitalWrite(STATUS_LED, millis() % 1000 < 500);
}
delay(10);
}
struct DataPacket {
int command; // 0: OFF, 1: ON
int signalLevel; // EMG sinyal seviyesi
long timestamp; // Zaman damgası
int batteryLevel; // Pil durumu
};
| Kontrol Yöntemi | Tepki Süresi | Hassasiyet | Kullanım Kolaylığı | Maliyet |
|---|---|---|---|---|
| EMG (Kas Sensörü) | 10-50ms | Çok Yüksek | Orta | Yüksek |
| Ses Kontrolü | 200-500ms | Orta | Kolay | Düşük |
| Hareket Sensörü | 100-200ms | Düşük | Çok Kolay | Düşük |
| Dokunmatik | 1-10ms | Yüksek | Kolay | Orta |
| Göz Takibi | 50-100ms | Yüksek | Zor | Çok Yüksek |
| Malzeme | Ortalama Fiyat (TL) |
|---|---|
| Arduino Uno | 45-60 |
| Arduino Nano | 25-35 |
| 2x NRF24L01 Modülü | 30-50 |
| EMG/Kas Sensörü | 80-150 |
| Röle Modülü | 10-18 |
| Elektrotlar (3 adet) | 15-25 |
| 9V Pil + Holder | 8-15 |
| Jumper Kablolar | 8-12 |
| Diğer Malzemeler | 10-20 |
| Toplam | 231-385 TL |
Arduino NRF24L01 ile kas sensörü kablosuz lamba kontrol projesi, biyomedikal mühendislik ve elektronik teknolojinin muhteşem birleşimini sergiler. Bu proje hem teknolojik yenilik hem de pratik uygulama değeri sunar. Özellikle engellilik durumları ve erişilebilirlik alanında devrim yaratabilecek potansiyele sahiptir.
Anahtar Kelimeler: Arduino NRF24L01, kas sensörü EMG, kablosuz kas kontrolü, biyomedikal Arduino projesi, EMG elektromyografi, kas sensör lamba kontrol, Arduino kablosuz iletişim, NRF24L01 projesi, biyosignal işleme, myoelectric control