Სარჩევი:

Arduino TDCS სუპერ მარტივი. ტრანსკრანიალური პირდაპირი მიმდინარე სტიმულატორი (tDCS) წვრილმანი: 5 ნაბიჯი
Arduino TDCS სუპერ მარტივი. ტრანსკრანიალური პირდაპირი მიმდინარე სტიმულატორი (tDCS) წვრილმანი: 5 ნაბიჯი

ვიდეო: Arduino TDCS სუპერ მარტივი. ტრანსკრანიალური პირდაპირი მიმდინარე სტიმულატორი (tDCS) წვრილმანი: 5 ნაბიჯი

ვიდეო: Arduino TDCS სუპერ მარტივი. ტრანსკრანიალური პირდაპირი მიმდინარე სტიმულატორი (tDCS) წვრილმანი: 5 ნაბიჯი
ვიდეო: The tDCS Update - v2.0 (tDCS Tutorial Followup) 2024, ნოემბერი
Anonim
Arduino TDCS სუპერ მარტივი. ტრანსკრანიალური პირდაპირი მიმდინარე სტიმულატორი (tDCS) წვრილმანი
Arduino TDCS სუპერ მარტივი. ტრანსკრანიალური პირდაპირი მიმდინარე სტიმულატორი (tDCS) წვრილმანი

Para fazer este tDCS você precisará apenas de um arduino, resistor, capacitor e alguns cabos კომპონენტები

  1. არდუინო

    • Pino D13 გამოიყენება SWM PWM (pode ser alterado).
    • Pino A0 como entrada analógica (para feedback de corrente).
    • Pino GND apenas para GND.
  2. რეზისტორი (~ 470 Ω, mas provavelmente entre 300-1000 Ω ფუნქცია, vocé precisará alterar no código fonte)
  3. კონდენსატორი (220 μF). მიირთვით PWM– ის დამკვიდრებისთვის.
  4. Eletrodos de Esponja (გამოიყენეთ uagua salina para molhá-lo).

Como funciona

O Arduino გაანგარიშება corrente padrão (pode ser alterado) que passará pelo seu cérebro apenas por mudar a voltagem de saída. Você também pode alterar o valor do target_mA სერიული CLI (კონსოლი).

ნაბიჯი 1: საიბა მაისი

საიბა მაისი
საიბა მაისი

Você deve ler mais sobre tDCS primeiro. FDA და POD არის წინასწარგანწყობილი და ეფექტური, რაც ხელს უწყობს იმ ფაქტს, რომ ჩვენ ვსაუბრობთ იმაზე, თუ როგორ ვრცელდება ის, რაც გავლენას ახდენს მათზე…

ნაბიჯი 2: Monte O Circuito Abaixo

Monte O Circuito Abaixo
Monte O Circuito Abaixo

No se esqueça das esponjas com água salina!

ნაბიჯი 3: დააინსტალირეთ O Código No Seu Arduino

Lembre-se de alterar as configurações e parametros na área de HARDWARE PARAMS e CONFIGURABLE PARAMS.

Você também deve alterar o boud rate do Serial para: 115200 para poder ver o resultado.

შესრულების ბრძანებები, troque o No Line Ending para Carriage Return.

O código fonte + tutorial também podem ser encontrados no repositório:

კოდიგო:

const სიმებიანი ver = "2.0 მ"; // HARDWARE PARAMS const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // ვოლტაჟი PWM padrão do Arduino [V] float maxRefInV = 1.1; // რეფერენცია à voltagem analógica [V] float R = 470.0; // Resistencia da corrente [Ohm]

// კონფიგურირებადი პარამები

bool plotter = ყალბი; // განსაზღვრება: ჭეშმარიტი, caso esteja usando o სერიული plotter bool putty = false; // განსაზღვრება: ჭეშმარიტი, უსათუოდ გამოიყენება PuTTT (პოდ ser alterado no CLI) int maxmin = 30; // Tempo (em minutos) needário para desligar [Min] float target_mA = 2.73; // Essa é a corrente que passará pelo seu cérebro !!! [mA] float epsilon_mA = 0.03; // Diferença máxima entre corrente real e o target_mA (Não altere caso não saiba o que está fazendo!)

// INIT GLOBALS

int სახელმწიფო = 1; /* -1 - Cérebro não identificado 0 - Voltagem sendo alterada para definir a corrente padrão 1 - Tudo certo. Você esta na corrente definida -10 - Voltagem desligada */ float outV = maxOutV; // Voltagem int debounced_state = 0; int zeros_len = 0; float smoothed_mA = 0;

სიმებიანი commandString = ""; // CLI– სთვის

// გამოხმაურების დამხმარეები

float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {მდგომარეობა = -1; // resistencia muito alta -> cérebro não encontrado? დაბრუნება maxOutV; // დაბრუნება maxOutV/5.0; // para segurança} სახელმწიფო = 0; დაბრუნება 0.1*new_V+0.9*V; // new_V დაბრუნება; }

int convertVtoOutputValue (float V) {

დაბრუნების შეზღუდვა (int (V/maxOutV*255), 0, 255); }

float sensorValue2mA (int sensorValue) {

float sensorVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = სენსორიVoltage/R*1000.0; დაბრუნების სენსორი_ mA; }

int debounced_state_compute (int state) {

თუ (მდგომარეობა 5) დააბრუნე 0; } დაბრუნება 1; }

ხელმოუწერელი გრძელი დასაწყისი, დასასრული;

void process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); smoothed_mA = 0.2*new_mA+0.8*smoothed_mA; float V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = გამოცხადებული_სახელმწიფო_კომპიუტერი (მდგომარეობა); // Exibir informações no CLI endc = (millis ()-დაწყება)/1000; სიმებიანი ტელევიზია = "[", ttm = "mA/", tsm = "V,", ts = "mA] | ესტადო:", h = "| დრო:", s = ":", leadM = "", leadS = "", plotT = "სამიზნე:", plotmA = "\ t გათლილი MA:", plotMin = "\ t მინიმალური:", ტემპი; ხელმოუწერელი გრძელი tmin = endc/60-((endc/60)%1); // ფორმატირება if (endc%60 <10) leadS = "0"; თუ (tmin = 0) ts = ts + " +"; // ავტომატური პარამეტრი if (tmin> maxmin) stop_device (); სიმებიანი txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; else txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (putty) Serial.print ("\ r / e [? 25l" + txt); სხვაგან Serial.println (txt);

// დაელოდეთ 2 მილიწამს მომდევნო მარყუჟამდე

// ანალოგურ-ციფრული გადამყვანის დასახმარებლად // ბოლო წაკითხვის შემდეგ: შეფერხება (5); }

void stop_device () {

მდგომარეობა = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); დახმარება (); }

// CLI დამხმარეები

void clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela სერიალი. დაწერე (27); // ESC Serial.print ("[H"); // / r თუ (! putty) for (int i = 0; i <= 30; i ++) Serial.println (""); }

ძალადაკარგული დახმარება () {

Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - atualiza o tempo máximo (em minutos)"); Serial.println ("'target_mA' - atualiza o target (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - atualiza a resistencia do hardware (Ohm)"); Serial.println ("'putty' - muda a formatação de saída pro PuTTY"); Serial.println ("'გაჩერება' - para a estulação"); Serial.println ("'გადატვირთვა' - inicia/reinicia a estulação & o timer"); Serial.println ("'გაგრძელება' - Continua a estestulação"); Serial.print ("\ n / rEstado: / n / r * max_time:"); Serial.print (maxmin); Serial.print ("minutos / n / r * target_mA:"); Serial.print (target_mA); Serial.print ("mA / n / r * epsilon_mA:"); სერიული. ბეჭდვა (epsilon_mA); Serial.print ("mA / n / r * R:"); სერიული. ბეჭდვა (R); Serial.println ("Ohms"); }

bool parse_param (String & cmdString) {

int spacePos = cmdString.indexOf (''); if (spacePos <= 0) დაბრუნება false; სიმებიანი ბრძანება = cmdString.substring (0, spacePos); სიმებიანი fval = cmdString.substring (spacePos+1); if (command == "putty") if (fval == "true") {putty = true; ჭეშმარიტი დაბრუნება; } else if (fval == "false") {putty = false; ჭეშმარიტი დაბრუნება; } float val = fval.toFloat (); if (command == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); დახმარება (); } else if (command == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); დახმარება (); } else if (ბრძანება == "R") {R = val; clearAndHome (); დახმარება (); } else if (ბრძანება == "max_time") {maxmin = val; clearAndHome (); დახმარება (); } else {დაბრუნება false; } დაბრუნება ჭეშმარიტი; }

// SETUP და MAIN LOOP

void setup () {Serial.begin (115200); analogReference (INTERNAL); //1.1 V Serial.print ("Sessão iniciada!"); დაწყება = მილი (); } void loop () {if (მდგომარეობა! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); თუ (ბაიტი (v) == 13) {// ვაგონის დაბრუნების ბოლი მიღებულია = ჭეშმარიტი; if (commandString == "?" || commandString == "გაჩერება") {stop_device (); } else if (commandString == "გადატვირთვა") {clearAndHome (); მდგომარეობა = -1; outV = maxOutV/5.0; დაწყება = მილი (); მიღებული = ყალბი; } else if (commandString == "გაგრძელება") {clearAndHome (); მდგომარეობა = -1; outV = maxOutV/5.0; მიღებული = ყალბი; } else {bool ok = parse_param (commandString); თუ (! კარგი) {clearAndHome (); დახმარება (); მიღებული = ყალბი; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; თუ (მიღებულია) {clearAndHome (); დახმარება (); Serial.println ("კარგი!"); }} else {commandString+= v; if (მდგომარეობა ==-10) {Serial.print (v); }}}}

ნაბიჯი 4: Uma UI Personalizada

უმა UI პერსონალიზება
უმა UI პერსონალიზება

იმის გათვალისწინებით, თუ როგორ უნდა გამოვიყენოთ, გამოვიყენოთ ferramenta PuTTY, e definina no código ფონტი:

ბოთლი = მართალია

დეფინიციის რეკომენდაციები:

  • ფანჯარა

    • 61 Colunas e 20 Linhas
    • გადახვევის ზოლის ჩვენება სასურველია
  • ფანჯარა> გარეგნობა

    ფონტი: ლუციდას კონსოლი, 28 პიქსელი

ნაბიჯი 5: დავიდა?

Para abrir a guia de ajuda, digite:

?

e pressione [ENTER]

OBS: Caso o Estado seja:

-1 -> Cérebro não identificado (corrente aberta) +0 -> Ajustando voltagem+1 -> Tudo certo, tDCS ფუნქცია

გირჩევთ: