Gitar gibi boynu olan MIDI benzeri bir kontrolör inşa etmeye çalışıyorum. Bu boyunda büyük bir basınç sensörü matrisi var. Denetleyici 3 dize taklit edecektir.
Bu şekilde çalışır: Güce bağlanan (muhtemelen 3.3V veya 5V, şu an için önemli değil) 3 uzun çift taraflı bakır bant şeridi (boyun kadar 0.5 cm genişliğinde) vardır. Bu şeritler üzerinde, basınca dayanarak direnci değiştiren bir Velostat tabakası vardır. Velostatın üstünde, velostat katmanı boyunca voltajın okunmasını sağlayan bir şeye bağlı başka bir sıra veya bakır bant hücreleri olacaktır. Boyun yaklaşık 40 cm uzunluğunda olduğundan, en az 80 sıra olacaktır.
Alttaki 3 bakır bant şeridini boyun boyunca bir grafiğin sütunları olarak hayal ederseniz, ölçüm yöntemine bağlı olarak sensörler hücreler veya satırlar olacaktır (birinin sütunları da çoğaltabileceğini düşündüm, sonra Ancak bunu kolaylaştırabilecek birkaç özel koşul vardır: Bu gitar benzeri bir kontrolör olduğundan, her etkileşimin ölçülmesi gerekmez! Yalnızca denetleyicinin gövdesine en yakın dokunuş önemlidir. Ayrıca 8 bitlik bir çözünürlük yeterince doğru olmalıdır. 255 basınç seviyesi muhtemelen gerekenden daha fazladır.
Şimdi zor bitler:
Ölçüm, darbeleri vb. Algılamak için gerçek zamanlı olarak yeterli olmalıdır (örnek hızının ne kadar yüksek olması gerektiği hakkında hiçbir fikriniz yoktur - iyi ölçüm ve oynatılabilirlik için birkaç kHz'de tahmin edilir) ve kontrolörün dijital çıkışı MIDI (3 ayrı kanalda - dize başına bir tane) veya bir Raspberry Pi ile işlenebilen dijital bir sinyal.
Artık bilgim gerçekten sınırlı olduğundan, iş için doğru araçları düşünemedim. Ama bildiğim şu: Mümkün. Çok benzer bir teknik kullanan (fark edene kadar neredeyse tersine mühendislik yaptığım, bir patentleri olduğunu ve nasıl yaptıklarıyla ilgili düşündüğüm kadar gizli olmadığını) benzer ama farklı bir denetleyici var, buna ROLI deniyor Seaboard.
TL; DR:
kabaca 240 sensör
aynı hattan güç alan 80 gruba ayrılabilir
Bu gerçek zamanlı bir uygulamadır, dokunduğumda her sensörden basınç almam gerekiyor (bazı koşullar geçerlidir, yukarıya bakın)
Şimdiden teşekkürler, okunacak çok şey olduğunu biliyorum. Herhangi bir öneri için minnettarım ve üretmek için yola çıkan korkunç karışıklığı başarmama yardımcı olabilirseniz çok sevinirim!
Şimdiye kadar düşündüğüm şeyler:
Satırları ve sütunları çoğaltarak, her hücreyi bir MCP3008 veya daha büyük ADC ile okuyarak ve zincirleme (papatya zinciri veya ağaç gibi) yalnızca konum sinyaline en düşük etkileşimi nihai sinyale iten ancak hesaplamalarımdan, muhtemelen iletişim yükü. Ayrıca daha önceki bir model, tasarım kötü olduğu için attığım şerit potansiyometreleri içeriyordu (birkaç deneme, yeterince serin değildi).
DÜZENLEME / GÜNCELLEME:
Şimdiye kadarki iyi öneriler için teşekkürler! Onlar sayesinde artık sorunumu daha açık bir şekilde ifade edebiliyorum:
80 satır * 3 sütun basınç sensörü matrisim var. Bir insan sensör matrisi ile etkileşime girdiğinde, yakınlardaki birkaç sensör dokunuşu alır, ancak sadece bir sütun boyunca. Kolonlar mekanik olarak ayrılmıştır. Sensörler 100 Ohm ile 1 kOhm arasında bir dirence sahiptir. Tüm bu sensörlerin 8 bit derinlikte okunması, işlenmesi ve sonuçların en az 1 kHz hızında gönderilmesi gerekir. Bu nedenle, tek bir okuma / işlemenin milisaniyeden daha az sürmesi gerekir. Sütun başına son çıktı: bir float32 için 4 bayt ve bir uint8 için 1 bayt olmalıdır. Float32, kolon boyunca ilk etkileşimin ortalama pozisyonunu gösterecektir. Etkileşim, belirli bir eşiğin üzerinde bir basınç ile ardışık bir sensör kümesi olarak tanımlanır. İşlemin karışıma girdiği yer: bir okuma bir eşik değeri aşana kadar sütun aşağı doğru hareket ettirilir. Bu daha sonra bir etkileşimin başlangıcı olarak sayılacaktır. Her sensörün basıncı ve konumu, maksimum (muhtemelen) 4 ardışık sensörle eşiğin altına düşen ilk sensöre kadar hafızaya alınır. Kaydedilen etkileşimin tüm sensörlerinden sadece iki sensör işlenir - en yüksek basıncı (en düşük direnç) ve en yüksek olanı doğrudan üstünde veya altında okuyan sensör. Kayan nokta konumu, basınçlarına göre ağırlıklandırılmış iki sensör konumunun ortalaması alınarak hesaplanır. Etkileşimin genel basıncı sadece 0 ile 255 arasında sıkıştırılmış her iki basıncın eklenmesi olacaktır (birim8'in her iki basıncını bir uint16'ya ekleyin ve yuvarlamadan 2'ye bölün, gereksiz bitleri atın - bu hızlı olmalıdır). Bunun her sütun için olması gerekir. 15 bayt büyüklüğünün sonucu daha sonra SPI üzerinden sentezleyici görevi gören küçük bir bilgisayara (Raspberry Pi B3) gönderilir. İletim yöntemine bağlı değilim. SPI iş için doğru araç değilse, bir Raspberry Pi'nin ele alabileceği herhangi bir iletişim yöntemini almaya hazırım. Bu müzikal-etkileşimli bir uygulama olduğundan gecikme çok önemlidir.
Tam sorularım: Bu, bankayı kırmadan tek bir mikrodenetleyici ile çözülebilir mi? Bir hobi projesi için birkaç yüz dolar değerinde IC satın almaya gücüm yetmiyor. Hangi donanımı önerirsiniz? Dikkat etmem gereken açık olmayan uyarılar var mı?
Şimdiye kadar cevaplardan elde ettiğim yaklaşım, her sütuna ayrı ayrı güç vermek, ardından SPI üzerinden bir Arduino'ya bağlı 5 16 kanallı ADC (ADS7961) ile satırları okumaktı. Bunun en kolay / en ucuz yaklaşım olmayacağından veya> 1 kHz'lik bir hıza ulaşmak için yeterince hızlı olmayacağından endişeliyim.
Feragatname: Elektrik mühendisliği söz konusu olduğunda normalde teorik bir kimyager ve korkunç bir amatörüm, bildiğim her şey kendi kendine öğretilir ve herhangi bir profesyonel arka plana sahip değildir (bu da daha bilgili insanlardan yardım istememin sebebidir). Yine de yazılım etrafında yolumu biliyorum. Yazılım ile ilgili her şeyi, yeterli zaman ile anlayacağım. Ayrıca, ben Almanım, bu yüzden lütfen zaman zaman dilbilgisi kusurlarını affedin.