제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
| ||||
|
| ||||
|
COVID-19의 도전
COVID-19는 주로 사람의 호흡기를 공격하는 SARS-CoV-2 바이러스에 의해 유발되는 질병입니다. 일부 가벼운 증상에는 발열, 통증 및 오한이 포함될 수 있지만 폐렴과 같은 더 심각한 상태로 이어질 수도 있습니다. 폐렴이 있거나 약간의 숨가쁨이 있는 사람은 특히 더 압도되기 시작하면서 언제 병원에 가야 할지 모를 수 있습니다. 이것이 바로 사람들이 필요한 도움을 받고 현재 상태에 대한 정확한 정보를 얻는 데 도움이 될 수 있는 이 오픈 소스 맥박 산소 측정기를 만든 이유입니다.
약간의 면책 조항
이 기기/프로젝트는 정확한 의료 진단 도구로 사용되어서는 안 됩니다!
전자 제품
MAX30102
128x64 픽셀 OLED
그림>아두이노 나노
단계별 장치 구축
다음은 이 프로젝트를 구축하는 방법에 대한 단계별 안내입니다.
1. 인쇄 및 부품 청소
이 프로젝트의 첨부 파일 섹션에서 각 조각을 다운로드하고 선택한 슬라이서에 로드하여 시작합니다. 나는 PLA로 약 70-80%의 인필과 중간 지지대를 사용했습니다. 인쇄가 끝나면 지지대를 제거하고 모두 잘 맞도록 약간 샌딩했습니다.
그림> 그림> 그림>
2. 전자 부품 납땜
전체 장치는 44mm x 30mm perfboard 조각에 장착된 Arduino Nano를 중심으로 설계되었습니다. 먼저 와이어를 센서의 VIN, GND, SDA 및 SCL 핀에 납땜한 다음 베드 피스 아래에서 Arduino Nano에 연결합니다.
다음으로 OLED용 커넥터를 Nano에 부착한 다음 디스플레이 자체까지 연결합니다.
그리고 마지막으로 전체 전자 부품을 하우징에 밀어 넣고 3mm 나사 몇 개를 사용하여 고정합니다.
3. 장치 조립
전자 장치를 삽입한 후 OLED 스크린을 상단 부분에 부착하고 3mm 나사 두 개를 사용하여 섀시의 나머지 부분에 고정하기만 하면 됩니다. 뚜껑을 위아래로 부드럽게 움직여 움직임을 테스트할 수 있습니다.
그림>
4. 스케치 업로드
포함된 스케치는 사용자의 현재 심박수와 산소 포화도를 표시하기 위해 몇 가지 작업을 수행합니다. 업로드하려면 필요한 라이브러리를 설치하고 도구 메뉴의 보드 목록에서 Arduino Nano를 선택한 다음 업로드를 클릭하기만 하면 됩니다.
스케치 자체는 먼저 OLED와 MAX30102를 초기화하고 발생할 수 있는 오류를 보고합니다. 그런 다음 센서를 보정하기 위해 100개의 값을 읽고 표시하기 시작합니다. 그런 다음 장치는 25개의 새 값을 읽고 이 값으로 이동 평균을 계산하는 루프에 들어갑니다. 마지막으로 값이 유효한지 확인하고 유효하면 화면에 출력합니다.
5. 사용
맥박 산소 측정기를 사용하려면 손가락 끝을 센서 위에 놓고 상단 덮개를 부드럽게 닫습니다. 그런 다음 전원을 연결하고 데이터가 표시될 때까지 기다리면 됩니다.
그림> 그림>섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">
/* 하드웨어 연결(Arduino에 대한 Breakoutboard):-5V =5V(3.3V 허용) -GND =GND -SDA =A4(또는 SDA) -SCL =A5(또는 SCL) -INT =연결되지 않음 MAX30105 브레이크아웃은 5V 또는 3.3V I2C 로직을 처리할 수 있습니다. 5V로 보드에 전원을 공급하는 것이 좋지만 3.3V에서도 실행됩니다.*/#include섹션>#include "MAX30105.h#include "spo2_algorithm.h#include "SSD1306Ascii.h#include "SSD1306AsciiWire .h"MAX30105 입자 센서;SSD1306AsciiWire oled;#define MAX_BRIGHTNESS 255#정의된 경우(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)//Arduino Uno에는 50개의 IR led 데이터 및 빨간색 led 데이터 샘플을 32비트 형식으로 저장하기에 충분한 SRAM이 없습니다.//이 문제를 해결하기 위해 샘플링된 데이터의 16비트 MSB가 잘립니다. 샘플은 16비트 data.uint16_t irBuffer[50]이 됩니다. //적외선 LED 센서 datauint16_t redBuffer[50]; //적색 LED 센서 데이터#elseuint32_t irBuffer[50]; //적외선 LED 센서 datauint32_t redBuffer[50]; //적색 LED 센서 데이터#endifint32_t spo2; //SPO2 값int8_t validSPO2; // SPO2 계산이 validint32_t heartRate인지 표시하는 표시기; //심박수 값int8_t validHeartRate; //심박수 계산이 유효한지 표시하는 표시기void setup(){ Serial.begin(115200); // 초당 115200비트로 직렬 통신 초기화:oled.begin(&Adafruit128x64, 0x3C); oled.setFont(Arial14); // 센서 초기화 if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //기본 I2C 포트 사용, 400kHz 속도 { Serial.println(F("MAX30105가 없습니다. 배선/전원을 확인하세요.")); 동안 (1); } 입자센서.설정(55, 4, 2, 200, 411, 4096); //이 설정으로 센서 구성}void loop(){ //처음 50개 샘플을 읽고 (byte i =0; i <50; i++) { while (particleSensor.available() ==false에 대한 신호 범위를 결정합니다. ) // 새로운 데이터가 있습니까? 입자센서.check(); //센서에 새로운 데이터가 있는지 확인 redBuffer[i] =particleSensor.getRed(); irBuffer[i] =입자센서.getIR(); 입자센서.nextSample(); //이 샘플은 끝났으므로 다음 샘플로 이동합니다. Serial.print(F("red=")); Serial.print(redBuffer[i], DEC); Serial.print(F(", ir=")); Serial.println(irBuffer[i], DEC); } //처음 50개 샘플(샘플의 처음 4초) 후 심박수 및 SpO2 계산 maxim_heart_rate_and_oxygen_saturation(irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate); //MAX30102에서 지속적으로 샘플을 가져옵니다. 심박수와 SpO2는 1초마다 계산되는 반면 (1) { //메모리의 처음 25개 샘플 세트를 덤프하고 (byte i =25; i <50; i++) 동안 샘플의 마지막 25개 세트를 맨 위로 이동합니다. { redBuffer[i - 25] =redBuffer[i]; irBuffer[i - 25] =irBuffer[i]; } //심박수를 계산하기 전에 25세트의 샘플을 취합니다. for (byte i =25; i <50; i++) { while (particleSensor.available() ==false) // 새로운 데이터가 있습니까? 입자센서.check(); //센서에 새로운 데이터가 있는지 확인 redBuffer[i] =particleSensor.getRed(); irBuffer[i] =입자센서.getIR(); 입자센서.nextSample(); //이 샘플은 끝났으므로 다음 샘플로 이동합니다. Serial.print(F("red=")); Serial.print(redBuffer[i], DEC); Serial.print(F(", ir=")); Serial.print(irBuffer[i], DEC); Serial.print(F(", HR=")); Serial.print(heartRate, DEC); Serial.print(F(", HRvalid=")); Serial.print(validHeartRate, DEC); Serial.print(F(", SPO2=")); Serial.print(spo2, DEC); Serial.print(F(", SPO2Valid=")); Serial.println(validSPO2, DEC); } //25개의 새로운 샘플을 수집한 후 HR 및 SP02를 다시 계산합니다. maxim_heart_rate_and_oxygen_saturation(irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate); 인쇄 화면(); }} 무효 printToScreen() { oled.clear(); oled.setCursor(0,0); if(validSPO2 &&validHeartRate) { oled.print(F("HR:")); oled.println(heartRate, DEC); oled.print(F("SPO2:")); oled.println(spo2, DEC); } else { oled.print(F("유효하지 않음")); }}
제조공정
구성품 및 소모품 Arduino Nano R3 × 1 회전 전위차계(일반) × 7 SparkFun 푸시버튼 스위치 12mm × 7 MIDI 포트 × 1 저항 221옴 × 4 LED(일반) × 2 이 프로젝트 정보 2019년 3월 11일 업데이트 안녕하세요, 저는 아르페지에이터를 위한 새 펌웨어를 만들었습니다. 소스 코드가 완전히 다시 작성되었습니다. 이제 모듈식 구조를 통해 Arduino뿐만
프로토타이핑은 설계 및 개발 프로세스의 큰 부분입니다. PCB 프로젝트에서 더 고급 단계로 이동하기 전에 필수적입니다. 따라서 디지털 전자 제품 개발자라면 Arduino 브레드보드를 사용하는 것이 좋습니다. Arduino 이전에는 초보자가 마이크로 컨트롤러를 배우는 데 어려움이 있었습니다. 그들은 사용하기 어려운 어셈블리 언어 코딩이 필요한 값비싼 키트를 사용해야 했습니다. 그러나 Arduino는 C++와 같은 고급 프로그래밍 언어로 코딩하여 저렴하고 사용하기 쉬운 플랫폼을 제공함으로써 판도를 바꿨습니다. Arduino 브