산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

실시간 코로나19 확진자 추적기 및 알림 시스템

부품 및 소모품

부품 수량
아두이노 우노 (Arduino UNO) 1
Bolt IoT Bolt WiFi 모듈 1
Adafruit RGB 백라이트 LCD - 16x2 1

프로젝트 소개

이 프로젝트는 두 가지 기능을 수행합니다:

  1. 전 세계 코로나19 총 확진자 수를 실시간으로 LCD에 표시
  2. 10분 간격으로 확진자 수가 500명 이상 증가하면 부저를 5초간 울려 경각심 고취

사람들이 경계를 늦추지 않도록 지속적으로 현황을 상기시키는 것이 목적입니다.

Bolt 모듈 설정

ESP8266은 유명한 WiFi 모듈이지만, Bolt는 ESP8266을 한층 더 단순화한 것입니다. 아두이노가 마이크로컨트롤러 다루기를 쉽게 했듯, Bolt는 IoT 연결을 쉽게 만듭니다. 고정된 언어 대신 API(Application Programming Interface)를 제공하며, 자바스크립트/HTML도 지원합니다.

먼저 boltiot.com에서 계정을 만들고 다음을 얻어야 합니다:

웹사이트에서 Device ID 확인 후 API 키 활성화 및 기록.

파이썬 프로그래밍

  1. boltiot 파이썬 라이브러리 설치
  2. Worldometers 코로나19 페이지에서 웹 스크래핑으로 총 확진자 수 추출 (urllib + BeautifulSoup 사용)
  3. Google Colab 등에서 파이썬 코드 실행, API Key와 Device ID 입력

볼트 라이브러리 주요 함수: isOnline(), serialBegin(9600), serialWrite(data), digitalWrite(pin, state) 등.

아두이노 측 처리

파이썬에서 볼트를 통해 UART(Tx/Rx)로 아두이노에 데이터 전송. 아두이노는 Serial.readString()으로 수신해 LCD에 출력. LiquidCrystal 라이브러리 사용.

10분마다 데이터 수집·비교 후 500명 이상 증가 시 볼트의 디지털 핀 0을 HIGH로 5초간 유지해 부저 울림.

코드

파이썬 코드 (Google Colab 등에서 실행)


from bs4 import BeautifulSoup as bf
import requests
import time
from boltiot import Bolt
import ssl

a = list()

# 10분마다 값 비교 알고리즘
def checking1(x, count):
    a.insert(count, x)
    if count == 1:
        print(a)
        if (a[1] - a[0] > 10):  # 임계값: 10명으로 테스트용 (실제는 500)
            a.clear()
            return 1
        else:
            a.clear()
            return 0

# 웹사이트에서 확진자 수 가져오기
def getting_value():
    y = ''
    html = requests.get("https://www.worldometers.info/coronavirus/")
    soup = bf(html.text, 'html.parser')
    tag = soup("span")
    Effected_people = tag[4].contents[0]
    for i in range(9):
        if i == 1 or i == 5: continue
        y = y + Effected_people[i]
    x = int(y)
    return x

# 메인 실행
Effected_people = getting_value()
apikey = input("Enter API Key: ")
Bolt_id = input("Enter the Bolt_ID: ")
device = Bolt(apikey, Bolt_id)

for i in range(1000):
    print(device.isOnline())
    response = device.serialBegin(9600)
    x = getting_value()
    z = checking1(x, 0)
    response2 = device.serialWrite(x)
    print(response2)
    time.sleep(100)  # 100초 대기 (테스트용, 실제로는 600초)
    
    y = getting_value()
    z = checking1(y, 1)
    response2 = device.serialWrite(y)
    if (z == 1):
        device.digitalWrite('0', 'HIGH')
        time.sleep(5)
        device.digitalWrite('0', 'LOW')

아두이노 코드


#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // LCD 핀 설정

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.home();
  Serial.setTimeout(50);
  lcd.print("Total affected :");
}

void loop() {
  String x;
  lcd.setCursor(0, 1); // 2번째 줄
  if (Serial.available() > 0) {
    x = Serial.readString();
  }
  lcd.print(x);
}

회로도

아두이노-LCD 연결, 볼트-아두이노 UART 연결 회로도 이미지 참조

제조공정

  1. 라즈베리 파이에서 GY-91 모듈로 견고한 온도 및 센서 API 구축하기
  2. Motion으로 라즈베리 파이 라이브 IP 카메라 구축하기 - 단계별 가이드
  3. Java 9 (JDK 9) – 주요 기능 및 이점
  4. Java 9 멀티해상도 이미지 API: 반응형 그래픽 단순화
  5. Java 동시성 강화: CompletableFuture API 주요 개선 사항
  6. 박스 렌치(Box Wrench) 이해: 설계, 사용법, 장점
  7. 머신 볼트(Machine Bolt) 완벽 가이드: 종류, 등급, 체결 토크, 설치 요령
  8. 래치 볼트(Latch Bolt) 완벽 해설: 문 잠금 장치의 핵심 부품, 역사, 작동 원리, 데드볼트 비교
  9. 나사와 볼트 유형 완벽 가이드: 최적 조립을 위한 선택 기준
  10. 나사 vs 볼트: 핵심 차이점, 유형, 용도 완벽 정리