Respiration – mouvement / Yuna Jeon

Yuna Jeon – Architecture d’intérieur L2

Objectif :

créer un dispositif pour visualiser la respiration qui aide à s’y concentrer

Pourquoi et Intention :

Je commence par mon expérience personnelle : lorsque je suis très stressée ou très fatiguée, je n’arrive pas très bien à me concentrer sur moi-même, et je commence à être très négative sur toutes mes pensées. Puis, l’application «respirelax» m’a beaucoup aidé à bien respirer comme il faut, et à me calmer. Elle fonctionne en visulisant la rapidité de respiration.

A partir de sa méthode, j’ai voulu créer un objet qui interagit à ma respiration et qui visualise en y répondant.

Démarches :

0. Comprendre comment Arduino peut marcher chez un objet

  1. Recherches : comment je peux réaliser
    • 1ere conception test : à partir des données (soit par le capteur acoustique soit par le capteur cardiaque), gonfler le ballon -> trop compliqué -> pas réalisable
      • capteur acoustique, capteur cardiaque
      • ballon
      • pompe
    • 2eme conception test : à partir des données du capteur conducteur, gonfler le ballon
      • capteur conducteur
      • ballon
      • pompe
    • Test : allumer la Led en Blink et en plusieurs degrès avec le capteur conducteur
      • code 1 : Blink
      • code 2 : gradation de niveau lumineux

problème : pour inspirer et aspirer l’air, il faut soit 2 pompes soit 1 pompe qui fait 2 sens -> j’abandonne l’idée d’utiliser la pompe, au lieu de celle-ci, je décide d’appliquer le step moteur

2. Conception finale

  • Toujours utiliser le capteur conducteur, et fabriquer un support qui fait bouger l’air.
    • Test code 3
      • capteur conducteur
      • stepmoteur
      • support en carton
      • schema ——————————————————>

*vous pouvez trouver les 3 codes tests en dessous du texte.

3. Démonstration – vidéo

4. Comment l’améliorer ?

  1. matériaux : couverture survie ? -> agrandir la dimension ?
  2. meilleure réalisation : pas de cable croco -> à souder ?

Les sites référencés

  • https://eteo.tistory.com/117 (en coréen)
  • Chatgpt
  • Pour l’idée de projet : lien (en anglais)
  • vidéo : gonfler le ballon
  • vidéo : Arduino breathing monitor
  • lien : outils corporels de respiration et de méditation
  • lien : product
  • lien : site qui aide à bien respirer
  • lien : projet sur la respiration chez MIT
  • lien : études sur pourquoi et comment la respiration aide à être moins négatif

Un autre moyen pour capter la respiration

  • Capteur MAX30102 – moving average
    • DC / AC (DC – respiratory, AC – pulse)

Proposition primative


Code 1

Capteur conducteur – Led Blink (13 novembre)

const int sensorPin = A0;

const int ledPin = 3;

int sensorValue = 0;

void setup() {

pinMode(ledPin, OUTPUT);

Serial.begin(9600);

}

void loop() {

sensorValue = analogRead(sensorPin);

Serial.println(sensorValue);

if (sensorValue >=120) {

digitalWrite(ledPin, HIGH);

} else {

digitalWrite(ledPin, LOW);

}

delay(10);

}


Code 2 : Capteur conducteur – led gradation

const int sensorPin = A0; // 고무줄 센서

const int ledPin = 3; // PWM 가능한 핀

int sensorValue = 0;

void setup() {

Serial.begin(9600);

pinMode(ledPin, OUTPUT);

}

void loop() {

sensorValue = analogRead(sensorPin);

Serial.println(sensorValue);

int brightness = 0;

// 1) 0~50 : LED OFF

if (sensorValue <= 50) {

brightness = 0;

}

// 2) 51~150 : LED 그라데이션 (0~255까지 매핑)

else if (sensorValue > 50 && sensorValue <= 150) {

brightness = map(sensorValue, 51, 150, 0, 255);

}

// 3) 150 이상 : LED 최대 밝기

else {

brightness = 255;

}

analogWrite(ledPin, brightness);

delay(10);

}


Code 3 : capteur conducteur – moteur

#include <Stepper.h> 

// 28BYJ-48 스텝 수 (감속비 포함 한 바퀴) 

const int stepsPerRevolution = 2048; // 핀 연결 (IN1, IN3, IN2, IN4 순서 – ULN2003 드라이버 표준) 

Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);

int currentPos = 0; 

void setup() {

Serial.begin(9600); myStepper.setSpeed(12); // 속도를 조금 낮추면 더 힘차고 안정적으로 돕니다. 

}

void loop() { 

// 1. 센서 값 읽기 

int sensorValue = analogRead(A0); 

// 2. map 함수 적용 (센서 70~330 -> 모터 0~2048 스텝) 

// 이제 70일 때 0도, 330일 때 360도 위치가 됩니다. 

int targetPos = map(sensorValue, 70, 330, 0, 2048); 

// 3. 안전 범위 제한 (70보다 작거나 330보다 클 때 대비) 

targetPos = constrain(targetPos, 0, 2048); 

// 4. 이동할 거리 계산 intstepsToMove = targetPos – currentPos; 

// 5. 노이즈 방지 및 모터 구동 if (abs(stepsToMove) > 5) { 

// 5스텝 이상 변화가 있을 때만 반응 myStepper.step(stepsToMove);

currentPos = targetPos; 

// 현재 위치 갱신 

// 시리얼 모니터로 실시간 확인 

Serial.print(« Sensor: « );

Serial.print(sensorValue);

Serial.print( » | Target Step: « );

Serial.println(targetPos); }

}


Projet Bonus !!

Workshop : Capteur Ultrason distance

Capteur VMA 306

Enceinte

Document

https://www.gotronic.fr/pj2-35191-vma306-ultrasonic-1512.pdf?srsltid=AfmBOooMmAX9RboOUMdhSvhfh_hTq6Yrxv0JckGzTINxf405xl1vyN4V

Code


#define trigPin 12

#define echoPin 13

long duration, distance;

void setup() {

Serial.begin (9600);

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

Serial.println(« == Debut du programme == »);

}

void loop() {

// Envoie de l’onde

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

// Réception de l’écho

duration = pulseIn(echoPin, HIGH);

// Calcul de la distance

distance = (duration/2) / 29.1;

if (distance >= 400 || distance <= 0){

Serial.println(« Hors plage »);

}

else {

Serial.print(« distance = « );

Serial.print(distance);

Serial.println( » cm »);

}

delay(500); // délai entre deux mesures

}


distance – led

long duration;

int distance;

const int trigPin = 10;

const int echoPin = 11;

const int ledPin = 9; // PWM 가능한 핀(3,5,6,9,10,11 중 하나)

void setup() {

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode(ledPin, OUTPUT);

Serial.begin(115200);

}

void loop() {

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = duration * 0.034 / 2;

// —- LED 밝기 계산 —-

int brightness = map(distance, 0, 200, 255, 0);

// 거리가 0cm에 가까우면 → 255(최대 밝기)

// 거리가 200cm이면 → 0(꺼짐)

// 밝기 제한 (음수 방지)

brightness = constrain(brightness, 0, 255);

analogWrite(ledPin, brightness);

Serial.print(« Distance: « );

Serial.print(distance);

Serial.print( » cm | LED Brightness: « );

Serial.println(brightness);

delay(50); // 측정 안정화

}


long duration;

int distance;

const int trigPin = 10;

const int echoPin = 11;

const int ledPin = 9; // PWM 가능한 핀

void setup() {

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode(ledPin, OUTPUT);

Serial.begin(115200);

}

void loop() {

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = duration * 0.034 / 2;

// —- LED 밝기 계산 —-

// 거리 : 0cm → 400cm

// 밝기 : 255 → 0 으로 변환 (가까울수록 밝게)

int brightness = map(distance, 0, 400, 255, 0);

// 범위 제한 (0~255)

brightness = constrain(brightness, 0, 255);

analogWrite(ledPin, brightness);

Serial.print(« Distance: « );

Serial.print(distance);

Serial.print( » cm | LED Brightness: « );

Serial.println(brightness);

delay(40); // 안정화

}