Агуулгын хүснэгт:
- Алхам 1: Сайба Маис
- Алхам 2: Monte O Circuito Abaixo
- Алхам 3: O Codigo No Seu Arduino -ийг суулгаарай
- Алхам 4: Uma UI Personalizada
- Алхам 5: Дувидас уу?
Видео: Arduino TDCS Супер Энгийн. Transcranial шууд гүйдлийн өдөөгч (tDCS) DIY: 5 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:03
TDCS -ийн үндсэн үзүүлэлтүүд нь резистор, конденсатор, электрон төхөөрөмж юм.
-
Ардуино
- Pino D13 нь PWM (pode ser alterado) дээр ажилладаг.
- Pino A0 como entrada analógica (засварын талаархи санал хүсэлт).
- PND GND нь GND -ийн хувьд.
- Эсэргүүцэл (~ 470 Ω, 300-1000 Ω функц, нарийвчлалтай тохируулах, тохируулах боломжгүй)
- Конденсатор (220 μF). ХБХ -д зориулж pulilizas os pulsos үйлчилнэ.
- Eletrodos de Esponja (água salina para molhá-lo ашиглах).
Комо funciona
O Arduino тооцоолох нь хамгийн чухал зүйл юм. Target_mA цуврал CLI (Console) програмыг өөрчилж болно.
Алхам 1: Сайба Маис
TDCS анхны хувилбарыг сонгоно уу. Найдвартай шийдвэр гаргахдаа FDA цахим сүлжээний сүлжээнд хохирол учруулж болзошгүй бөгөөд энэ нь ямар ч асуудалгүй болно.
Алхам 2: Monte O Circuito Abaixo
Нэн түрүүнд хэлэхэд, энэ бол үнэхээр гайхалтай!
Алхам 3: O Codigo No Seu Arduino -ийг суулгаарай
Тохиргооны параметрүүдийг тохируулах параметрын параметрүүдийг тохируулах боломжтой болно.
Цуваа төлбөрийн хурдыг тохируулах: 115200 хураамжийн үр дүн.
Гүйцэтгэх командын үүрэг гүйцэтгэгч, Тээвэрлэлтийг буцааж өгөх шугамын төгсгөл байхгүй.
O código fonte + заавар нь ямар ч мэдээлэл агуулаагүй болно:
Кодиго:
const String ver = "2.0м"; // HARDWARE PARAMS const int analogInPin = A0; // Analoggico const int analogOutPin = 13 оруулна уу; // Saida D13 padrão float maxOutV = 5.0; // Arduino -д зориулсан ХОУХШ -ийг идэвхжүүлж болно [V] maxRefInV = 1.1; // Referencia à voltagem analógica [V] float R = 470.0; // Эсэргүүцэл даалгавар [Ohm]
// Тохируулах боломжтой парам
bool плоттер = худал; // Тодорхойлолт: үнэн, caso esteja usando o Цуваа плоттер bool putty = false; // Тодорхойлолт: үнэн, PuTTT (ямар ч CLI биш) int maxmin = 30; // Tempo (em minutos) needário para desligar [Min] float target_mA = 2.73; // Зохиогчийн эрх хуулиар хамгаалагдсан болно !!! [mA] хөвөх epsilon_mA = 0.03; // Diferença máxima entre a corente real e o target_mA (Não altere caso não saiba o que está fazendo!)
// ДЭЛХИЙН ГАЗАР
int төлөв = 1; /* -1 - Нууц тодорхойлолт 0 - Хяналтын товчлуурыг 1 -ээс илүү нарийвчлалтайгаар тодорхойлох боломжтой. Тодорхойлолт -10 - Voltagem desligada */ float outV = maxOutV; // Voltagem int debounced_state = 0; int zeros_len = 0; хөвөх smoothed_mA = 0;
String commandString = ""; // CLI -ийн хувьд
// САНАА ХЭРЭГЛЭГЧИД
float computeOutVoltage (float V, float new_mA) {if (abs (new_mA -target_mA) maxOutV) {төлөв = -1; // resistência 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); }
хөвөх мэдрэгчValue2mA (int sensorValue) {
float sensorVoltage = sensorValue/1023.0*maxRefInV; float sensor_mA = sensorVoltage/R*1000.0; буцах мэдрэгч_mA; }
int debounced_state_compute (int төлөв) {
хэрэв (муж 5) 0 буцаана; } буцах 1; }
гарын үсэг зураагүй урт эхлэл, төгсгөл;
void 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] | Estado:", h = "| Tempo:", s = ":", leadM = "", leadS = "", plotT = "Зорилтот:", plotmA = "\ tЗалруулсан MA:", plotMin = "\ tMin:", хэмнэл; тэмдэггүй урт tmin = endc/60-((endc/60)%1); // Formatação if (endc%60 <10) leadS = "0"; хэрэв (tmin = 0) ts = ts + " +"; // Хэрэв (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 + debuteded_state + h + temp; if (шаваас) Serial.print ("\ r / e [? 25l" + txt); else Serial.println (txt);
// дараагийн давталтаас өмнө 2 миллисекунд хүлээнэ үү
// аналог-тоон тоон хувиргагчийг шийдвэрлэхийн тулд // сүүлчийн уншсаны дараа: саатал (5); }
хүчингүй 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 Serial.write (27); // ESC Serial.print ("[H"); // / r if (! шаваас) for (int i = 0; i <= 30; i ++) Serial.println (""); }
хүчингүй тусламж () {
Serial.println ("tDSC arduino, ver"+ver); Serial.println ("'?' - ajuda"); Serial.println ("'max_time' - цаг хугацаа эсвэл хурдны хэмжилт (min minos)"); Serial.println ("'target_mA' - atualiza o target (mA)"); Serial.println ("'epsilon_mA' - atualiza o epsilon_mA (mA)"); Serial.println ("'R' - тоног төхөөрөмжийн эсэргүүцэл (Ом)"); Serial.println ("'шаваас" - PuTTY дэмжсэн хэлбэр); Serial.println ("'stop' - para a tahmin,"); Serial.println ("'дахин эхлүүлэх" - inicia/reinicia тооцоолол ба цаг хэмжигч "); Serial.println ("'үргэлжлүүлэх" - continua a tahmin хийх "); Serial.print ("\ n / rEstado: / n / r * max_time:"); Цуваа.хэвлэх (хамгийн их); 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 ("Ом"); }
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 (тушаал == "шаваас") if (fval == "үнэн") {шаваас = үнэн; үнэн рүү буцах; } if if (fval == "false") {шаваас = худал; үнэн рүү буцах; } float val = fval.toFloat (); if (command == "target_mA") {if (val100.0) {return false; } target_mA = val; clearAndHome (); Туслаач(); } if if (command == "epsilon_mA") {if (val0.3) {return false; } epsilon_mA = val; clearAndHome (); Туслаач(); } if if (command == "R") {R = val; clearAndHome (); Туслаач(); } if if (command == "max_time") {maxmin = val; clearAndHome (); Туслаач(); } өөр {return false; } үнэн рүү буцах; }
// Тохиргоо ба үндсэн гогцоо
void setup () {Serial.begin (115200); аналог лавлагаа (ДОТООД); //1.1 V Serial.print ("Sessão iniciada!"); эхлэх = millis (); } void loop () {if (state! =-10) {process_feedback (); } if (Serial.available ()> 0) {char v = Serial.read (); if (байт (v) == 13) {// Тээвэр буцах bool хүлээн зөвшөөрөгдсөн = үнэн; if (commandString == "?" || commandString == "stop") {stop_device (); } if if (commandString == "restart") {clearAndHome (); төлөв = -1; outV = maxOutV/5.0; эхлэх = millis (); хүлээн зөвшөөрсөн = худал; } else if (commandString == "үргэлжлүүлэх") {clearAndHome (); төлөв = -1; outV = maxOutV/5.0; хүлээн зөвшөөрсөн = худал; } өөр {bool ok = parse_param (commandString); if (! ok) {clearAndHome (); Туслаач(); хүлээн зөвшөөрсөн = худал; Serial.println ("Comando desconhecido: '" + commandString + "'"); }} commandString = ""; if (хүлээн зөвшөөрөгдсөн) {clearAndHome (); Туслаач(); Serial.println ("За!"); }} өөр {commandString+= v; if (төлөв ==-10) {Serial.print (v); }}}}
Алхам 4: Uma UI Personalizada
Тэмцээнийг хийхдээ PuTTY феррамент ашиглана уу, ямар ч бичиг баримт бичгээ ашигла:
шаваас = үнэн
Тодорхойлолтууд:
-
Цонх
- 61 Колунас ба 20 Линхас
- Гүйлгэх самбарыг харуулах
-
Цонх> Гадаад төрх
Фонт: Люсида Консол, 28 пиксел
Алхам 5: Дувидас уу?
Товчхондоо, жишээ нь:
?
дарна уу [ENTER]
OBS: Caso or Estado seja:
-1 -> Cérebro não identificado (corente aberta) +0 -> Ajustando voltagem+1 -> Тудо сертификат, tDCS функционал
Зөвлөмж болгож буй:
Энгийн цахилгаан LED шугаман гүйдлийн зохицуулагч, шинэчилсэн, тодруулсан: 3 алхам
Энгийн цахилгаан LED шугаман гүйдлийн зохицуулагч, шинэчилсэн, тодруулсан: Энэхүү зааварчилгаа нь үндсэндээ Даны шугаман гүйдлийн зохицуулагчийн хэлхээний давталт юм. Мэдээжийн хэрэг түүний хувилбар нь маш сайн боловч ойлгомжтой байдлаар ямар нэгэн зүйл дутагдаж байна. Энэ бол миний шийдвэрлэх оролдлого юм. Хэрэв та Даны хувилбарыг ойлгож, бүтээж чадвал
Альтернатив ба шууд гүйдлийн хоорондох ялгаа: 13 алхам
Альтернатив гүйдэл ба шууд гүйдлийн хоорондох ялгаа: Цахилгаан нь ихэвчлэн DC байдаг гэдгийг хүн бүр мэддэг, гэхдээ өөр төрлийн цахилгаан яах вэ? Та Ac -ийг мэдэх үү? AC гэдэг нь юу гэсэн үг вэ? Дараа нь DC ашиглах боломжтой юу? Энэхүү судалгаанд бид цахилгаан эрчим хүчний төрөл, эх үүсвэр, хэрэглээний ялгааг мэдэх болно
Хэрхэн алуурчин өдөөгч хийх вэ (Tesla ороомогтой төстэй): 4 алхам
Хэрхэн алуурчин өдөөгч хийх вэ (Тесла ороомогтой төстэй): Сайн байна уу, энд бид алуурчин өдөөгч хийх гэж байна. Энэ бол энгийн хэлхээ бөгөөд хийхэд маш хялбар юм
Хамгийн энгийн хувиргагч нь 12V -аас 220V хүртэл тогтмол гүйдлийн мотортой: 3 алхам (зурагтай)
12V -аас 220V хүртэл тогтмол гүйдлийн мотортой хамгийн энгийн хувиргагч: Сайн байна уу! Энэ зааварчилгаанд та энгийн электрон хувиргагч хийж сурах болно.Энэ инвертор нь олон электрон эд ангиудыг шаарддаггүй, харин жижиг 3V DC мотор юм. Шилжүүлэгчийг зөвхөн DC Мотор хариуцдаг
Цахилгаан LED - Тогтмол гүйдлийн хэлхээ бүхий хамгийн энгийн гэрэл: 9 алхам (зурагтай)
Цахилгаан LED - Тогтмол гүйдлийн хэлхээ бүхий хамгийн энгийн гэрэл: Энд үнэхээр энгийн бөгөөд хямд (1 доллар) LED драйверын хэлхээ байна. Энэ хэлхээ нь "тогтмол гүйдлийн эх үүсвэр" бөгөөд энэ нь таны ашиглаж буй цахилгаан хангамж, хүрээлэн буй орчны нөхцөл байдлаас үл хамааран LED гэрлийг тогтмол байлгадаг гэсэн үг юм