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);
}