Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Трекер COVID-19 в реальном времени на Arduino + Bolt IoT (WiFi) с LCD и звуковой тревогой

Компоненты и материалы

Компонент Количество
Arduino UNO 1
Bolt WiFi Module (ESP8266-based, платформа Bolt IoT) 1
LCD-дисплей 16x2 с RGB-подсветкой (Adafruit) 1
Пьезо-зуммер (бузер) — на пине D0 Bolt 1
Перемычки, макетная плата 1 набор

Архитектура системы

Проект состоит из двух частей:

  1. Python-скрипт (на ПК/облаке/Colab) — каждые 100 секунд (в коде) скрапит сайт worldometers.info, получает общее число заражённых, сравнивает с предыдущим значением. Если прирост > 10 (в коде) за интервал — отправляет команду на Bolt включить buzzer на 5 сек. Данные (число) отправляются на Bolt по UART (Serial).
  2. Arduino UNO — принимает данные по UART (пины Rx/Tx к Tx/Rx Bolt) и выводит на LCD.

Настройка Bolt IoT

  1. Зарегистрируйтесь на boltiot.com.
  2. Добавьте устройство, запишите Device ID и **API Key** (включите API в настройках).
  3. Установите Python-библиотеку: pip install boltiot (или из GitHub).

Python-код (упрощённый и исправленный)

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

# Отключение проверки SSL (если нужно)
ssl._create_default_https_context = ssl._create_unverified_context

# Буфер для сравнения
history = []

def get_covid_total():
    url = "https://www.worldometers.info/coronavirus/"
    try:
        resp = requests.get(url, timeout=10)
        soup = BeautifulSoup(resp.text, 'html.parser')
        # Главный счетчик обычно в div#maincounter-wrap > span
        counters = soup.find_all('div', class_='maincounter-number')
        if counters:
            total_str = counters[0].find('span').text.strip()
            return int(total_str.replace(',', ''))
    except Exception as e:
        print("Error scraping:", e)
    return None

def check_increase(current, history_list, threshold=500):
    """Возвращает True, если прирост > threshold за последние 2 замерa (20 мин)"""
    history_list.append(current)
    if len(history_list) > 2:
        history_list.pop(0)
    if len(history_list) == 2:
        return (history_list[1] - history_list[0]) > threshold
    return False

# Ввод ключей
API_KEY = input("Enter Bolt API Key: ")
DEVICE_ID = input("Enter Bolt Device ID: ")
bolt = Bolt(API_KEY, DEVICE_ID)

# Инициализация Serial на Bolt (9600)
print("Bolt online:", bolt.isOnline())
bolt.serialBegin(9600)

try:
    while True:
        total = get_covid_total()
        if total is not None:
            print(f"Total cases: {total}")
            # Отправка на Arduino через Bolt UART
            bolt.serialWrite(str(total))
            # Проверка роста
            if check_increase(total, history, threshold=500):
                print("ALERT: Cases increased > 500!")
                bolt.digitalWrite('0', 'HIGH')  # Buzzer ON (пин 0 Bolt)
                time.sleep(5)
                bolt.digitalWrite('0', 'LOW')   # Buzzer OFF
        time.sleep(100)  # Интервал 100 сек (в оригинале было 100, коммент сказал 10 мин)
except KeyboardInterrupt:
    print("Stopped.")

Arduino-скетч

Принимает строку по Serial (Hardware Serial, пины 0/1) и выводит на LCD.

#include 

// LCD пины: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

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

void loop() {
  lcd.setCursor(0, 1); // Вторая строка
  if (Serial.available() > 0) {
    String data = Serial.readStringUntil('\n');
    data.trim();
    if (data.length() > 0) {
      lcd.print("                "); // Очистка строки
      lcd.setCursor(0, 1);
      lcd.print(data);
    }
  }
}

Схема подключения

Важные замечания и улучшения

Файлы проекта

Производственный процесс

  1. Построение надёжного Temperature & Sensor API на Raspberry Pi с модулем GY‑91
  2. Настройка живой IP-камеры на Raspberry Pi с Motion — пошаговое руководство
  3. Java 9 (JDK 9): ключевые возможности и преимущества
  4. Java 9 Multi-Resolution Image API: адаптивная графика
  5. Java 9 CompletableFuture API: таймауты, субклассинг, фабричные методы
  6. Накидные ключи (box wrenches): конструкция, применение и преимущества
  7. Строительные болты (machine bolts): виды, марки прочности, монтаж и крутящий момент
  8. Защелкивающиеся защелки: функция, виды и преимущества для безопасности
  9. Виды винтов и болтов: полное руководство для правильного выбора
  10. Винт или болт: ключевые отличия, виды и сферы применения