Мазмуну:
- 1 -кадам: Сайба Маис
- 2 -кадам: Monte O Circuito Abaixo
- 3 -кадам: Орнотуу O Codigo No Seu Arduino
- 4 -кадам: Uma UI Personalizada
- 5 -кадам: Dúvidas?
Video: Arduino TDCS Super Simples. Transcranial Direct Current Stimulator (tDCS) DIY: 5 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:40
TDCS параметрлери ар кандай абалда, резистордо жана конденсаторлордо иштейт
-
Arduino
- P13 DW коммутировать PWM (pode ser alterado).
- Pino A0 como entrada analógica (кайтарым байланыш үчүн кайтарым байланыш).
- PND GND үчүн GND.
- Резистор (~ 470 Ω, 300-1000 Ω чейин иштейт)
- Конденсатор (220 μF). PWM жасоо үчүн кызмат кылыңыз.
- Eletrodos de Esponja (Use água salina para molhá-lo).
Como funciona
O Arduino калкуляторуңузду оңдоп -түзөө (эсепке алуу) үчүн сиз өзүңүздүн оюңузду оңдоп койсоңуз болот. Колдонуу_чындыгынын мааниси, ал CLI (Console) үчүн serial_mA сериясында.
1 -кадам: Сайба Маис
TDCS Primeiro программасын иштеп чыгыңыз. Жоопсуздукту коргоо боюнча FDA электрондук почта коду кандайдыр бир себептерден улам пайда болот, бул жерде эч кандай көйгөй жок болот, бул жерде алдын ала эскертүү…
2 -кадам: Monte O Circuito Abaixo
Эч кандай чектөөлөр жок!
3 -кадам: Орнотуу O Codigo No Seu Arduino
Параметрлерди конфигурациялоо параметрлери na área de Hardware PARAMS e CONFIGURABLE PARAMS.
Төмөнкү жаңылыктар Сериалдык баада: 115200 аккаунтка чейин.
Пара аткаруучу командалар, Carriage Return үчүн No Line Ending.
O código fonte + үйрөткүчтүн эч кандай репозиторийи жок:
Кодиго:
const String ver = "2.0m"; // HARDWARE PARAMS const int analogInPin = A0; // AnalOgico const int analogOutPin = 13 кирүү; // Saida D13 padrão float maxOutV = 5.0; // Arduino үчүн PWM орнотууларынын кубаттуулугу [V] maxRefInV = 1.1; // Referencia à voltagem analógica [V] float R = 470.0; // Каршылык көрсөтүүлөр [Ом]
// ТУЗУЛГОН ПАРАМДАР
бол плоттер = жалган; // Defina: true, caso esteja usando o Serial plotter bool putty = false; // Аныктоо: туура, PuTTT колдонмосу (CLI коду жок) int maxmin = 30; // Tempo (minutos) милдеттүү түрдө [Min] float target_mA = 2.73; // Эсепти оңдоп -түзөө !!! [mA] float epsilon_mA = 0.03; // Diferença máxima to add a Corente real e o target_mA (Não altere caso não saiba o que está fazendo!)
// INL GLOBALS
int state = 1; /* -1 - Туура эмес аныктоо 0 - Ачкычтуу сүйлөм боюнча маалымат жок кылуу 1 - Тудо сертификаты. Түшүндүрмө берилгенде -10 - Voltagem desligada */ float outV = maxOutV; // Voltagem int debounced_state = 0; int zeros_len = 0; float smoothed_mA = 0;
String commandString = ""; // CLI үчүн
// КАЙРА ЖАРДАМКЕРЛЕР
float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {state = -1; // resistência muito alta -> cérebro não encontrado? maxOutV кайтаруу; // maxOutV/5.0 кайтаруу; // para segurança} state = 0; 0.1*new_V+0.9*V кайтаруу; // return new_V; }
int convertVtoOutputValue (калкып V) {
кайтаруу чектөөсү (int (V/maxOutV*255), 0, 255); }
сүзүүчү сенсорValue2mA (int sensorValue) {
float sensorVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000.0; return sensor_mA; }
int debounced_state_compute (абал) {
if (5 -штат) 0 кайтаруу; } return 1; }
кол коюлбаган узак баштоо, бүтүрүү;
жараксыз process_feedback () {int sensorValue = analogRead (analogInPin); float new_mA = sensorValue2mA (sensorValue); тегизделген_мА = 0,2*жаңы_мА+0,8*тегизделген_ма; float V = outV; outV = computeOutVoltage (V, new_mA); analogWrite (analogOutPin, convertVtoOutputValue (outV)); debounced_state = debounced_state_cute (абал); // Exibir маалымат жок CLI endc = (millis ()-баштоо)/1000; String tv = "[", ttm = "mA/", tsm = "V,", ts = "mA] | Эстадо:", h = "| Темпо:", s = ":", leadM = "", leadS = "", plotT = "Максат:", plotmA = "\ tТегизделген MA:", plotMin = "\ tMin:", темп; белгисиз узун тмин = endc/60-((endc/60)%1); // Formatação if (endc%60 <10) leadS = "0"; if (tmin = 0) ts = ts + " +"; // Parar автоматтык түрдө if (tmin> maxmin) stop_device (); String txt; if (plotter) txt = plotT + target_mA + plotMin + "0" + plotmA + smoothed_mA; else txt = tv + V + tsm + smarahed_mA + ttm + target_mA + ts + мамлекетти + ч + темп; if (putty) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);
// кийинки циклге чейин 2 миллисекунд күтө туруңуз
// аналогдук-санариптик которгучтун чечилиши үчүн // акыркы окуудан кийин: кечигүү (5); }
void stop_device () {
абал = -10; analogWrite (analogOutPin, 0); clearAndHome (); Serial.println ("Sessão tDCS interrompida"); Serial.println ("------------------------"); жардам (); }
// CLI HELPERS
void clearAndHome () {Serial.write (27); Serial.print ("[2J"); // limpa a tela Serial.write (27); // ESC Serial.print ("[H"); // / r if (! putty) for (int i = 0; i <= 30; i ++) Serial.println (""); }
жараксыз жардам () {
Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println " Serial.println ("'target_mA' - максаттуу (мА)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - жабдууларга каршылык көрсөтүү (Ом)"); Serial.println ("'putty' - PuTTY форматындагы файлдарды чыгаруу)"; Serial.println ("'токтоо" - акча үчүн "); Serial.println ("'restart' - inicia/reinicia & a timulação & o timer"); Serial.println ("'улантуу' - continua a tahmin etmek"); 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:"); Serial.print (epsilon_mA); Serial.print ("mA / n / r * R:"); Serial.print (R); Serial.println ("Ом"); }
bool parse_param (String & cmdString) {
int spacePos = cmdString.indexOf (''); if (spacePos <= 0) false кайтаруу; String командасы = cmdString.substring (0, spacePos); String fval = cmdString.substring (spacePos+1); if (command == "putty") if (fval == "true") {putty = true; чындыкка кайтуу; } if 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 (command == "R") {R = val; clearAndHome (); жардам (); } else if (command == "max_time") {maxmin = val; clearAndHome (); жардам (); } else {return false; } true true; }
// ЖӨНДӨӨ ЖАНА НЕГИЗГИ ЛУП
void setup () {Serial.begin (115200); analogReference (ИЧКИ); //1.1 V Serial.print ("Sessão iniciada!"); баштоо = миллис (); } void loop () {if (state! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (byte (v) == 13) {// Carriage return bool кабыл алынган = true; if (commandString == "?" || commandString == "stop") {stop_device (); } else if (commandString == "restart") {clearAndHome (); мамлекет = -1; outV = maxOutV/5.0; баштоо = миллис (); кабыл алынган = жалган; } else if (commandString == "улантуу") {clearAndHome (); мамлекет = -1; outV = maxOutV/5.0; кабыл алынган = жалган; } else {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); жардам (); кабыл алынган = жалган; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; if (кабыл алынган) {clearAndHome (); жардам (); Serial.println ("Ok!"); }} else {commandString+= v; if (state ==-10) {Serial.print (v); }}}}
4 -кадам: Uma UI Personalizada
Эсепке алуу үчүн, PuTTY ферраментасын колдонуңуз, жана эч кандай жазуу жок:
шыбак = чындык
Recomendações de definições:
-
Терезе
- 61 Colunas e 20 Linhas
- Жылдыруу тилкесин көрсөтүү
-
Терезе> Көрүнүш
Арип: Люсида Консолу, 28 пиксел
5 -кадам: Dúvidas?
Жөнөкөй сөз менен айтканда:
?
e pressione [ENTER]
OBS: Caso o Estado seja:
-1 -> Cérebro não identificado (оңдоп -түзөө) +0 -> Аустрандо вольтегем+1 -> Tudo certo, tDCS funcionando
Сунушталууда:
Sinilink WiFi Switch INA219 Voltage/Current Sensor менен өзгөртүү: 11 кадам
Sinilink WiFi которуштуруу INA219 чыңалуу/ток сенсору менен өзгөртүү: Sinilink XY-WFUSB WIFI USB которгучу-тиркелген USB түзмөгүн алыстан күйгүзүү/өчүрүү үчүн жакшы кичинекей түзмөк. Тилекке каршы, тиркелген түзмөктүн жеткирүү чыңалуусун же колдонулган агымын өлчөө мүмкүнчүлүгү жок
AC жана DC жүктөөлөрү үчүн Soft Starter (Inrush Current Limiter): 10 кадам
AC жана DC жүктөөлөрү үчүн Soft Starter (Inrush Current Limiter): Inrush current/Switch-ON толкуну-бул биринчи жолу күйгүзүлгөндө электр түзмөгү тарткан максималдуу заматта кирүүчү агым. Кирүүчү ток жүктүн туруктуу абалынан алда канча жогору жана бул көптөгөн көйгөйлөрдүн булагы, мисалы, сактандыруучу бл
Geeetech Board Raspberry Pi аркылуу Custom USB Cable Direct Wired аркылуу: 4 кадам
Geeetech Board Raspberry Pi аркылуу Custom USB Cable Direct Wired аркылуу: Саламатсызбы! Бул колдонмодо JST XH 4-пин кабелине кандайча USB жасоо керектиги көрсөтүлөт, андыктан сиз Raspberry Pi же башка USB түзмөгүңүздү Geeetech 2560 rev 3 тактасына A10 сыяктуу Geeetech принтерине түз өткөрө аласыз. Бул кабель ыңгайлуу параллелге кошулат
AC Current Monitoring Data Logger: 9 Кадам (Сүрөттөр менен)
AC Current Monitoring Data Logger: Саламатсыздарбы, менин биринчи үйрөткүчүмө кош келиңиз! Күндүз мен өнөр жай жылытуучу жабдуулар менен камсыз кылган компаниянын сыноо инженери болом, түнкүсүн мен технологияга кызыккан хоббист жана DIY'erмин. Менин жумушумдун бир бөлүгү жылыткычтардын ишин текшерүүнү камтыйт, о
DIY High Current Motor Driver (h-bridge): 5 кадам
DIY High Current Motor Driver (h-bridge): Долбоор бул Power Wheels балдарынын төрт велосипединдеги моторлорду жана электрониканы жаңыртуу болуп саналат. Биз коммерциялык изилдөөлөрдөн кийин 2 жаңы traxxis 775 щеткалуу мотору бар 24v системасына жаңыртууну пландаштырдык