Spisu treści:
- Krok 1: Saiba Mais
- Krok 2: Monte O Circuito Abaixo
- Krok 3: Zainstaluj O Código No Seu Arduino
- Krok 4: Personalizacja interfejsu użytkownika Uma
- Krok 5: Duvidas?
Wideo: Arduino TDCS Super proste. Przezczaszkowy stymulator prądu stałego (tDCS) Zrób to sam: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
Para fazer este tDCS você precisará apenas de um arduino, rezystor, kondensator e alguns cabosComponentes
-
Arduino
- Pino D13 como saída PWM (pode ser alterado).
- Pino A0 como entrada analógica (para feedback de corrente).
- Pino GND apenas dla GND.
- Rezystor (~470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
- Kondensator (220 μF). Podawać para estabilizar os pulsos do PWM.
- Eletrodos de Esponja (Użyj água salina para molhá-lo).
Funkcja Como
O Arduino calcula a 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 pelo serial CLI (konsola).
Krok 1: Saiba Mais
Você deve ler mais sobre tDCS primeiro. Não é aprovado pelo FDA e pode ser prejudicial a sua saúde, principalmente se você não sabe nada sobre os efeitos colaterais, precauções e dentre outros…
Krok 2: Monte O Circuito Abaixo
Não se esqueça das esponjas com água salina!
Krok 3: Zainstaluj O Código No Seu Arduino
Lembre-se de alterar as configurações e parametrys na área de HARDWARE PARAMS e CONFIGURING PARAMS.
Você também deve alterar lub boud rate do Serial para: 115200 para poder ver o resultado.
Para executar comandos, troque o No Line Ending para Carriage Return.
O código fonte + tutorial também podem ser encontrados no repositório:
Kodygo:
const String ver = "2.0m"; //PARAMETRY SPRZĘTU const int analogInPin = A0; // Entrada do Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // Napięcie PWM do Arduino [V] float maxRefInV = 1,1; // Referencia à voltagem analógica [V] float R = 470,0; // Opór rzeczywisty [Ohm]
//PARAMETRY KONFIGUROWALNE
bool ploter = fałsz; // Defina: true, caso esteja usando o Serial plotter bool putty = false; // Defina: true, caso esteja usando o PuTTT (pode ser alterado no CLI) int maxmin = 30; // Tempo (em minut) necessário para desligar [Min] float target_mA = 2.73; // Essa é a corrente que passará pelo seu cérebro!!! [mA] pływak epsilon_mA = 0,03; // Diferença máxima entre a corrente real e o target_mA (Não altere caso não saiba o que está fazendo!)
//POCZĄTEK GLOBALNE
stan 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; // Napięciem int debounced_state = 0; int długość_zerów = 0; pływak wygładzony_mA=0;
Ciąg polecenieString = ""; //dla CLI
//POMOCNICY INFORMACYJNI
float obliczyćNapięcieWyj(float V, float nowe_mA){ if(abs(nowe_mA-docelowe_mA)maxOutV){ stan = -1; // Resistência muito alta -> cérebro não encontrado? zwróć maxOutV; //zwróć maxOutV/5.0; // para segurança } stan = 0; zwróć 0,1*nowy_V+0,9*V; //zwróć nowe_V; }
int konwertujVnaWyjściowąWartość(zmiennoprzecinkowa V){
return contrain(int(V/maxOutV*255), 0, 255); }
float sensorValue2mA(int sensorValue){
czujnik pływakowyNapięcie = czujnikValue/1023,0*maxRefInV; pływak czujnik_mA = czujnikNapięcie/R*1000.0; czujnik powrotu_mA; }
int debounced_state_compute(stan int){
if(stan 5) zwraca 0; } return 1; }
długi początek bez znaku, koniec;
void process_feedback(){ int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA(sensorValue); wygładzone_mA = 0,2*nowe_mA+0,8*wygładzone_mA; pływak V = outV; outV = obliczyćNapięcieWyj(V, nowe_mA); analogWrite(analogOutPin, przekształćVnaOutputValue(outV)); debounced_state = debounced_state_compute(stan); // Exibir informações no CLI endc = (millis()-start)/1000; String tv = "[", ttm = "mA/", tsm = "V, ", ts = "mA] | Stan: ", h = " | Tempo: ", s = ":", leadM = "", leadS = "", plotT = "Cel: ", plotmA = "\tSmoothed MA: ", plotMin = "\tMin: ", tempo; unsigned long tmin = endc/60-((endc/60)%1); // Formatowanie if (endc%60<10) leadS = "0"; jeśli (tmin=0) ts = ts + "+"; // Parar Automaticamente if (tmin>maxmin) stop_device(); ciąg tekstowy; if (ploter) txt = plotT + target_mA + plotMin + „0” + plotmA + smoothed_mA; w przeciwnym razie txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (putty) Serial.print("\r\e[?25l" + txt); jeszcze Serial.println(txt);
// odczekaj 2 milisekundy przed następną pętlą
// aby konwerter analogowo-cyfrowy ustabilizował się // po ostatnim odczycie: delay(5); }
nieważne urządzenie stop_() {
stan = -10; analogWrite(analogOutPin, 0); clearAndHome(); Serial.println("Sessão tDCS interrompida"); Serial.println("----------------------------"); Wsparcie(); }
//POMOCY CLI
void clearAndHome() { Serial.write(27); Serial.print("[2J"); // skasuj numer Serial.write(27); // ESC Serial.print("[H"); // \r if (!putty) for (int i = 0; i<=30; i++) Serial.println(""); }
nieważna pomoc (){
Serial.println("tDSC arduino, ver "+ver); Serial.println("'?' - ajuda"); Serial.println("'max_time' - atualiza o tempo max (w minutach)"); Serial.println("'target_mA' - analiza celu (mA)"); Serial.println("'epsilon_mA' - analiza o epsilon_mA (mA)"); Serial.println("'R' - atualiza a Resistance do hardware (Ohm)"); Serial.println("'putty' - muda a formatação de saída pro PuTTY"); Serial.println("'stop' - para a estimulação"); Serial.println("'restart' - inicia/reinicia a estimulação & o timer"); Serial.println("'kontynuuj' - continua a estimulação"); Serial.print("\n\rEstado:\n\r * max_time: "); Serial.print(maxmin); Serial.print(" minut\n\r * target_mA: "); Serial.print(target_mA); Serial.print(" mA\n\r * epsilon_mA: "); Serial.print(epsilon_mA); Serial.print(" mA\n\r * R: "); Serial.print(R); Serial.println("Ohm"); }
bool parse_param(Ciąg &cmdString){
int spacePos = cmdString.indexOf(' '); if(spacjaPoz<=0) zwraca false; Polecenie ciągu = cmdString.substring(0, spacePos); Ciąg fval = cmdString.substring(spacePos+1); if(polecenie=="putty") if (fval=="true"){ putty = true; zwróć prawdę; }else if (fval=="false"){ putty = false; zwróć prawdę; } float val = fval.toFloat(); if(polecenie=="target_mA"){ if(val100.0){ return false; } cel_mA = wart; clearAndHome(); Wsparcie(); }else if(command=="epsilon_mA"){ if(val0.3){ return false; } epsilon_mA = wart; clearAndHome(); Wsparcie(); } w przeciwnym razie (polecenie=="R"){ R = wartość; clearAndHome(); Wsparcie(); }else if(command=="max_time"){ maxmin = val; clearAndHome(); Wsparcie(); }else{ return false; } zwróć prawdę; }
//USTAWIENIA I PĘTLA GŁÓWNA
void setup() { Serial.begin(115200); analogReference(WEWNĘTRZNY); //1.1 V Serial.print("Rozpoczęcie sesji!"); początek = mili(); } void loop(){ if(stan!=-10){ process_feedback(); } if (Serial.available() > 0){ char v = Serial.read(); if (byte(v) == 13){ // Zwrot karetki bool zaakceptowany = true; if (CiągPoleceń == "?" || Ciąg_Poleceń == "stop"){ stop_device(); }else if (commandString == "uruchom ponownie"){ clearAndHome(); stan = -1; outV = maxOutV/5,0; początek = mili(); akceptowane = fałszywe; }else if (commandString == "continue"){ clearAndHome(); stan = -1; outV = maxOutV/5,0; akceptowane = fałszywe; }else{ bool ok = parse_param(commandString); if(!ok){ clearAndHome(); Wsparcie(); akceptowane = fałszywe; Serial.println("Comando desconhecido: '" + CommandString + "'"); } } CiągPoleceń = ""; jeśli (zaakceptowane){ clearAndHome(); Wsparcie(); Serial.println("Ok!"); } }else{ CiągPoleceń+=v; if(stan==-10){ Serial.print(v); } } } }
Krok 4: Personalizacja interfejsu użytkownika Uma
Para melhor acompanhamento e segurança, użyj ferramenta PuTTY, e defina no código fonte:
kit = prawda
Recomendações de definições:
-
Okno
- 61 Colunas i 20 Linhas
- Wyświetl pasek przewijania desativado
-
Okno > Wygląd
Czcionka: konsola Lucida, 28px
Krok 5: Duvidas?
Para brir a guia de ajuda, digite:
?
wciśnięcie [ENTER]
OBS:Caso o Estado seja:
-1 -> Cérebro não identificado (corrente aberta)+0 -> Regulacja napięcia +1 -> Tudo certo, tDCS funcionando
Zalecana:
Gogle Arduino SteamPunk - Proste Zrób to sam: 9 kroków
Gogle Arduino SteamPunk - Proste DIY: W tym samouczku nauczymy się tworzyć legendarne gogle SteamPunk, które zmieniają kolory za pomocą pierścieni LED i Arduino. Obejrzyj wideo
Zrób to sam czujnik prądu dla Arduino: 6 kroków
Zrób to sam czujnik prądu dla Arduino: Witam, mam nadzieję, że dobrze sobie radzisz, a w tym samouczku pokażę ci, jak zrobiłem czujnik prądu dla Arduino, używając kilku bardzo podstawowych elementów elektronicznych i domowej bocznika. Ten bocznik może z łatwością obsługiwać duże natężenie prądu, około
Zabawne projekty z zestawem Super Start Elegoo Uno R3 - sterowanie joystickiem dla silnika prądu stałego: 4 kroki
Zabawne projekty z zestawem Super Start Elegoo Uno R3 - Sterowanie joystickiem dla silnika prądu stałego: W tej instrukcji spróbuję kontrolować kierunek i prędkość silnika prądu stałego za pomocą joysticka za pomocą Arduino, użyj komponentów z Elegoo Uno R3 Super Start Kit dostępny na Amazon.com
Przetwornica prądu BOOST 1A do 40A dla silnika prądu stałego o mocy do 1000 W: 3 stopnie
Konwerter prądu 1A do 40A do silnika prądu stałego o mocy do 1000 W: Cześć! W tym filmie dowiesz się, jak wykonać obwód wzmacniający prąd dla silników prądu stałego o wysokim natężeniu do 1000 W i 40 A z tranzystorami i transformatorem z odczepem środkowym. prąd na wyjściu jest bardzo wysoki, ale napięcie będzie r
Wykonanie magnesu generatora prądu stałego z martwego silnika miksera Zrób to sam: 3 kroki (ze zdjęciami)
Tworzenie generatora prądu stałego z magnesem z martwego silnika miksera Zrób to sam: Cześć! W tej instrukcji dowiesz się, jak przekształcić martwy silnik blendera / wiertarki (silnik uniwersalny) w bardzo potężny generator prądu stałego z magnesem trwałym. Uwaga: Ta metoda ma zastosowanie tylko wtedy, gdy cewki polowe silnika Universal ulegną spaleniu