아두이노 WebAnalogGauge 예제 고급 게이지 인터페이스 튜토리얼

개요

WebAnalogGauge 예제는 모든 웹 브라우저에서 접근 가능한 전문적인 원형 게이지 인터페이스를 생성합니다. 본 예제는 아두이노 Uno R4 WiFi 및 DIYables STEM V4 IoT 교육 플랫폼용으로 설계된 향상된 센서 모니터링 기능, 내장 아날로그 입력 기능 및 측정 교육 모듈과의 원활한 통합을 제공합니다. 센서 값, 전압 수준, 압력 읽기 또는 시각적 피드백이 필요한 모든 아날로그 측정에 이상적입니다.

아두이노 webanaloggauge 예제 - 전문 게이지 디스플레이 튜토리얼

주요 기능

  • 전문적인 원형 게이지: 웹 인터페이스를 통한 대화형 게이지 표시
  • 구성 가능한 범위: 단위가 포함된 최소값 및 최대값 구성
  • 실시간 업데이트: 부드러운 바늘 애니메이션으로 센서 값을 실시간 표시
  • 색상 코드화된 구역: 시각적 상태 표시(녹색, 노란색, 빨간색 구역)
  • 정밀도 제어: 표시 값의 소수점 이하 자릿수 설정 가능
  • WebSocket 통신: 페이지 새로고침 없이 즉시 업데이트
  • 모바일 반응형: 데스크탑, 태블릿, 모바일 기기에서 완벽하게 작동
  • 자동 구성: 생성자에서 한 번 범위를 설정하면 수동 구성 필요 없음
  • 플랫폼 확장성: 현재 Arduino Uno R4 WiFi용으로 구현되어 있지만 다른 하드웨어 플랫폼에도 확장 가능합니다. 자세한 내용은 DIYables_WebApps_ESP32 참조

준비물

1×아두이노 우노 R4 와이파이 쿠팡 | 아마존
1×(또는) DIYables STEM V4 IoT 쿠팡 | 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×Potentiometer (optional for testing) 쿠팡 | 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노 R4용 전원 분배기 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

설정 지침

빠른 단계

다음 지시를 차근차근 따라가세요:

  • 이 Arduino Uno R4 WiFi/DIYables STEM V4 IoT를 처음 사용하는 경우, Arduino IDE에서 Arduino Uno R4 WiFi/DIYables STEM V4 IoT의 환경 설정에 대한 튜토리얼을 참조하십시오 아두이노 우노 R4 - 소프트웨어 설치.
  • Arduino Uno R4/DIYables STEM V4 IoT 보드를 USB 케블로 컴퓨터에 연결합니다.
  • 컴퓨터에서 Arduino IDE를 실행합니다.
  • 적절한 Arduino Uno R4 보드(예: Arduino Uno R4 WiFi)와 COM 포트를 선택합니다.
  • Arduino IDE의 왼쪽 바에서 Libraries 아이콘으로 이동합니다.
  • "DIYables WebApps"를 검색한 다음 DIYables에서 제공하는 DIYables WebApps 라이브러리를 찾습니다.
  • 라이브러리를 설치하려면 Install 버튼을 클릭합니다.
아두이노 우노 R4 diyables 웹앱 라이브러리
  • 다른 라이브러리 의존성 설치를 요청받게 됩니다
  • Install All 버튼을 클릭하여 모든 라이브러리 의존성을 설치합니다.
아두이노 우노 R4 diyables webapps 의존성
  • 아두이노 IDE에서, File 예제 DIYables WebApps WebAnalogGauge 예제, 또는 위의 코드를 복사하여 아두이노 IDE의 에디터에 붙여넣으십시오
/* * DIYables WebApp Library - Web Analog Gauge Example * * This Serial.println("\nWebAnalogGauge is ready!"); Serial.print("IP Address: "); Serial.println(webAppsServer.getLocalIP()); Serial.println("Open your web browser and navigate to:"); Serial.print("1. http://"); Serial.print(webAppsServer.getLocalIP()); Serial.println("/ (Home page)"); Serial.print("2. http://"); Serial.print(webAppsServer.getLocalIP()); Serial.println("/webanalogGauge (Analog Gauge)"); Serial.println("\nSimulating sensor data...");monstrates the Web Analog Gauge application: * - Real-time analog gauge visualization * - Simulated sensor data with smooth animation * - WebSocket communication for live updates * - Beautiful analog gauge with tick marks and smooth pointer movement * * Features: * - Automatic gauge value simulation * - Smooth animation between values * - Range: 0° to 280° (customizable) * - Real-time WebSocket updates * - Professional analog gauge appearance * * Hardware: Arduino Uno R4 WiFi or DIYables STEM V4 IoT * * Setup: * 1. Update WiFi credentials below * 2. Upload the sketch to your Arduino * 3. Open Serial Monitor to see the IP address * 4. Navigate to http://[arduino-ip]/web-gauge in your web browser */ #include <DIYablesWebApps.h> // WiFi credentials - UPDATE THESE WITH YOUR NETWORK const char WIFI_SSID[] = "YOUR_WIFI_SSID"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // Create WebApp server and page instances UnoR4ServerFactory serverFactory; DIYablesWebAppServer webAppsServer(serverFactory, 80, 81); DIYablesHomePage homePage; // Gauge configuration constants const float GAUGE_MIN_VALUE = 0.0; const float GAUGE_MAX_VALUE = 100.0; const String GAUGE_UNIT = "%"; DIYablesWebAnalogGaugePage webAnalogGaugePage(GAUGE_MIN_VALUE, GAUGE_MAX_VALUE, GAUGE_UNIT); // Range: 0-100% // Other examples: // DIYablesWebAnalogGaugePage webAnalogGaugePage(-50.0, 150.0, "°C"); // Temperature: -50°C to 150°C // DIYablesWebAnalogGaugePage webAnalogGaugePage(0.0, 1023.0, ""); // Analog sensor: 0-1023 (no unit) // DIYablesWebAnalogGaugePage webAnalogGaugePage(0.0, 5.0, "V"); // Voltage: 0-5V // Simulation variables unsigned long lastUpdateTime = 0; const unsigned long UPDATE_INTERVAL = 500; // Update every 500ms (0.5 second) const float STEP_SIZE = 1.0; // Step size for simulation float currentGaugeValue = GAUGE_MIN_VALUE; // Start at minimum value float step = STEP_SIZE; // Positive step means increasing, negative means decreasing void setup() { Serial.begin(9600); delay(1000); Serial.println("DIYables WebApp - Web Analog Gauge Example"); // Add web applications to the server webAppsServer.addApp(&homePage); webAppsServer.addApp(&webAnalogGaugePage); // Optional: Add 404 page for better user experience webAppsServer.setNotFoundPage(DIYablesNotFoundPage()); // Start the WebApp server if (!webAppsServer.begin(WIFI_SSID, WIFI_PASSWORD)) { while (1) { Serial.println("Failed to start WebApp server!"); delay(1000); } } setupCallbacks(); } void setupCallbacks() { // Handle gauge value requests (when web page loads/reconnects) webAnalogGaugePage.onGaugeValueRequest([]() { webAnalogGaugePage.sendToWebAnalogGauge(currentGaugeValue); Serial.println("Web client requested gauge value - Sent: " + String(currentGaugeValue, 1) + GAUGE_UNIT); }); } void loop() { // Handle WebApp server communications webAppsServer.loop(); // Update gauge with simulated sensor data if (millis() - lastUpdateTime >= UPDATE_INTERVAL) { lastUpdateTime = millis(); Serial.println("Updating gauge value..."); // Debug message // Simple linear simulation: step changes direction at boundaries currentGaugeValue += step; // Change direction when reaching boundaries if (currentGaugeValue >= GAUGE_MAX_VALUE || currentGaugeValue <= GAUGE_MIN_VALUE) { step *= -1; // Reverse direction } // Ensure value stays within bounds (safety check) if (currentGaugeValue < GAUGE_MIN_VALUE) currentGaugeValue = GAUGE_MIN_VALUE; if (currentGaugeValue > GAUGE_MAX_VALUE) currentGaugeValue = GAUGE_MAX_VALUE; // Send the new value to all connected web clients webAnalogGaugePage.sendToWebAnalogGauge(currentGaugeValue); // Print to serial for debugging Serial.println("Gauge: " + String(currentGaugeValue, 1) + GAUGE_UNIT + " (" + (step > 0 ? "↑" : "↓") + ")"); } delay(10); }
  • 다음 줄들을 업데이트하여 코드에서 WiFi 자격 증명을 구성합니다:
const char WIFI_SSID[] = "YOUR_WIFI_NETWORK"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
  • 아두이노 IDE에서 Upload 버튼을 클릭하여 아두이노 UNO R4/DIYables STEM V4 IoT에 코드를 업로드합니다.
  • 시리얼 모니터를 엽니다.
  • 시리얼 모니터에서 결과를 확인합니다. 아래와 같습니다.
COM6
Send
DIYables WebApp - Web Analog Gauge Example INFO: Added app / INFO: Added app /web-gauge DIYables WebApp Library Platform: Arduino Uno R4 WiFi Network connected! IP address: 192.168.0.2 HTTP server started on port 80 Configuring WebSocket server callbacks... WebSocket server started on port 81 WebSocket URL: ws://192.168.0.2:81 WebSocket server started on port 81 ========================================== DIYables WebApp Ready! ========================================== 📱 Web Interface: http://192.168.0.2 🔗 WebSocket: ws://192.168.0.2:81 📋 Available Applications: 🏠 Home Page: http://192.168.0.2/ ⏲️ Web Analog Gauge: http://192.168.0.2/web-gauge ==========================================
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • PC 또는 휴대폰에서 웹 브라우저를 엽니다.
  • 시리얼 모니터에 표시된 IP 주소를 웹 브라우저에 입력합니다.
  • 예: http://192.168.1.100
  • 아래 이미지와 같은 홈 페이지가 표시됩니다:
아두이노 우노 R4 diyables 웹앱 홈 페이지와 웹 아날로그 게이지 앱
  • Web Analog Gauge 링크를 클릭하면 아래와 같이 Web Analog Gauge 앱의 UI가 표시됩니다:
아두이노 우노 R4 diyables 웹앱 웹 아날로그 게이지 앱
  • 또한 IP 주소 뒤에 /web-analog-gauge를 붙여 페이지에 직접 접속할 수도 있습니다. 예시: http://192.168.1.100/web-analog-gauge
  • 실시간 센서 값을 표시하는 전문적인 원형 게이지 디스플레이가 나타납니다.

웹 인터페이스 기능

아날로그 게이지 디스플레이

  • 원형 게이지: 매끄러운 바늘 애니메이션이 적용된 고급 게이지
  • 값 범위: 구성된 최솟값과 최댓값을 표시
  • 현재 측정값: 단위가 포함된 실시간 값 표시
  • 색 구역: 값 범위를 기반으로 한 시각적 상태 표시
  • 정밀도: 정확한 판독을 위한 구성 가능한 소수점 자릿수

실시간 업데이트

  • 실시간 데이터: 값이 WebSocket 연결을 통해 자동으로 업데이트됩니다.
  • 매끄러운 애니메이션: 게이지의 바늘이 값들 사이를 매끄럽게 움직입니다.
  • 상태 피드백: 연결 상태 표시기
  • 모바일 최적화: 모든 기기에서 터치 친화적인 인터페이스

코드 구성

게이지 설정

// Configure gauge range and units DIYablesWebAnalogGaugePage gaugePage(0.0, 100.0, "V"); // 0-100 Volts // Set up value request callback gaugePage.onGaugeValueRequest(onGaugeValueRequested);

값 전송

void onGaugeValueRequested() { // Read sensor value (example with potentiometer) int sensorValue = analogRead(A0); float voltage = (sensorValue / 1023.0) * 5.0; // Send to gauge gaugePage.sendGaugeValue(voltage); }

맞춤 설정 옵션

범위 설정

  • 최소값: 가장 낮은 예상 판독값을 설정
  • 최대값: 가장 높은 예상 판독값을 설정
  • 단위: 표시 단위 문자열 (V, A, °C, PSI 등)
  • 정밀도: 표시의 소수점 자릿수 제어

센서 통합

  • 아날로그 센서: 전압, 전류, 압력, 빛 센서
  • 디지털 센서: I2C/SPI를 통한 온도, 습도, 가스 센서
  • 계산된 값: 여러 센서로부터 얻은 파생 측정값
  • 보정된 판독값: 정확성을 위한 보정 계수 적용

일반 사용 사례

교육 프로젝트

  • 전압 모니터링: 배터리 전압, 전원 공급 측정값
  • 환경 감지: 온도, 습도, 조도
  • 물리 실험: 힘, 압력, 가속도 측정
  • 전자공학 학습: 회로 분석, 부품 테스트

실용적 응용

  • 홈 자동화: 시스템 모니터링, 환경 제어
  • 로봇 공학: 센서 피드백, 시스템 진단
  • 사물인터넷 프로젝트: 원격 모니터링, 데이터 시각화
  • 산업: 품질 관리, 공정 모니터링

문제 해결

게이지가 업데이트되지 않음

  • Wi-Fi 연결 및 웹소켓 상태 확인
  • 콜백 함수가 올바르게 설정되었는지 확인
  • 게이지 값이 구성된 범위 내에 있는지 확인
  • 연결 메시지를 시리얼 모니터에서 확인

잘못된 값들

  • 센서 배선 및 연결 확인
  • 아날로그 기준 전압 설정 확인
  • 필요한 경우 센서 측정값 보정
  • 콜백 함수에서 올바른 스케일링 보장

연결 문제

  • 브라우저에서 IP 주소를 확인하세요
  • 방화벽 설정을 확인하세요
  • 2.4GHz WiFi 네트워크를 사용하세요(5GHz는 지원되지 않습니다)
  • 브라우저 페이지를 새로고침해 보세요

고급 기능

다중 게이지

다양한 센서를 위해 여러 개의 게이지 인스턴스를 만들 수 있습니다:

DIYablesWebAnalogGaugePage voltageGauge(0.0, 5.0, "V"); DIYablesWebAnalogGaugePage currentGauge(0.0, 2.0, "A"); DIYablesWebAnalogGaugePage tempGauge(-40.0, 85.0, "°C"); server.addApp(&voltageGauge); server.addApp(&currentGauge); server.addApp(&tempGauge);

데이터 로깅

역사 데이터를 시각화하기 위해 Web Plotter와 함께 사용:

// Send same value to both gauge and plotter gaugePage.sendGaugeValue(voltage); plotterPage.sendData("Voltage", voltage);

교육의 통합

STEM 학습 목표

  • 데이터 시각화: 아날로그-디지털 변환 이해
  • 센서 물리학: 측정 원리 배우기
  • 웹 기술: 실시간 통신 개념
  • 프로그래밍: 콜백 함수, 데이터 처리

교실 활동

  • 센서 비교: 다양한 센서 유형과 범위를 비교합니다.
  • 보정 연습: 측정의 정확도와 정밀도를 학습합니다.
  • 시스템 통합: 여러 센서와 디스플레이를 결합합니다.
  • 문제 해결: 센서 및 디스플레이 문제를 해결합니다.

이 예제는 아날로그 센서 모니터링 및 시각화를 위한 포괄적인 기초를 제공하며, 교육적 및 실용적 용도에 모두 적합합니다.