İçindekiler:
- Adım 1: Saiba Mais
- Adım 2: Monte O Circuito Abaixo
- Adım 3: O Código No Seu Arduino'yu Kurun
- 4. Adım: Uma Kullanıcı Arayüzü Kişiselleştirme
- Adım 5: Dúvidas?
Video: Arduino TDCS Süper Basitleri. Transkraniyal Doğru Akım Stimülatörü (tDCS) Kendin Yap: 5 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Para fazer este tDCS você precisará apenas de um arduino, direnç, kapasitör e alguns cabosBileşenler
-
Arduino
- Pino D13 como saída PWM (pode ser alterado).
- Pino A0 como entrada analógica (para geri bildirimi de corrente).
- Pino GND apenas para GND.
- Direnç (~470 Ω, mas provavelmente entre 300-1000 Ω funciona, você precisará alterar no código fonte)
- Kondansatör (220 μF). Para estabilizar os pulsos PWM yapın.
- Eletrodos de Esponja (água salina para molhá-lo kullanın).
Como işlevi
O Arduino hesapları bir doğrultu (pode ser alterado) que passará pelo seu cérebro apenas por mudar a voltajm de saída. Você também pode alterar veya valor do target_mA pelo seri CLI (Konsol).
Adım 1: Saiba Mais
En iyi ve en ciddi tDCS primeiro. Önemsiz FDA e pode ser önyargılı bir sua saúde, esasa se você não sabe nada sobre os efeitos colaterais, precauções ve dentre outros…
Adım 2: Monte O Circuito Abaixo
Daha fazla bilgi edinin!
Adım 3: O Código No Seu Arduino'yu Kurun
DONANIM PARAMLARI ve YAPILANDIRILABİLİR PARAMS'ların yapılandırılması ve parametrelerinin değiştirilmesi.
Você também deve alterar o boud rate do Seri para: 115200 para poder ver o resultado.
Yürütücü komandolar, troque o Satırsız Bitiş, Satır Başı.
O código fonte + öğretici também podem ser encontrados depo yok:
Codigo:
const String ver = "2.0m"; //DONANIM PARAMS const int analogInPin = A0; // Entrada yapmak Analógico const int analogOutPin = 13; // Saida D13 padrão float maxOutV = 5.0; // Arduino için bir voltaj PWM padrão [V] float maxRefInV = 1.1; // Gerilim ve analógica referansları [V] kayan nokta R = 470.0; // Resistencia da corrente [Ohm]
// YAPILANDIRILABİLİR PARAMLAR
bool çizici = yanlış; // Tanım: true, caso esteja usando o Seri çizici bool macun = yanlış; // Tanımlama: doğru, PuTTT'yi (pode ser alterado no CLI) doğru, caso esteja usando int maxmin = 30; // Tempo (em minutos) necessário para desligar [Min] kayan noktalı hedef_mA = 2,73; // Doğru ve doğru bir geçiştir, pelo seu cérebro!!! [mA] yüzer epsilon_mA = 0.03; // Doğru bir gerçek e o hedef_mA girişinin farklı olması (Yanlış bir yerde değil!)
// GLOBALLERİ BAŞLAT
int durum = 1; /* -1 - Tanımlama bilgisi 0 - Gerilim değişikliği, doğru bir şekilde değiştirilmiştir. 1 - Sertifika sertifikası. Tanımlama bilgileri -10 - Gerilim desligada */ float outV = maxOutV; // Voltagem int debounced_state = 0; int sıfırlar_len = 0; float smoothed_mA=0;
String komutuString = ""; //CLI için
//GERİ BİLDİRİM YARDIMCILARI
float hesaplamaOutVoltage(float V, float yeni_mA){ if(abs(new_mA-target_mA)maxOutV){ durum = -1; // direnencia muito alta -> cérebro não encontrado? maxOutV döndür; // maxOutV/5.0 döndür; // para segurança } durum = 0; 0,1*yeni_V+0,9*V döndür; //yeni_V döndür; }
int convertVtoOutputValue(float V){
dönüş kısıtlaması(int(V/maxOutV*255), 0, 255); }
kayan sensörDeğeri2mA(int sensörDeğeri){
float sensörVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000.0; sensör_mA dönüş; }
int debounced_state_compute(int durum){
if(durum 5) 0 döndürür; } dönüş 1; }
imzasız uzun başlangıç, bitişc;
void process_feedback(){ int sensorValue = analogRead(analogInPin); float new_mA = sensorValue2mA(sensorValue); düzleştirilmiş_mA = 0,2*yeni_mA+0,8*düzleştirilmiş_mA; kayan nokta V = çıkışV; outV = hesaplamaOutVoltage(V, yeni_mA); analogWrite(analogOutPin, convertVtoOutputValue(outV)); debounced_state = debounced_state_compute(durum); // Exibir bilgileri yok CLI endc = (millis()-start)/1000; String tv = "[", ttm = "mA/", tsm = "V, ", ts = "mA] | Estado: ", h = " | Tempo: ", s = ":", leadM = "", leadS = "", plotT = "Hedef: ", plotmA = "\tDüzeltilmiş MA: ", plotMin = "\tMin: ", tempo; unsigned long tmin = endc/60-((endc/60)%1); // Formatação if (endc%60<10) leadS = "0"; if (tmin=0) ts = ts + "+"; // Parar otomatikamente if (tmin>maxmin) stop_device(); dize txt'si; if (çizici) txt = plotT + hedef_mA + plotMin + "0" + plotmA + düzleştirilmiş_mA; else txt = tv + V + tsm + smoothed_mA + ttm + target_mA + ts + debounced_state + h + tempo; if (macun) Serial.print("\r\e[?25l" + txt); başka Serial.println(txt);
// sonraki döngüden önce 2 milisaniye bekleyin
// analogdan dijitale dönüştürücünün son okumadan sonra oturması için //: delay(5); }
void stop_device(){
durum = -10; analogWrite(analogOutPin, 0); clearAndHome(); Serial.println("Sessão tDCS interrompida"); Serial.println("------------------------"); Yardım(); }
//CLI YARDIMCILARI
void clearAndHome() { Serial.write(27); Seri.print("[2J"); // limpa a tela Serial.write(27); // ESC Seri.print("[H"); // \r if (!putty) for (int i = 0; i<=30; i++) Serial.println(""); }
geçersiz yardım(){
Serial.println("tDSC arduino, sürüm "+ver); Serial.println("'?' - ajuda"); Serial.println("'max_time ' - tempo maksimo atualiza (en minutos)"); Serial.println("'target_mA' - hedefin gerçeklenmesi (mA)"); Serial.println("'epsilon_mA ' - atualiza veya epsilon_mA (mA)"); Serial.println("'R' - bir direnç donanımına atualiza (Ohm)"); Serial.println("'macun' - PuTTY için bir formata dönüştürülebilir"); Serial.println("'dur' - para bir tahmin"); Serial.println("'yeniden başlat' - inicia/reinicia bir tahmin ve o zamanlayıcı"); Serial.println("'devam' - bir tahminin devamı"); Serial.print("\n\rEstado:\n\r * max_time: "); Seri.baskı(maksmin); Serial.print(" minutos\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: "); Seri.print(R); Serial.println(" Ohm"); }
bool parse_param(Dize &cmdString){
int spacePos = cmdString.indexOf(' '); if(spacePos<=0) false döndürür; Dize komutu = cmdString.substring(0, spacePos); String fval = cmdString.substring(spacePos+1); if(command=="putty") if (fval=="true"){ macun = true; true döndür; }else if (fval=="yanlış"){ macun = yanlış; true döndür; } float val = fval.toFloat(); if(command=="target_mA"){ if(val100.0){ false döndür; } target_mA = değer; clearAndHome(); Yardım(); }else if(command=="epsilon_mA"){ if(val0.3){ false döndür; } epsilon_mA = değer; clearAndHome(); Yardım(); }else if(command=="R"){ R = val; clearAndHome(); Yardım(); }else if(command=="max_time"){ maxmin = val; clearAndHome(); Yardım(); }else{ false döndür; } true döndür; }
//KURULUM VE ANA DÖNGÜ
geçersiz kurulum() { Serial.begin(115200); analogReferans(DAHİLİ); //1.1 V Serial.print("Sessão iniciada!"); başlangıç = millis(); } void loop(){ if(durum!=-10){ process_feedback(); } if (Serial.available() > 0){ char v = Seri.read(); if (byte(v) == 13){ // Satır başı bool kabul edildi = true; if (commandString == "?" || commandString == "stop"){ stop_device(); }else if (commandString == "restart"){ clearAndHome(); durum = -1; outV = maxOutV/5.0; başlangıç = millis(); kabul edildi = yanlış; }else if (commandString == "devam"){ clearAndHome(); durum = -1; outV = maxOutV/5.0; kabul edildi = yanlış; }else{ bool tamam = parse_param(commandString); if(!ok){ clearAndHome(); Yardım(); kabul edildi = yanlış; Serial.println("Desconhecido: '" + komutDizesi + "'"); } } commandString = ""; if (kabul edildi){ clearAndHome(); Yardım(); Serial.println("Tamam!"); } }else{ commandString+=v; if(durum==-10){ Serial.print(v); } } } }
4. Adım: Uma Kullanıcı Arayüzü Kişiselleştirme
Para melhor acompanhamento e segurança, bir ferramenta PuTTY, e defina no código fonte kullanın:
macun = doğru
Tanımlama önerileri:
-
pencere
- 61 Sütunlar ve 20 Linhas
- Kaydırma çubuğunu göster
-
Pencere > Görünüm
Yazı Tipi: Lucida Konsolu, 28 piksel
Adım 5: Dúvidas?
Para abrir a guia de ajuda, digite:
?
e basın [ENTER]
OBS: Caso veya Estado sejası:
-1 -> Cérebro não identificado (korrente aberta)+0 -> Ajustando voltajım+1 -> Tudo certo, tDCS funcionando
Önerilen:
(Alternatif Akım ve Doğru Akım) Arasındaki Fark: 13 Adım
(Alternatif Akım ve Doğru Akım) Arasındaki Fark: Herkes elektriğin çoğunlukla DC olduğunu bilir, peki ya başka bir elektrik türü? Ac'ı tanıyor musun? AC'nin açılımı nedir? DC'den sonra kullanılabilir mi? Bu çalışmada elektrik türleri, kaynaklar, uygulamalar arasındaki farkı bileceğiz
Kendin Yap Giyilebilir TDCS Cihazı: 4 Adım
Kendin Yap Giyilebilir TDCS Cihazı: TDCS (Transkraniyal Doğru Akım Stimülasyonu)Bu Eğitilebilir Kitapta şunları yapacağım: 1. Basit bir TDCS cihazının oluşturulmasında size yol gösterin.3. Devrelerin arkasındaki teoriyi düzenler.2. Biraz araştırma yapın ve böyle bir cihazın neden yapmaya değer olduğunu açıklayın
Kendin Yap - Süper Ucuz ve Süper Soğuk Ark Reaktörü: 8 Adım (Resimlerle)
Kendin Yap - Süper Ucuz ve Süper Soğuk Ark Reaktörü: Bu talimatta size evde nasıl son derece ucuz ark reaktörü yapabileceğinizi göstereceğim. Haydi başlayalım. Toplam proje bana 1 dolardan daha ucuza mal oldu ve sadece LED'leri ve her birini satın almam gerekti. LED bana 2,5 INR'ye mal oldu ve 25 kullandım, bu nedenle toplam maliyet 1'den az
WiFi Uyarıları ile Mini Kendin Yap Hidroponik Sistemler ve Kendin Yap Hidroponik Bitki Bahçesi İnşa Et: 18 Adım
WiFi Uyarıları ile bir Mini Kendin Yap Hidroponik Sistemler ve Kendin Yap Hidroponik Bitki Bahçesi İnşa Et: Bu derste size bir #Kendin Yap #hidroponik sistemini nasıl kuracağınızı göstereceğiz. Bu DIY hidroponik sistem, 2 dakika açık ve 4 dakika kapalı olan özel bir hidroponik sulama döngüsünde sulayacaktır. Ayrıca rezervuar su seviyesini de izleyecektir. Bu sistem
LED ile Süper Parlak Flaş Işığı Nasıl Yapılır - Kendin Yap: Süper Parlak Işık: 11 Adım
LED ile Süper Parlak Flaş Işığı Nasıl Yapılır - Kendin Yap: Süper Parlak Işık: Videoyu Başta İzleyin