Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

Beep Pressure

Konzept

Unser Ziel war es, eine subtilere und flexiblere Möglichkeit den Druck einer Deep Pressure-Weste zu kontrollieren, zu entwickeln. Deep Pressure-Westen werden überwiegend in der Therapie bei autistischen Kindern verwendet. Der angebrachte Druck wirkt einer Sinnesüberreizung entgegen. Die auf dem Markt erhältlichen Westen sind teilweise nicht durch das Kind regulierbar, und wenn doch, nicht ohne dass der Prozess von anderen Kindern wahrgenommen wird. Unser Ansatz ist die Auslagerung der Steuerung auf Kuscheltiere oder kleinere Objekte. Voreinstellungen können durch Therapeuten oder Eltern für die entsprechenden Bedürfnisse angepasst werden, wodurch eine zielgerichtete Therapie (Auswertung) möglich ist. In die Voreinstellungen kann auch Musik eingesetzt werden, begleitend oder alleinstehend. Dies ermöglicht dem Kind, längerfristig ohne dieses Hilfsgerät auszukommen.

Umsetzung

Der Prototyp benutzt für den Druckaufbau Elemente eines Blutdruckmessgerätes. Die verschiedenen Patterns werden durch mit RFID-Sendern bestückten Kuscheltieren abgerufen. Da es in der gegebenen Zeit nicht möglich war, eine luftdichte Weste herzustellen, besteht der Druck aufbauende Teil aus einem Brustgurt mit einer Luftblase. Die verschiedenen Modi variieren die Intensität (Dauer der Pumpe) und die Dauer (Verschlusszeit des Ablassventils) des Druckes. Die grösste Schwierigkeit war es, eine Möglichkeit zu finden in kurzer Zeit einen spürbaren Druck aufzubauen.

Wiring

Code


#include <SoftwareSerial.h>

int RFIDResetPin = 13;
int motor = 12;
int valve = 10;
int beeper = 8;
int pressure = 0;
long hugTime = 0;
long hugDuration = 0;
bool hugging = false;
bool motorOn = false;

char rfid1[14] = "35021C94FF40";
char rfid2[14] = "35021C8E1BBE";
char rfid3[14] = "35021E657935";
char rfid4[14] = "35021CAA5FDE";

SoftwareSerial mySerial(2,3);

void setup()
{
 Serial.begin(9600);
 mySerial.begin(9600);

 pinMode(RFIDResetPin, OUTPUT);
 pinMode(motor, OUTPUT);
 pinMode(valve, OUTPUT);
 pinMode(beeper, OUTPUT);
 digitalWrite(RFIDResetPin, HIGH);
 digitalWrite(valve, LOW);
 digitalWrite(motor, LOW);

beep(50, 4000);
 beep(50, 4000);
 beep(50, 4000);
 beep(50, 4000);
}

void loop()
{

char tagString[8];
 int index = 0;
 boolean reading = false;

 while(mySerial.available())
 {

 int readByte = mySerial.read(); // Nächstes Byte lesen

 if(readByte == 2) reading = true; //Indentifizierung für den Anfang des Tags
 if(readByte == 3) reading = false; //Indentifizierung für das Ende des Tags

 if(reading && readByte != 2 && readByte != 10 && readByte != 13)
 {
 tagString[index] = readByte; // Tag speichern
 index ++;
 }
 }

 if(tagString[0] != 0)
 {
 Serial.println(tagString); //RFiD Tag über Serielle Schnittstelle ausgeben

if(!hugging){
 if(strcmp(tagString, rfid1) == 0){
 makeHug(2000);
 }else if(strcmp(tagString, rfid2) == 0){
 makeHug(6000);
 }else if(strcmp(tagString, rfid3) == 0){
 playSong();
 }
 }

if(strcmp(tagString, rfid4) == 0){
 if(hugging){
 digitalWrite(valve, LOW);
 digitalWrite(motor, LOW);
 hugging = false;
 beep(300, 3500);
 beep(300, 3500);
 beep(300, 3500);
 }
 }
 }

 memset(tagString,0,strlen(tagString)); //Tag freigeben (mit NULL überschreiben)
 resetReader(); //Den RFiD Reader resetten

if(hugging){
 pressure += 2;
 if(millis() - hugTime > 20000){
 if(motorOn){
 digitalWrite(motor, LOW);
 motorOn = false;
 }
 }
 if(millis() - hugTime > (hugDuration+20000)){
 digitalWrite(valve, LOW);
 hugging = false;
 beep(500, 4000);
 beep(50, 4000);
 beep(50, 4000);
 }
 }else{
 if(pressure>0){
 pressure--;
 }
 }
 Serial.println(pressure);
}

void makeHug(long duration){
 beep(150, 3500);
 hugTime = millis();
 hugDuration = duration;
 digitalWrite(valve, HIGH);
 digitalWrite(motor, HIGH);
 motorOn = true;
 hugging = true;
}

void resetReader() // Reset Funktion
{
 digitalWrite(RFIDResetPin, LOW);
 digitalWrite(RFIDResetPin, HIGH);
 delay(150);
}

void beep(unsigned char delayms, int frequency){
 tone(beeper, frequency, delayms);
 delay(delayms*2);
}

void playSong(){
 beep(50,3000);
 beep(50,3500);
 beep(50,4000);
 beep(50,3000);
 beep(50,3500);
 beep(50,4000);
 beep(500,3000);
 delay(100);
 beep(50,4000);
 beep(50,3500);
 beep(50,3000);
 beep(50,4000);
 beep(50,3500);
 beep(50,3000);
 beep(500,4000);
 delay(100);
 beep(200,4000);
 beep(200,3800);
 beep(200,3600);
 beep(200,3400);
 beep(200,3200);
 beep(200,3000);
 beep(200,2800);
 beep(200,2600);
 delay(100);
}