Inhoudsopgave:
- Stap 1: Materialen
- Stap 2: Fysiologische achtergrond en de noodzaak van een circuit
- Stap 3: Signaalverwerking: waarom en hoe?
- Stap 4: Hoe het circuit werkt
- Stap 5: Componenten en waarden kiezen
- Stap 6: Het circuit bouwen
- Stap 7: Circuit testen met een mens
- Stap 8: Arduino-code
- Stap 9: Toekomstige stappen
Video: Lichten bedienen met uw ogen: 9 stappen (met afbeeldingen)
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:15
Dit semester op de universiteit volgde ik een cursus genaamd Instrumentation in Biomedicine, waarin ik de basis leerde van signaalverwerking voor medische toepassingen. Voor het eindproject van de klas werkte mijn team aan EOG-technologie (elektrooculografie). In wezen sturen elektroden die aan iemands slapen zijn bevestigd een spanningsverschil (gebaseerd op de corneo-retinale dipool) naar een circuit dat is ontworpen om het signaal te filteren en te versterken. Het signaal wordt naar een ADC (analoog-naar-digitaal-omzetter - in mijn geval de ADC van een Arduino Uno) gevoerd en gebruikt om de kleuren van een neopixeljuweel te veranderen.
Deze tutorial is een manier voor mij om vast te leggen wat ik heb geleerd, en ook om met de vaste lezer te delen hoe signalen worden geïsoleerd van het menselijk lichaam (wees gewaarschuwd: het zit vol met extra details!). Deze schakeling kan, met een paar kleine aanpassingen, daadwerkelijk worden gebruikt voor de elektrische impulsen van motorharten als een ECG-golfvorm, en nog veel meer! Hoewel het zeker lang niet zo geavanceerd en geperfectioneerd is als machines die je in een ziekenhuis zou aantreffen, is deze oog-positie-gestuurde lamp geweldig voor een eerste begrip en een glimp.
Opmerking: ik ben geen expert in signaalverwerking, dus als er fouten zijn of als je suggesties hebt voor verbeteringen, laat het me dan weten! Ik moet nog veel leren, dus commentaar wordt op prijs gesteld. Ook vereisen veel van de artikelen waarnaar ik in links in deze tutorial verwijs, academische toegang die ik heb gekregen van mijn universiteit; excuses bij voorbaat voor degenen die geen toegang hebben.
Stap 1: Materialen
- protoboard
- weerstanden (100, 1k, 10k, 33k, 1M + 0,5M)
- condensator (0.1uF)
- instrumentatieversterker (INA111 in mijn geval, maar er zijn er een paar die relatief goed zouden moeten werken)
- op amp (elke - ik had toevallig een LM324N)
- neopixel (alle werken, maar ik gebruikte een juweel)
- 9V batterijen x2
- 9V batterij headers x2
- vaste gelelektroden (elektrodeselectie wordt besproken in stap 5)
- potentiometer
- geïsoleerde draad
- draadstrippers
- soldeerbout + soldeer
- krokodillenklemmen (met draden eraan vast - soldeer indien nodig wat vast)
- hete lijm (om draden te stabiliseren die heen en weer zouden worden gebogen)
- Arduino (vrijwel alle werken aan boord, maar ik gebruikte een Arduino Uno)
AANBEVOLEN: oscilloscoop, multimeter en functiegenerator. Onderzoek uw uitgangen in plaats van alleen te vertrouwen op mijn weerstandswaarden!
Stap 2: Fysiologische achtergrond en de noodzaak van een circuit
Korte disclaimer: ik ben geenszins een medisch expert op dit gebied, maar ik heb gecompileerd en vereenvoudigd wat ik heb geleerd in de klas / van Googlen hieronder, met links om verder te lezen als je dat wilt. Deze link is ook verreweg het beste overzicht van het onderwerp dat ik heb gevonden - inclusief alternatieve technieken.
EOG (elektro-oculografie) werkt op de corneo-retinale dipool. Het hoornvlies (voorkant van het oog) is licht positief geladen en het netvlies (achterkant van het oog) licht negatief geladen. Wanneer u elektroden op de slapen aanbrengt en uw circuit op uw voorhoofd aardt (helpt uw metingen te stabiliseren en 60Hz-interferentie te elimineren), kunt u ongeveer ~1-10mV spanningsverschillen meten voor horizontale oogbewegingen (zie de afbeelding hierboven). Voor verticale oogbewegingen plaatst u in plaats daarvan elektroden boven en onder uw oog. Zie dit artikel om goed te lezen hoe het lichaam omgaat met elektriciteit - geweldige informatie over huidimpedantie, enz. EOG's worden vaak gebruikt voor het diagnosticeren van oogziekten zoals cataracten, refractieafwijkingen of maculaire degeneratie. Er zijn ook toepassingen in ooggestuurde robotica waarbij eenvoudige taken in een oogwenk kunnen worden uitgevoerd.
Om deze signalen te lezen, d.w.z. het spanningsverschil tussen de elektroden te berekenen, nemen we een belangrijke chip op, een instrumentatieversterker genaamd, in ons circuit. Deze instrumentatieversterker bestaat uit spanningsvolgers, een niet-inverterende versterker en een differentiële versterker. Als je niet veel weet over opamps, lees dit dan voor een spoedcursus - in wezen nemen ze een ingangsspanning, schalen deze en geven de resulterende spanning af met behulp van de stroomrails. De integratie van alle weerstanden tussen elke fase helpt bij tolerantiefouten: normaal hebben weerstanden 5-10% tolerantie in waarden, en het reguliere circuit (niet volledig geïntegreerd in een instrumentatieversterker) zou sterk afhankelijk zijn van nauwkeurigheid voor een goede CMMR (zie volgende stap). De spanningsvolgers zijn voor een hoge ingangsimpedantie (besproken in de bovenstaande paragraaf - belangrijk om schade aan de patiënt te voorkomen), de niet-inverterende versterker moet zorgen voor een hoge versterking van het signaal (meer over versterking in de volgende stap) en de differentiële versterker neemt het verschil tussen de ingangen (trekt de waarden af van de elektroden). Deze zijn ontworpen om zoveel mogelijk ruis/interferentie in de gewone modus te verpletteren (voor meer informatie over signaalverwerking, zie de volgende stap) voor biomedische signalen, die vol zitten met externe artefacten.
De elektroden hebben te maken met enige huidimpedantie, aangezien de weefsels en het vet van uw huid de directe meting van spanningen belemmeren, waardoor signaalversterking en filtering nodig zijn. Hier, hier en hier zijn enkele artikelen waarin onderzoekers hebben geprobeerd deze impedantie te kwantificeren. Deze fysiologische grootheid wordt gewoonlijk gemodelleerd als een weerstand van 51 kOhm parallel aan een condensator van 47 nF, hoewel er veel variaties en combinaties zijn. Huid op verschillende locaties kan verschillende impedanties hebben, vooral als je kijkt naar de verschillende diktes en hoeveelheden aangrenzende spieren. Impedantie verandert ook met hoe goed uw huid is voorbereid op elektroden: een grondige reiniging met water en zeep wordt over het algemeen aanbevolen om een uitstekende hechting en consistentie te garanderen, en er zijn zelfs speciale gels voor elektroden als u echt perfectie wenst. Een belangrijke opmerking is dat de impedantie verandert met de frequentie (karakteristiek voor condensatoren), dus u moet uw signaalbandbreedte weten om de impedantie te voorspellen. En ja, het schatten van de impedantie IS belangrijk voor het afstemmen van ruis - zie de latere stap voor meer informatie hierover.
Stap 3: Signaalverwerking: waarom en hoe?
Waarom kunt u het spanningsverschil van 1-10mV niet gewoon gebruiken als een onmiddellijke uitgang om LED's aan te sturen? Welnu, er zijn veel redenen om signalen te filteren en te versterken:
-
Veel ADC's (analoog-naar-digitaal-converters - nemen uw analoge ingang en digitaliseren deze voor het lezen en opslaan van gegevens op de computer) kunnen zulke kleine veranderingen eenvoudigweg niet detecteren. De ADC van de Arduino Uno is bijvoorbeeld specifiek een 10-bit ADC met 5V-uitgang, wat betekent dat hij 0-5V-ingangsspanningen in kaart brengt (waarden die buiten het bereik vallen, worden "rail", wat betekent dat lagere waarden worden gelezen als 0V en hogere waarden worden gelezen als 5V) tot gehele waarden tussen 0 en 1023. 10mV is zo klein in dat 5V-bereik, dus als u uw signaal kunt versterken tot het volledige 5V-bereik, zullen kleine veranderingen gemakkelijker waarneembaar zijn omdat ze worden weerspiegeld door grotere kwantitatieve veranderingen (5mV verandering naar 10mV in tegenstelling tot 2V verandering naar 4V). Zie het als een kleine afbeelding op uw computer: de details worden misschien perfect gedefinieerd door uw pixels, maar u kunt geen vormen onderscheiden tenzij u de afbeelding uitbreidt.
Merk op dat het beter is om meer bits voor uw ADC te hebben, omdat u kwantiseringsruis kunt minimaliseren door uw continue signaal om te zetten in discrete, gedigitaliseerde waarden. Gebruik als vuistregel N = SNR (in dB)/6 om te berekenen hoeveel bits u nodig hebt voor ~96% behoud van ingangs-SNR. U wilt echter ook rekening houden met uw portemonnee: als u meer bits wilt, moet u bereid zijn meer geld uit te geven
-
Ruis en interferentie (ruis = willekeurige artefacten die uw signalen gekarteld maken in plaats van vloeiend versus interferentie = niet-willekeurige, sinusoïdale artefacten van aangrenzende signalen van radiogolven, enz.) pesten alle signalen die uit het dagelijks leven worden gemeten.
- De meest bekende is interferentie van 60 Hz (50 Hz als je in Europa bent en geen in Rusland omdat ze gelijkstroom gebruiken in plaats van wisselstroom voor stopcontacten …), wat de netfrequentie wordt genoemd vanwege de elektromagnetische wisselstroomvelden van stopcontacten. Hoogspanningsleidingen voeren AC-hoogspanning van elektrische generatoren naar woonwijken, waar transformatoren de spanning verlagen tot de standaard ~120V in Amerikaanse stopcontacten. De wisselspanning leidt tot dit constante bad van 60Hz interferentie in onze omgeving, die interfereert met alle soorten signalen en moet worden uitgefilterd.
-
60Hz-interferentie wordt gewoonlijk common-mode-interferentie genoemd omdat het in beide ingangen (+ en -) naar opamps voorkomt. Nu hebben op-versterkers iets dat de common-mode-rejectieverhouding (CMRR) wordt genoemd om common-mode-artefacten te verminderen, maar (corrigeer me als ik het mis heb!) Dit is vooral goed voor common-mode-ruis (willekeurig: ruis in plaats van niet-willekeurig: interferentie). Om 60Hz kwijt te raken kunnen met bandstopfilters deze selectief uit het frequentiespectrum worden verwijderd, maar dan loop je ook het risico dat je daadwerkelijke data verwijdert. In het beste geval kun je een laagdoorlaatfilter gebruiken om alleen een frequentiebereik lager dan 60 Hz te houden, zodat alles met hogere frequenties eruit wordt gefilterd. Dat is wat ik deed voor de EOG: de verwachte bandbreedte van mijn signaal was 0-10Hz (snelle oogbewegingen buiten beschouwing gelaten - wilde er in onze vereenvoudigde versie niet mee omgaan), dus verwijderde ik frequenties groter dan 10Hz met een laagdoorlaatfilter.
- 60Hz kan onze signalen beschadigen via capacitieve koppeling en inductieve koppeling. Capacitieve koppeling (lees hier over condensatoren) treedt op wanneer lucht fungeert als een diëlektricum voor wisselstroomsignalen die tussen aangrenzende circuits moeten worden geleid. Inductieve koppeling komt van de wet van Faraday als je stroom in een magnetisch veld laat lopen. Er zijn veel trucs om koppeling te overwinnen: je zou bijvoorbeeld een geaard schild als een soort kooi van Faraday kunnen gebruiken. Het verdraaien/vlechten van draden, indien mogelijk, verkleint het gebied dat beschikbaar is voor inductieve koppeling om te interfereren. Het inkorten van draden en het verkleinen van de totale grootte van uw circuit heeft om dezelfde reden hetzelfde effect. Vertrouwen op batterijvoeding voor op-amp-rails in plaats van op een stopcontact aan te sluiten, helpt ook omdat de batterijen een gelijkstroombron leveren zonder sinusoïdale oscillatie. Lees hier nog veel meer!
-
Laagdoorlaatfilters verwijderen ook veel ruis, aangezien willekeurige ruis wordt weergegeven door hoge frequenties. Veel geluiden zijn witte ruis, wat betekent dat ruis aanwezig is voor alle frequenties, dus het zo veel mogelijk beperken van uw signaalbandbreedte helpt bij het beperken van de hoeveelheid van die ruis in uw signaal.
Sommige laagdoorlaatfilters worden anti-aliasingfilters genoemd omdat ze aliasing voorkomen: wanneer sinusoïden onderbemonsterd zijn, kunnen ze worden gedetecteerd als een andere frequentie dan ze in werkelijkheid zijn. U moet er altijd aan denken om de bemonsteringsstelling van Nyquist te volgen (bemonsteringssignalen met een 2x hogere frequentie: u hebt een bemonsteringsfrequentie van >2Hz nodig voor een verwachte sinusgolf van 1 Hz, enz.). In dit EOG-geval hoefde ik me geen zorgen te maken over Nyquist omdat mijn signaal naar verwachting voornamelijk in het 10Hz-bereik zou zijn, en mijn Arduino ADC-samples op 10kHz - meer dan snel genoeg om alles op te vangen
- Er zijn ook kleine trucjes om van ruis af te komen. Een daarvan is om een steraarde te gebruiken, zodat alle delen van je circuits exact dezelfde referentie hebben. Anders kan wat het ene onderdeel 'aarde' noemt, verschillen van het andere onderdeel vanwege de lichte weerstand in draden, wat leidt tot inconsistenties. Solderen op protoboard in plaats van plakken met breadboards vermindert ook wat ruis en creëert veilige verbindingen die u kunt vertrouwen in tegenstelling tot invoegen met perspassing.
Er zijn tal van andere manieren om ruis en interferentie te onderdrukken (zie hier en hier), maar je kunt daar een les over volgen of Google voor meer info: laten we verder gaan met het eigenlijke circuit!
Stap 4: Hoe het circuit werkt
Laat je niet intimideren door het schakelschema: hier is een grove uitsplitsing van hoe alles werkt: (verwijs ook terug naar de vorige stap voor wat uitleg)
- Helemaal links hebben we de elektroden. Een is bevestigd aan de linkerslaap, een andere aan de rechterslaap en de derde elektrode is geaard op het voorhoofd. Deze aarding stabiliseert het signaal, zodat er minder drift is, en het verwijdert ook een deel van de 60Hz-interferentie.
- De volgende is de instrumentatieversterker. Ga twee stappen terug voor een uitleg van wat het doet om het spanningsverschil te genereren. De vergelijking voor het wijzigen van de versterking van de versterker staat op pagina 7 van het gegevensblad [G = 1+(50kOhm/Rg) waarbij Rg is aangesloten op de pennen 1 en 8 van de versterker]. Voor mijn circuit heb ik een versterking van 500 ingesteld door Rg = 100Ohm te gebruiken.
- Nadat de instrumentatieversterker het 500x versterkte spanningsverschil heeft uitgevoerd, is er een RC-laagdoorlaatfilter van de eerste orde, dat bestaat uit een weerstand R_filter en condensator C_filter. Het laagdoorlaatfilter voorkomt anti-aliasing (maar ik maak me geen zorgen, want door Nyquist moet ik ten minste 20 Hz samplen voor een verwachte bandbreedte van 10 Hz, en de Arduino ADC-samples op 10 kHz - meer dan genoeg) en elimineert ook ruis op alle frequenties die ik niet nodig heb. Het RC-systeem werkt omdat condensatoren hoge frequenties gemakkelijk doorlaten, maar lagere frequenties belemmeren (impedantie Z = 1/(2*pi*f)), en het creëren van een spanningsdeler met de spanning over de condensator resulteert in een filter dat alleen lagere frequenties toelaat door [cutoff voor 3dB intensiteit wordt bepaald door de formule f_c = 1/(2*pi*RC)]. Ik heb de R- en C-waarden van mijn filter aangepast om signalen hoger dan ~ 10 Hz af te sluiten, omdat het biologische signaal voor EOG's in dat bereik wordt verwacht. Oorspronkelijk sneed ik af na 20 Hz, maar na experimenteren werkte 10 Hz net zo goed, dus ging ik met de kleinere bandbreedte (kleinere bandbreedte is beter om alles wat niet nodig is weg te laten, voor het geval dat).
- Met dit gefilterde signaal heb ik de output gemeten met een oscilloscoop om mijn bereik van waarden te zien van links en rechts kijken (de twee uitersten van mijn bereik). Dat bracht me op ongeveer 2-4V (omdat de versterking van de instrumentatieversterker 500x was voor een bereik van ~4-8mV), terwijl mijn doel 5V is (volledig bereik van de Arduino ADC). Dit bereik varieerde erg (gebaseerd op hoe goed de persoon de huid van tevoren had gewassen, enz.) Dus ik wilde niet zoveel winst hebben met mijn tweede niet-inverterende versterker. Ik heb het uiteindelijk aangepast om een versterking van slechts ongeveer 1,3 te hebben (pas R1 en R2 in het circuit aan omdat versterking van de versterker = 1+R2/R1). U moet uw eigen output bepalen en vanaf daar aanpassen zodat u niet meer dan 5V gaat! Gebruik niet alleen mijn weerstandswaarden.
- Dit signaal kan nu in de Arduino analoge pin worden ingevoerd om te lezen MAAR de Arduino ADC accepteert geen negatieve invoer! U moet uw signaal omhoog verschuiven zodat het bereik 0-5V is in plaats van -2,5V tot 2,5V. Een manier om dit op te lossen is om de massa van je printplaat aan te sluiten op de 3,3V-pin van de Arduino: dit verschuift je signaal met 3,3V (meer dan 2,5V optimaal, maar het werkt). Mijn bereik was erg wankel, dus ik ontwierp een variabele offset-spanning: op die manier kon ik de potentiometer draaien om het bereik op 0-5V te centreren. Het is in wezen een variabele spanningsdeler die gebruikmaakt van de +/- 9V-stroomrails, zodat ik de circuitaarde op elke waarde van -9 tot 9V kan bevestigen en zo mijn signaal 9V omhoog of omlaag kan verschuiven.
Stap 5: Componenten en waarden kiezen
Met het circuit uitgelegd, hoe kiezen we welke (elektrode, opamp) we moeten gebruiken?
-
Als sensor hebben de massieve gelelektroden een hoge ingangsimpedantie en een lage uitgangsimpedantie: wat dit in wezen betekent, is dat stroom gemakkelijk stroomafwaarts naar de rest van het circuit kan gaan (lage uitgangsimpedantie), maar het zou lastig zijn om stroomopwaarts terug naar je slapen te gaan (hoge ingangsimpedantie). Dit voorkomt dat de gebruiker gewond raakt door hoge stromen of spanningen in de rest van uw circuit; in feite hebben veel systemen een zogenaamde patiëntbeschermingsweerstand voor extra bescherming, voor het geval dat.
-
Er bestaan veel verschillende soorten elektroden. De meeste mensen raden Ag/AgCl-vaste gelelektroden aan voor gebruik in ECG/EOG/etc-toepassingen. Met dit in gedachten moet je de bronweerstand van deze elektroden opzoeken (ga twee stappen terug voor mijn aantekeningen over huidimpedantie) en deze afstemmen op de ruisweerstand (ruisspanning in V/sqrt (Hz) gedeeld door ruisstroom in A/sqrt(Hz) -- zie datasheets van opamps) van uw opamps -- zo kiest u de juiste instrumentatieversterker voor uw apparaat. Dit wordt ruismatching genoemd en verklaringen waarom het matchen van bronweerstand Rs aan ruisweerstand Rn werkt, kunt u online vinden, zoals hier. Voor mijn INA111 die ik heb gekozen, kan de Rn worden berekend met behulp van de ruisspanning en ruisstroom van het gegevensblad (screenshot hierboven).
-
Er zijn VEEL artikelen die de prestaties van elektrodes evalueren, en geen enkele elektrode is de beste voor alle doeleinden: probeer het bijvoorbeeld hier. Impedantie verandert ook voor verschillende bandbreedtes, zoals weergegeven in de opamp-gegevensbladen (sommige gegevensbladen hebben curven of tabellen met verschillende frequenties). Doe je onderzoek, maar vergeet niet om je portemonnee in gedachten te houden. Het is leuk om te weten welke elektroden/opamps het beste zijn, maar het heeft geen zin als je het niet kunt betalen. U hebt minimaal 50 elektroden nodig om te testen, niet slechts 3 voor eenmalig gebruik.
-
Voor optimale ruisaanpassing moet niet alleen Rn ~= Rs: u wilt ook dat de ruisspanning * ruisstroom (Pn) zo laag mogelijk is. Dit wordt belangrijker geacht dan het maken van Rn ~= Rs, omdat je Rs en Rn kunt aanpassen door indien nodig transformatoren te gebruiken.
Waarschuwingen bij transformatoren (correct me if wrong): ze kunnen wat omvangrijk zijn en dus niet optimaal voor apparaten die klein moeten zijn. Ze bouwen ook warmte op, dus koellichamen of uitstekende ventilatie zijn noodzakelijk
- Ruis komt alleen overeen met uw eerste initiële versterker; de tweede versterker heeft niet zoveel invloed, dus elke opamp zal het doen.
-
-
-
Stap 6: Het circuit bouwen
Gebruik het bovenstaande fritzing-diagram om het circuit te bouwen (tweede exemplaar schetst waar elk onderdeel naar verwijst in het schakelschema van de vorige stap). Als je hulp nodig hebt bij het identificeren van de LED's in het diagram, gebruik dan deze weerstandskleurcodecalculator, maar de Rg van de instrumentatieversterker is 100 Ohm, de R_filter is 1,5 MOhm, de C_filter is 0,1 uF, R1 van de niet-inverterende versterker is de 10 kOhm, R2 is de 33kOhm en de weerstand voor de potentiometer is de 1kOhm (potentiometer varieert van 0 tot 20kOhm). Vergeet niet om uw weerstandswaarden naar behoefte te wijzigen om de versterkingen aan te passen!
Edit: er zit een fout in het offset grondgedeelte. Verwijder de linker zwarte draad. De weerstand moet met de rode draad worden aangesloten op de stroomrail zoals weergegeven, maar ook op de tweede pin, niet de eerste, van de potentiometer. De eerste pin van de potentiometer moet worden aangesloten op de 5V-pin van de Arduino. Oranje draad die de offset-aarde is, moet worden aangesloten op de tweede pin, niet op de eerste.
Ik heb veel gesproken over de offset grond. In het diagram kun je zien dat de Arduino-aarde wordt weergegeven als verbonden met de grond van het breadboard. Dat is in het scenario dat u uw terrein niet hoeft te verschuiven. Als uw signaal buiten bereik is en u uw grond moet verschuiven, probeer dan eerst de Arduino-aarde aan te sluiten op de 3.3V-pin van de Arduino en bekijk uw signaal. Probeer anders de oranje draad in de opstelling van de potentiometer (offset-aarde) aan te sluiten op de GND-pin van de Arduino.
VEILIGHEIDSOPMERKING: bewaar de batterijen NIET tijdens het solderen en plaats of soldeer de batterijen NIET achterstevoren. Je circuit begint te roken, condensatoren blazen en het breadboard kan ook beschadigd raken. Gebruik als vuistregel de batterijen alleen als je de schakeling wilt gebruiken; verwijder ze anders (het toevoegen van een flip-schakelaar om de batterijen gemakkelijk los te koppelen zou ook een goed idee zijn).
Merk op dat je het circuit stuk voor stuk moet bouwen (controleer elke fase!) en op een breadboard voordat je het op een protoboard soldeert. De eerste stap om te controleren is de instrumentatieversterker: bevestig alle rails (soldeer in batterijhouders), Rg, enz. En gebruik een oscilloscoop op de uitgangspen. Gebruik om te beginnen een functiegenerator met een sinusgolf van 1 Hz met een amplitude van 5 mV (of het laagste dat uw generator zal gaan). Dit is alleen om te controleren of de instrumentatieversterker goed werkt en dat uw Rg uw doelversterking levert.
Controleer vervolgens uw laagdoorlaatfilter. Voeg dat deel van het circuit toe en controleer uw golfvorm: het zou er precies hetzelfde uit moeten zien, maar minder ruis (gekarteld - zie de laatste twee afbeeldingen hierboven). Laten we nu uw uiteindelijke output met een oscilloscoop met uw elektroden onderzoeken in plaats van een functiegenerator …
Stap 7: Circuit testen met een mens
Plaats opnieuw elektroden op uw linker- en rechterslaap en bevestig een aardingsdraad aan een elektrode op uw voorhoofd. Pas daarna mag u batterijen toevoegen -- als er een tinteling optreedt, verwijder dan ONMIDDELLIJK en controleer de aansluitingen nog eens!!! Controleer nu uw waardenbereik als u links versus rechts kijkt en pas R1/R2 van de niet-inverterende versterker aan, zoals twee stappen geleden werd uitgelegd -- onthoud dat het doel een bereik van 5 V is! Zie afbeeldingen hierboven voor opmerkingen over waar u op moet letten.
Als je tevreden bent met alle weerstandswaarden, soldeer je alles op een protoboard. Solderen is niet strikt noodzakelijk, maar het biedt meer stabiliteit dan eenvoudige perspassingsverbindingen en neemt de onzekerheid weg dat het circuit niet werkt, simpelweg omdat je ze niet hard genoeg in een breadboard hebt gedrukt.
Stap 8: Arduino-code
Alle code bijgevoegd onderaan deze stap!
Nu je een bereik van 5V hebt, moet je ervoor zorgen dat het binnen 0-5V valt in plaats van -1V tot 4V, enz. Sluit ofwel aarde aan op de 3,3V-pin van de Arduino of bevestig de offset-aardingsspanning (oranje draad hierboven) op de grondrail en sluit vervolgens een draad van de grondrail aan op de GND-pin van de Arduino (dit is om het signaal omhoog of omlaag te schuiven zodat je binnen het bereik van 0-5V valt). Je zult moeten spelen: vergeet niet om je output te scopen als je onzeker bent!
Nu voor kalibratie: u wilt dat het licht van kleur verandert voor verschillende oogposities (uiterst links kijkend versus niet zo ver links …). Daarvoor heb je waarden en bereiken nodig: voer EOG-calibration-numbers.ino uit op de Arduino met alles goed aangesloten (maak de verbindingen met de Arduino en neopixel af volgens mijn fritzing-diagram). Niet super nodig, maar voer ook de bioe.py-code uit die ik heb - dit zal een tekstbestand naar je bureaublad uitvoeren, zodat je alle waarden kunt opnemen terwijl je naar links of rechts kijkt (python-code is aangepast van dit voorbeeld). Hoe ik dit deed, was 8 tellen naar links kijken, dan naar rechts, dan omhoog, dan omlaag en herhaal dit voor later middeling (zie output_2.pdf voor een log die ik bijhield). Druk op ctrl+C om geforceerd te stoppen als je tevreden bent. Met behulp van die waarden kun je het bereik van de animaties aanpassen in mijn BioE101_EOG-neopixel.ino-code. Voor mij had ik een regenbooganimatie toen ik recht vooruit keek, blauw voor uiterst links, groen voor licht links, paars voor licht rechts en rood voor uiterst rechts.
Stap 9: Toekomstige stappen
Voila; iets dat je met je ogen kunt controleren. Er moet nog veel worden geoptimaliseerd voordat het zijn weg naar een ziekenhuis kan vinden, maar dat is voor een andere dag: de basisconcepten zijn nu in ieder geval gemakkelijker te begrijpen. Een ding dat ik graag terug zou willen doen, is mijn versterking aanpassen naar 500 voor de instrumentatieversterker: terugkijkend was dat waarschijnlijk te veel omdat mijn signaal daarna al 2-4V was en ik het moeilijk had om de niet-inverterende versterker om mijn bereik perfect af te stemmen…
Het is moeilijk om consistentie te krijgen omdat het signaal ZO VEEL verandert voor verschillende omstandigheden:
- ander persoon
- lichtomstandigheden
- huidvoorbereiding (gels, wassen, enz.)
maar toch ben ik best tevreden met mijn laatste video-bewijs van uitvoering (om 3 uur 's nachts genomen, want dan begint alles op magische wijze te werken).
Ik weet dat veel van deze tutorial verwarrend kan lijken (ja, de leercurve was ook moeilijk voor mij), dus aarzel niet om hieronder vragen te stellen en ik zal mijn best doen om te antwoorden. Genieten van!
Runner Up in de Untouchable Challenge
Aanbevolen:
Halloween-pompoen met een bewegend animatronic-oog - Deze pompoen kan zijn ogen rollen! 10 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Halloween-pompoen met een bewegend animatronic-oog | Deze pompoen kan zijn oog rollen!: In deze Instructable leer je hoe je een Halloween-pompoen maakt die iedereen bang maakt als zijn oog beweegt. Stel de triggerafstand van de ultrasone sensor in op de juiste waarde (stap 9) en je pompoen zal iedereen die het aandurft om snoep te nemen versteenen
Griezelige ogen: 5 stappen (met afbeeldingen)
Griezelige ogen: dit is mijn tweede poging om dit instructable te publiceren omdat de eerste niet alle stappen zou uploaden. Hopelijk zullen de goede mensen bij Instructables de eerste verwijderen. Oorspronkelijk wilde ik deze ogen in een plastic jack-o-lantern plaatsen die
De zonsverduistering door een leesbril kijken (en mijn ogen niet branden): 4 stappen (met afbeeldingen)
De eclips kijken door een leesbril (en mijn ogen niet branden): Hé, heb ik je nieuwsgierigheid opgemerkt met mijn titel? Mijn vader deed dat ook, toen we gisteren in het oude Montréal liepen, trok hij zijn bril af en liet hij me zien hoe ik de zonsverduistering kon zien, dacht zijn leesbril. Dus alles wat
Groene lichten: 4 stappen (met afbeeldingen)
Green Lights: Green Lights is een project dat is opgezet om studenten te leren over fysiek computergebruik. Dit omvat in- en uitgangen, elektriciteit, programmeren met Arduino en een klein beetje over verkeersregelsystemen. Het kruispunt wordt aangelegd aan de voor
Dansende lichten: 18 stappen (met afbeeldingen)
Dancing Lights: als reactie op muziek. Gebruik een LED-lamp verwijderd van een pen, aansteker of vergelijkbaar apparaat en een paar andere componenten om het te bouwen. Geen solderen betrokken. Dit is een vereenvoudigde versie van de knipperende LED's die hier eerder zijn gepost. Ik zal proberen om el