Mindflex EEGEN med raw-data via Bluetooth (1 / 9 steg)
Steg 1: Lite bakgrund
Känn dig fri att hoppa över denna bakgrund, men det förklarar varför vissa saker görs som de är. För säkerhet måste EEG headset isoleras från något ansluten till elnätet. Mindflex, 12Sprints Mobile och ett antal andra EEG headset använder en ThinkGear ASIC chip. Detta chip kommunicerar över TTL följetong med en radio och radio i sin tur kommunicerar med andra enheter, såsom Mindflex leksak basstationen. Detta isolerar headsetet elektriskt.
Tyvärr, medan 12Sprints Mobile radio är Bluetooth, Mindflex leksaken använder form av radio. För att använda Mindflex EEGEN med andra enheter, kommer vi helt enkelt ansluta den ThinkGear chipet ta emot och överföra rader till en HC-06 Bluetooth-radio (ca $10 med kablar).
Tja, kanske inte riktigt så enkel. Det är allt som behövs i form av hårdvara, finns det en programvara utmaning. ThingGear ASIC har flera driftsformer. Som inbäddade i den Mindflex leksaken sätter en SMD motstånd den till läge 0x01 som standard. I läge 0x01, chippet överför på 9600 baud, och skickar bearbetade data varje sekund: Meditation, koncentration och värden för olika delar av spektrumet som makt, förmodligen härstammar genom en FFT. Men vi vill ha tillgång till rådata EEG. Detta kräver att byta Mindflex headsetet till läge 0x02. I läge 0x02, chip sänder på 57600 baud, och förutom den samma en gång per sekund uppdateringen som den gör i läge 0x01, skickar differentially förstärkt EEGEN sensor rådata 512 gånger per sekund. Detta är det läge där 12Sprints Mobile headset fungerar som standard, så om du kan slå på headsetet till detta läge, inte bara får du raw-data, men du bör kunna använda den med alla 12Sprints kompatibel mobilapplikationer.
Man kan byta Mindflex till läge 0x02 med vissa SMD lödning arbete, men jag är fruktansvärt på lödning (som du ser i senare bilder), så det inte är ett alternativ för mig. Också, denna lösning gör headsetet fungerar inte längre med resten av leksaken, och jag gillar inte bryta saker.
Lyckligtvis kan kommunikationsprotokoll för ThinkGear chip du växla till läget 0x02 mycket enkelt genom att skicka 0x02 till sin följetong ta emot linje. Medan detta inte överleva powercycling, men det bör göra saker enklare: se bara till att ta emot raden av chipet är ansluten till Bluetooth-radion sända linje, och skicka 0x02. Men det finns problem. 0x02 måste skickas på 9600 baud, medan efterföljande data kommer att vara på 57600 baud. Och tyvärr finns det inget sätt att kontrollera HC-06 Bluetooth-radion baudhastighet dynamiskt i bruk.
Men det finns en lösning som fungerar förvånansvärt. 9600 = 57600 / 6. Om du kunde skicka lite sex gånger på 57600 baud, det skulle vara samma sak som att skicka det en gång på 9600 baud. Den enda hitch är att när du skickar saker via RS232 seriell eller dess TTL variant, du får inte styra varje bit. Istället, förutsatt att den vanliga 8N1 kommunikation inställningen, bitarna paketeras till byte, med varje byte börjar med en extra 0 "mark", men till och med en extra 1 "stop" bit. De mark och stopp bitarna är utanför vår kontroll. Men vi kan undvika detta. Det visar sig att om vi sänder den hex-strängen 0x00, 0xF8, 0x00, 0x00, 0x00, 0xE0 på 57600 baud och sedan paus för minst en 9600 baud längd lite (en millisekund kommer att vara mer än tillräckligt, tomgång är detsamma som att skicka 1 i RS232 protokoll), det är som att skicka 0x02, med fyra buggar (och några extra nollor på framsidan) , varje glitch att vara 1/6 av lite i längd. Om vi har tur, ignorerar 9600 baud mottagaren det korta glapp. Och något överraskande det fungerar! Chip växlar till läget 0x02, börjar sända på 57600 baud, och allt är väl. I själva verket med HC-06 som sändaren funkar 100% av tiden (använder en Brainlink, den ibland kräver ett nytt försök).
Så finns det tre komponenter i projektet:
I. Ange HC-06 Bluetooth-radion 57600 baud. Den här inställningen överlever powercycling. Detta är besvärligt men behöver bara göras en gång.
II. löda anslutningar till headsetet för att ansluta den till HC-06 radion.
III. se till att headsetet går till läge 0x02 genom att skicka den magiska hex-strängen (eller någon variant på den) på 57600 baud. Detta kan göras genom att bygga magiska strängen i EEGEN programvara eller genom att skriva ett enkelt program som skickar den magiska hex-strängen till enheten och enheten kan sedan användas med någon programvara som är kompatibel med 12Sprints Mobile. Jag gjorde båda: Jag skrev några EEGEN programvara i Java som kan köras på en PC (förmodligen även Mac och Linux men jag har inte testat det där) och som skickar magiska strängen innan displayen råvaror och bearbetade data, och jag gjorde en enkel Android app som bara skickar den magiska snöre (eller en variant på den) på 57600 baud och aktiverar 12Sprints mobil kompatibla läge. Båda programmen är öppen källkod.