작품 제안을 한 학생이 병원에 입원했을 때 링거걸이를 사용하면서 불편했던 점을 개선하기 위해 고안한 프로젝트였다. 링거걸이도 30년 동안 변하지 않았다. 한 손으로 잡아 끌거나, 화장실갈 때, 다른 손으로 무엇인가 할 때도 불편하다. 아주 창의적인 아이디어고 개선이 이루어져야 할 의료 분야다. 환자가 링거걸이을 사용할 때 양손이 자유롭고, 사용자와 함께 이동하고, 여분의 수납함이 있는 링거걸이를 만들기 위한 작품이다. 학생들이 한 학기 작업한 결과물이 단순히 작업하고 나서 사라지는 일은 아쉬운 일이라서 아래 전체 팀 프로젝트 리스트를 소개한다. 참고하세요.
환자 치료를 돕는 AI 링거걸이
환자 치료를 돕는 AI 링거걸이 개요 환자 치료를 돕는 AI 링거걸이는 거동이 불편한 환자들을 스스로 따라다니며 남은 수액의 양을 간호사에게 전송하고, 기존의 수납공간과 같은 여러 결함을 보완한 장치입니다. 본 문서에서는 주로 장치의 구성과 각 센서 Test 방법, 동작 코드를 설명합니다. 인쇄장비 데이터 수집 전송장치의 블럭도는 아래와 같습니다.
환자의 수액의 잔량을 측정하고 간호사가 이를 수치로 쉽게 확인할 수 있도록, 압력센서와 Nextion 디스플레이를 사용합니다. 또한 거동이 불편한 환자가 링거걸이를 끌고 다니는 것이 불편하기에 pixy 캠이 환자를 추적하고 DC모터를 이용해 환자를 스스로 따라갈 수 있도록 합니다.
전체 코드
#include <Pixy2I2C.h>
Pixy2I2C pixy;
int kp = 2;
int ki= 1;
int kd = 0.4;
int IN1 = 40;
int IN2 = 38;
int IN3 = 42;
int IN4 = 44;
int ENA = 36;
int ENB = 46;
int enp_a = 24;
int enp_b = 25;
int enp_c = 26;
int enp_d = 27;
int count_a = 0;
int count_b = 0;
int v;
float vv;
float pre_err,pre_err2 = 0;
int ref, ref2;
hw_timer_t * timer = NULL;
volatile boolean t = false;
void IRAM_ATTR onTimer() {
t = true;
}
void setup() {
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(enp_a,INPUT_PULLUP);
pinMode(enp_b,INPUT_PULLUP);
pinMode(enp_c,INPUT_PULLUP);
pinMode(enp_d,INPUT_PULLUP);
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
attachInterrupt(digitalPinToInterrupt(enp_a),counting_a,CHANGE);
attachInterrupt(digitalPinToInterrupt(enp_c),counting_c,CHANGE);
timer = timerBegin(0, 80, true); //division 80=1Mhz
timerAttachInterrupt(timer, &onTimer, true);
timerAlarmWrite(timer, 10000, true);
timerAlarmEnable(timer);
Serial.begin(115200);
Serial.print("Starting...\n");
pixy.init();
}
void counting_a() {
int p_a = digitalRead(enp_a);
int p_b = digitalRead(enp_b);
if(p_a == p_b) count_a--;
if(p_a != p_b) count_a++;
}
void counting_c() {
int p_c = digitalRead(enp_c);
int p_d = digitalRead(enp_d);
if(p_c == p_d) count_b--;
if(p_c != p_d) count_b++;
}
void check_v() {
v = (int)0.395*(count-count_a);
count_a=count;
}
void check_vv() {
vv = (int)0.395*(countt-count_b);
count_b=countt;
}
int go() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
ref = 397;
}
int turn_left() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
ref = 397;
ref2 = 397;
}
int turn_right() {
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
ref = 397;
ref2 = 397;
}
int go_back() {
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
ref = 397;
ref2 = 397;
}
void loop() {
int i;
if(t)
{
float err = ref - v;
float err2 = ref2 - vv;
sum_err += err;
sum_err2 += err2;
int duty = (int)(kp*err+ki*sum_err+kd*(err-pre_err));
int duty2 = (int)(kp*err2+ki*sum_err2+kd*(err2-pre_err2));
pre_err = err;
pre_err2 = err2;
ma(duty);
mb(duty2);
t = false;
}
pixy.ccc.getBlocks();
if (pixy.ccc.numBlocks)
{
Serial.print("Detected ");
pixy.ccc.blocks[i].print();
if(pixy.ccc.blocks[i].m_x > 178) {
while(pixy.ccc.blocks[i].m_x > 168) {
pixy.ccc.getBlocks();
pixy.ccc.blocks[i].print();
turn_right();
}
}
else if(pixy.ccc.blocks[i].m_x < 138) {
while(pixy.ccc.blocks[i].m_x < 148)
{
pixy.ccc.getBlocks();
pixy.ccc.blocks[i].print();
turn_left();
}
}
else {
if(pixy.ccc.blocks[i].m_y > 104+20) {
while(pixy.ccc.blocks[i].m_y > 114) {
pixy.ccc.getBlocks();
pixy.ccc.blocks[i].print();
go();
}
}
else if(pixy.ccc.blocks[i].m_y < 104-20) {
while(pixy.ccc.blocks[i].m_y < 94) {
pixy.ccc.getBlocks();
pixy.ccc.blocks[i].print();
go_back();
}
}
}
}
else
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,HIGH);
Serial.println("Not Detected");
}
}
모바일 로봇 제작 기대 효과
이 로봇이 개발이 된다면 3교대로 항상 힘들어하는 간호사들의 숨을 돌릴 수 있을 것이다. 그로 인해 간호사들의 업무 환경이 향상 될 것이다. 또한 환자들의 편의성이 향상될 것이다. 불 필요한 움직임을 할 필요가 없기 때문에 편의성이 향상 될 것이고, 다친 부위를 사용하지 않아도 되기 때문에 치유속도 또한 향상 될 것이다.
이 로봇이 병원에서 돌아다니게 된다면 소음이 문제가 될 것이 분명하다. 이 부분은 BLDC모터를 이용하거나 모터의 속도를 조절하는 것으로 해결이 가능할 것이다. 또한 작동 불능에 대한 대처가 필요할 것이다. 배터리 방전 OR 모터 고장으로 인해 작동 불능일 경우 비상용 help 버튼이나 작동 여부를 확인하는 추가 장치를 통해 간호사에게 알리면 될 것이다. 병원엔 다들 똑같은 병원복을 입고 있기 때문에 대상을 인식하는 과정에서 문제가 생길 것이다. 이 부분은 인식하는 조건을 여러가지 사용하여 인식 대상이 놓치지 않게 보안하면 될 것이다.
'메이커 Maker' 카테고리의 다른 글
메타버스(Metaverse) 경험 기반 원격 제어 로봇 follow bot (0) | 2022.03.28 |
---|---|
전자 응용 회로를 이용한 예술 작품 (0) | 2022.03.23 |
Arduino 토양 NPK 센서를 사용하여 토양 영양소 측정 (3) | 2022.02.10 |
윈도우에서 크롬 브라우저 단축키 목록 (0) | 2022.02.02 |
AI 스마트 세탁기 제작 완료 보고서 (0) | 2022.01.20 |
마음까지 따뜻해지는 난로 暖心爐(난심로) 작품 보고서 (0) | 2022.01.19 |
흡연 감지 카메라 작품 제작 완료 보고서 (0) | 2022.01.18 |
소리로 알려주는 분실물 방지 선반 (0) | 2022.01.17 |
더욱 좋은 정보를 제공하겠습니다.~ ^^