İçindekiler:
- Gereçler
- Adım 1: Sinyal Toplama
- Adım 2: Basitleştirilmiş Sinyal
- Adım 3: Sinyal İşleme
- Adım 4: Şemalar
- Adım 5: EMG Sensörlerinin Yerleştirilmesi
- 6. Adım: Kod
- 7. Adım: Sonuçlar
Video: EMG ile Robotik El Kontrolü: 7 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Bu proje, kas aktivitesini ölçmek ve işlemek için kullanılan 3 açık kaynaklı uECG cihazı (elektromiyogram, EMG) ile robotik elin kontrolünü (açık kaynaklı el inMoov kullanarak) göstermektedir. Ekibimizin elleri ve kontrolü ile uzun bir hikayesi var ve bu doğru yönde atılmış iyi bir adım:)
Gereçler
3x uECG cihazı1x Arduino (Nano kullanıyorum ama diğerlerinin çoğu işe yarar)1x nRF24 modülü (herhangi bir jenerik olanı yapar)1x PCA9685 veya benzeri servo sürücü1x inMoov el5x büyük servolar (uyumlu tipler için inMoov talimatlarına bakın)1x 5V güç kaynağı 5A veya daha fazla akım
Adım 1: Sinyal Toplama
Kontrol EMG - kasların elektriksel aktivitesine dayanır. EMG sinyali üç uECG cihazı tarafından elde edilir (Biliyorum, bunun bir EKG monitörü olması gerekiyordu, ancak genel bir ADC'ye dayandığından, EMG dahil herhangi bir biyosinyali ölçebilir). EMG işleme için, uECG'nin 32-bin spektrum verilerini ve "kas penceresi" ortalamasını (75 ve 440 Hz arasında ortalama spektral yoğunluk) gönderdiği özel bir modu vardır. Spektrum görüntüleri zamanla değişen mavi-yeşil desenlere benziyor. Burada frekans dikey bir eksendedir (3 grafiğin her birinde, altta düşük frekans, üstte yüksek - 0 ila 488 Hz arasında ~15 Hz adımlarla), zaman yataydır (burada genel olarak soldaki eski veriler ekranda yaklaşık 10 saniyedir). Yoğunluk renkle kodlanmıştır: mavi - düşük, yeşil - orta, sarı - yüksek, kırmızı - daha da yüksek.
Adım 2: Basitleştirilmiş Sinyal
Güvenilir bir hareket tanıma için, bu spektral görüntülerin uygun bir PC işlemesi gereklidir. Ancak robotik el parmaklarının basit aktivasyonu için, sadece 3 kanalda ortalama değeri kullanmak yeterlidir - uECG, Arduino taslağının ayrıştırabilmesi için belirli paket baytlarında rahatlıkla sağlar. Bu değerler çok daha basit görünüyor - Arduino'nun Seri Plotter'ından bir ham değerler tablosu ekledim. Kırmızı, yeşil, mavi grafikler, başparmak, yüzük ve orta parmakları sırayla sıktığımda farklı kas gruplarındaki 3 uEKG cihazından alınan ham değerlerdir. Gözümüz için bu durumlar açıkça farklıdır, ancak bir programın değerleri el servolarına çıkarabilmesi için bu değerleri bir şekilde "parmak puanına" çevirmemiz gerekir. Sorun şu ki, kas gruplarından gelen sinyaller "karışık"tır: 1. ve 3. durumda mavi sinyal yoğunluğu yaklaşık olarak aynıdır - ancak kırmızı ve yeşil farklıdır. 2. ve 3. durumda yeşil sinyaller aynıdır - ancak mavi ve kırmızı farklıdır.
Adım 3: Sinyal İşleme
Bu sinyalleri "karıştırmak" için nispeten basit bir formül kullandım:
S0=V0^2 / ((V1 *a0 +b0)(V2 * c0+d0)), burada S0 - kanal 0, V0, V1, V2 için puan - 0, 1, 2 ve a kanalları için ham değerler, b, c, d - manuel olarak ayarladığım katsayılar (a ve c 0,3 ila 2,0 arasındaydı, b ve d 15 ve 20 idi, yine de belirli sensör yerleşiminize göre ayarlamak için bunları değiştirmeniz gerekir). Kanal 1 ve 2 için aynı puan hesaplandı. Bundan sonra grafikler neredeyse mükemmel bir şekilde ayrıldı. Aynı hareketler için (bu sefer yüzük parmağı, orta ve sonra başparmak) sinyaller nettir ve sadece eşik ile karşılaştırılarak servo hareketlerine kolayca çevrilebilir.
Adım 4: Şemalar
Şematik oldukça basittir, sadece nRF24 modülüne, PCA9685 veya benzeri I2C PWM kontrolöre ve tüm bu servoları bir kerede hareket ettirmek için yeterli olacak yüksek amp 5V güç kaynağına ihtiyacınız vardır (bu yüzden kararlı çalışma için en az 5A nominal güç gerektirir).
Bağlantı listesi:nRF24 pin 1 (GND) - Arduino'nun GNDnRF24 pin 2 (Vcc) - Arduino'nun 3.3vnRF24 pin 3 (Çip Etkin) - Arduino'nun D9nRF24 pin 4 (SPI:CS) - Arduino'nun D8nRF24 pin 5 (SPI:SCK) - Arduino'nun D13nRF24 pin 6 (SPI:MOSI) - Arduino'nun D11nRF24 pin 7 (SPI:MISO) - Arduino'nun D12PCA9685 SDA - Arduino'nun A4PCA9685 SCL - Arduino'nun A5PCA9685 Vcc - Arduino'nun 5vPCA9685 GND - Arduino'nun GNDPCA9685 GND'si - Arduino'nun GNDPCA9685 V96 yüksek yükselticisi - yüksek yükseltici 5VPCACA - PCA kanalları 0-4, benim gösterimde başparmak - kanal 0, işaret parmağı - kanal 1 vb.
Adım 5: EMG Sensörlerinin Yerleştirilmesi
Makul okumalar elde etmek için kas aktivitesini kaydeden uEKG cihazlarını doğru yerlere yerleştirmek önemlidir. Burada birçok farklı seçenek mümkün olsa da, her biri farklı sinyal işleme yaklaşımı gerektirir - bu nedenle benim kodumda fotoğraflarıma benzer yerleşimi kullanmak en iyisidir. Sezgisel olmayabilir, ancak başparmak kas sinyali kolun karşı tarafında daha iyi görülebilir, yani sensörlerden biri oraya yerleştirilir ve hepsi dirseğe yakın yerleştirilir (kaslar vücutlarının çoğu o bölgede bulunur, ancak sizinkinin tam olarak nerede olduğunu kontrol etmek istersiniz - oldukça büyük bir bireysel fark vardır)
6. Adım: Kod
Ana programı çalıştırmadan önce, belirli uECG cihazlarınızın birim ID'lerini bulmanız gerekecek (bu işlem 101 numaralı satırın yorumunu kaldırarak ve cihazları birer birer açarak yapılır, diğer şeylerin yanı sıra mevcut cihazın ID'sini göreceksiniz) ve bunları doldurmanız gerekecektir. unit_ids dizisi (satır 37). Bunun dışında formül katsayılarıyla (129-131) oynamak ve robotik ele bağlamadan önce seri çizicide nasıl göründüğünü kontrol etmek istiyorsunuz.
7. Adım: Sonuçlar
Yaklaşık 2 saat süren bazı deneylerle oldukça güvenilir bir çalışma elde edebildim (video tipik bir vakayı gösteriyor). Kusursuz davranmaz ve bu işlemle yalnızca açık ve kapalı parmakları tanıyabilir (ve 5'in her birini bile tanımaz, yalnızca 3 kas grubunu algılar: başparmak, işaret ve orta birlikte, yüzük ve küçük parmaklar birlikte). Ancak sinyali analiz eden "AI" burada 3 satır kod alır ve her kanaldan tek bir değer kullanır. PC veya akıllı telefondaki 32 bin spektral görüntüleri analiz ederek çok daha fazlasının yapılabileceğine inanıyorum. Ayrıca, bu sürüm sadece 3 uECG cihazı (EMG kanalları) kullanır. Daha fazla kanal ile gerçekten karmaşık kalıpları tanımak mümkün olmalıdır - ama projenin amacı bu, ilgilenen herkes için bir başlangıç noktası sağlamak:) El kontrolü kesinlikle böyle bir sistem için tek uygulama değildir.
Önerilen:
Ses Kontrolü Robotik El: 4 Adım
Ses Kontrollü Robotik El: Sizin sesli komutunuzla çalışacak bir robotik kol oluşturdum. Robot kol, doğal bağlantılı konuşma girişi ile kontrol ediliyor. Dil girişi, bir kullanıcının robotla çoğu insanın aşina olduğu terimlerle etkileşime girmesine olanak tanır. Advan
Butonlar, Raspberry Pi ve Scratch ile Parlaklık Kontrolü PWM Tabanlı LED Kontrolü: 8 Adım (Resimlerle)
Basmalı Düğmeler, Raspberry Pi ve Scratch Kullanarak Parlaklık Kontrolü PWM Tabanlı LED Kontrolü: Öğrencilerime PWM'nin nasıl çalıştığını açıklamanın bir yolunu bulmaya çalışıyordum, bu yüzden kendime 2 basmalı düğme kullanarak bir LED'in parlaklığını kontrol etmeye çalışma görevi verdim - bir düğme bir LED'in parlaklığını arttırır ve diğeri onu karartır. Programlamak için
ESP8266 RGB LED ŞERİT WIFI Kontrolü - NODEMCU Wifi Üzerinden Kontrollü Led Şerit için IR Uzaktan Kumanda Olarak - RGB LED STRIP Akıllı Telefon Kontrolü: 4 Adım
ESP8266 RGB LED ŞERİT WIFI Kontrolü | NODEMCU Wifi Üzerinden Kontrollü Led Şerit için IR Uzaktan Kumanda Olarak | RGB LED STRIP Akıllı Telefon Kontrolü: Merhaba arkadaşlar, bu eğitimde nodemcu veya esp8266'yı bir RGB LED şeridini kontrol etmek için IR uzaktan kumanda olarak nasıl kullanacağımızı öğreneceğiz ve Nodemcu wifi üzerinden akıllı telefon ile kontrol edilecek. Yani temel olarak RGB LED STRIP'i akıllı telefonunuzla kontrol edebilirsiniz
PS2 Kablosuz Uzaktan Kumanda ile Robotik Araç Kiti Montajı ve Kontrolü: 6 Adım
PS2 Kablosuz Uzaktan Kumanda ile Robotik Araç Kiti Montajı ve Kontrolü: Bu proje Robotik dünyasındaki temel adımlar ile ilgilidir, 4WD Robotik araç kitini monte etmeyi, üzerine donanım yerleştirmeyi ve kablosuz PS2 uzaktan kumanda ile kontrol etmeyi öğreneceksiniz
Arduino Uno R3 ile Potansiyometre ile LED Kontrolü: 6 Adım
Arduino Uno R3 ile Potansiyometre ile LED Kontrolü: Daha önce, yeni bir yazılımı tanımak için aydınlatıcı olabilecek kontrol panosuna veri göndermek için Seri Monitör kullanıyorduk. Bu dersimizde, bir potansiyometre ile bir LED'in parlaklığını nasıl değiştireceğimizi ve potansiyometrenin verilerini nasıl alacağımızı görelim