아두이노 WebRotator 예제 대화형 회전 제어 튜토리얼

개요

WebRotator 예제는 모든 웹 브라우저에서 접근 가능한 대화형 회전 가능한 디스크 제어 인터페이스를 제공합니다. Arduino Uno R4 WiFi 및 DIYables STEM V4 IoT 교육 플랫폼을 위해 설계되었으며, 향상된 모터 제어 기능, 내장 서보/스텝퍼 제어 기능, 로봇 공학 교육 모듈과의 원활한 통합을 제공합니다. 서보 모터, 스텝퍼 모터, 로봇 팔, 안테나 또는 정밀한 회전 제어가 필요한 모든 시스템의 제어에 이상적입니다.

아두이노 webrotator 예제 - 인터랙티브 회전 제어 튜토리얼

주요 기능

  • 인터랙티브 회전 원판: 터치와 마우스로 제어되는 원판 인터페이스
  • 이중 작동 모드: 연속(0-360°) 및 제한된 각도 범위
  • 실시간 각도 피드백: 정밀한 각도 표시 및 제어
  • 시각적 위치 표시기: 그라데이션 디자인의 명확한 원판 위치 표시
  • 터치 및 마우스 지원: 데스크톱, 태블릿 및 모바일 기기에서 작동합니다
  • 자동 구성 처리: 생성자에서 한 번 모드와 범위를 설정합니다
  • WebSocket 통신: 페이지 새로고침 없이 즉시 응답
  • 전문적인 UI: 부드러운 회전과 원뿔형 그라데이션 디자인
  • 플랫폼 확장성: 현재 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×Servo Motor (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 - 소프트웨어 설치.
  • USB 케이블로 Arduino Uno R4/DIYables STEM V4 IoT 보드를 컴퓨터에 연결합니다.
  • 컴퓨터에서 Arduino IDE를 실행합니다.
  • 적절한 Arduino Uno R4 보드(예: Arduino Uno R4 WiFi)와 COM 포트를 선택합니다.
  • Arduino IDE의 왼쪽 바에서 Libraries 아이콘으로 이동합니다.
  • "DIYables WebApps"를 검색한 다음 DIYables에서 제공하는 DIYables WebApps 라이브러리를 찾으세요.
  • 라이브러리를 설치하려면 Install 버튼을 클릭합니다.
아두이노 우노 R4 diyables webapps 라이브러리
  • 다른 라이브러리 의존성 설치를 요청받게 됩니다.
  • Install All 버튼을 클릭하여 모든 라이브러리 의존성을 설치하십시오.
아두이노 우노 r4 diyables 웹앱 의존성
  • Arduino IDE에서, File 예제 DIYables WebApps WebRotator 예제로 이동하거나 위의 코드를 복사하여 Arduino IDE의 에디터에 붙여넣으십시오
/* * DIYables WebApp Library - Web Rotator Example * * This example demonstrates the Web Rotator application: * - Interactive rotatable disc control * - Two modes: Continuous rotation and Limited angle range * - Real-time angle feedback with WebSocket communication * - Touch and mouse support for desktop and mobile * * Features: * - Configurable rotation modes (continuous or limited) * - Beautiful conic gradient disc with visual indicator * - Real-time angle display and feedback * - WebSocket communication for live updates * - Professional responsive UI design * * 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-rotator 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; // Rotator configuration constants const int ROTATOR_MODE = ROTATOR_MODE_CONTINUOUS; // Change to ROTATOR_MODE_LIMITED for limited rotation const float MIN_ANGLE = 0.0; // Minimum angle for limited mode const float MAX_ANGLE = 180.0; // Maximum angle for limited mode // Create WebRotator page with configuration //DIYablesWebRotatorPage webRotatorPage(ROTATOR_MODE_CONTINUOUS); DIYablesWebRotatorPage webRotatorPage(ROTATOR_MODE_LIMITED, MIN_ANGLE, MAX_ANGLE); // Variables for angle tracking float currentAngle = 0.0; void setup() { Serial.begin(9600); delay(1000); // TODO: Initialize your hardware pins here Serial.println("DIYables WebApp - Web Rotator Example"); // Add pages to server webAppsServer.addApp(&homePage); webAppsServer.addApp(&webRotatorPage); // Set 404 Not Found page (optional - for better user experience) webAppsServer.setNotFoundPage(DIYablesNotFoundPage()); // Set callback functions for WebRotator webRotatorPage.onRotatorAngleFromWeb(onRotatorAngleReceived); // Start server webAppsServer.begin(WIFI_SSID, WIFI_PASSWORD); if (ROTATOR_MODE == ROTATOR_MODE_LIMITED) { Serial.println("\nRotator Mode: Limited"); Serial.print("Angle Range: "); Serial.print(MIN_ANGLE); Serial.print("° to "); Serial.print(MAX_ANGLE); Serial.println("°"); } else { Serial.println("\nRotator Mode: Continuous Rotation"); } Serial.println("\nTurn the disc in your web browser to control the rotator!"); } void loop() { // Handle web server and WebSocket connections webAppsServer.loop(); // Simulate rotator movement or control actual hardware here // For demonstration, we'll just echo back the received angle delay(10); } /** * Callback function called when angle is received from web interface * This is where you would control your actual rotator hardware */ void onRotatorAngleReceived(float angle) { currentAngle = angle; Serial.print("Rotator angle received: "); Serial.print(angle, 1); Serial.println("°"); // TODO: Add your rotator control code here // Examples: // - Control servo motor: servo.write(map(angle, 0, 360, 0, 180)); // - Control stepper motor: stepper.moveTo(angle * stepsPerDegree); // - Control DC motor with encoder feedback // - Send commands to external rotator controller // Note: No echo back to avoid interfering with smooth web interface rotation } /** * Example function to change rotator mode at runtime * Call this function to switch between continuous and limited modes */ void setRotatorMode(int mode, float minAng = 0, float maxAng = 360) { webRotatorPage.setRotatorMode(mode, minAng, maxAng); Serial.print("Rotator mode changed to: "); if (mode == ROTATOR_MODE_LIMITED) { Serial.print("Limited ("); Serial.print(minAng); Serial.print("° to "); Serial.print(maxAng); Serial.println("°)"); } else { Serial.println("Continuous"); } } /** * Example function to send angle updates to web interface * Call this function when your rotator position changes */ void sendAngleUpdate(float angle) { currentAngle = angle; webRotatorPage.sendToWebRotator(angle); Serial.print("Angle update sent to web: "); Serial.print(angle, 1); Serial.println("°"); }
  • 코드에서 WiFi 자격 증명을 구성하려면 다음 줄들을 업데이트하십시오:
const char WIFI_SSID[] = "YOUR_WIFI_NETWORK"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
  • Arduino IDE에서 Upload 버튼을 클릭하여 Arduino UNO R4/DIYables STEM V4 IoT에 코드를 업로드합니다
  • 시리얼 모니터를 엽니다
  • 시리얼 모니터에서 결과를 확인합니다. 아래와 같습니다
COM6
Send
DIYables WebApp - Web Rotator Example INFO: Added app / INFO: Added app /web-rotator 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 Rotator: http://192.168.0.2/web-rotator ==========================================
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • 아무 것도 보이지 않으면 Arduino 보드를 재부팅하세요.
  • PC나 휴대폰에서 웹 브라우저를 열으세요.
  • 시리얼 모니터에 표시된 IP 주소를 웹 브라우저에 입력하세요.
  • 예: http://192.168.1.100
  • 아래 그림과 같은 홈 페이지가 표시됩니다.
아두이노 우노 R4 diyables 웹앱 홈 페이지 및 web rotator 앱
  • Web Rotator 링크를 클릭하면 아래와 같이 Web Rotator 앱의 UI가 표시됩니다:
아두이노 우노 R4 diyables 웹 앱 웹 로테이터 앱
  • 또한 IP 주소 뒤에 /web-rotator를 붙여 페이지에 직접 접속할 수 있습니다. 예를 들어: http://192.168.1.100/web-rotator
  • 드래그하여 회전을 제어할 수 있는 인터랙티브한 회전 원판이 표시됩니다.

웹 인터페이스 기능

회전 가능한 디스크 제어

  • 인터랙티브 디스크: 디스크를 회전시키려면 클릭하고 드래그하세요
  • 시각적 피드백: 실시간 각도 표시 및 위치 표시기
  • 매끄러운 애니메이션: 전문적인 그라데이션 디자인으로 부드럽게 회전
  • 각도 표시: 현재 각도는 도 단위로 표시됩니다
  • 모드 표시기: 현재 회전 모드와 한계를 표시합니다

터치 및 마우스 지원

  • 데스크탑 제어: 마우스 클릭 및 드래그
  • 모바일 제어: 터치 및 스와이프 제스처
  • 반응형 디자인: 모든 화면 크기에 최적화
  • 시각적 단서: 상호 작용 영역에 대한 명확한 표시

코드 구성

로테이터 설정

// Continuous rotation mode (full 0-360 degrees) DIYablesWebRotatorPage webRotatorPage(ROTATOR_MODE_CONTINUOUS); // Limited rotation mode with custom range DIYablesWebRotatorPage webRotatorPage(ROTATOR_MODE_LIMITED, 0.0, 180.0); // Set up angle callback webRotatorPage.onRotatorAngleFromWeb(onRotatorAngleReceived);

각도 명령 수신

void onRotatorAngleReceived(float angle) { Serial.print("Rotator angle received: "); Serial.print(angle, 1); Serial.println("°"); // Control your hardware here }

작동 모드

연속 모드

  • 완전 회전: 0°에서 360°를 넘어서 그 이상까지, 상한이 없음
  • 랩 어라운드 없음: 각도 값은 360°를 넘겨 증가할 수 있으며 0°로 되돌아가지 않음
  • 사용 사례: 연속 회전 서보, 안테나, 턴테이블
  • 구성: ROTATOR_MODE_CONTINUOUS

제한 모드

  • 사용자 정의 범위: 최소 각도와 최대 각도 정의
  • 경계 한계: 설정된 한계를 넘는 회전을 방지
  • 용도: 표준 서보 모터, 로봇 팔, 조향 시스템
  • 구성: ROTATOR_MODE_LIMITED, minAngle, maxAngle

하드웨어 통합

서보 모터 제어

다음 코드 조각은 부분적인 예시이며 정상적으로 작동하려면 메인 Arduino 스케치에 통합되어야 합니다.

#include <Servo.h> Servo myServo; // Set rotator to limited mode: 0 to 180 degrees DIYablesWebRotatorPage webRotatorPage(ROTATOR_MODE_LIMITED, 0.0, 180.0); void setup() { myServo.attach(9); // Servo on pin 9 webRotatorPage.onRotatorAngleFromWeb(onRotatorAngleReceived); } void onRotatorAngleReceived(float angle) { // Directly write angle (0-180) to servo myServo.write((int)angle); }

스테퍼 모터 제어

#include <Stepper.h> const int stepsPerRevolution = 200; Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); void onRotatorAngleReceived(float angle) { // Calculate steps for desired angle int steps = (angle / 360.0) * stepsPerRevolution; myStepper.step(steps); }

맞춤 설정 옵션

각도 범위

  • 최소 각도: 허용되는 회전의 최솟값을 설정
  • 최대 각도: 허용되는 회전의 최댓값을 설정
  • 기본 위치: 시스템 부팅 시 시작 각도
  • 해상도: 각도 업데이트의 정밀도 제어

시각적 외관

웹 인터페이스는 구성에 자동으로 적응합니다:

  • Range Display: 설정된 각도 한계를 표시
  • Mode Indicator: 현재 작동 모드를 표시
  • Position Marker: 현재 각도의 시각적 표시
  • Gradient Design: 매끄러운 색상으로 전문적인 외관

일반적인 사용 사례

교육 프로젝트

  • 서보 제어 학습: PWM 및 서보 작동 이해
  • 로봇 교육: 팔 위치 설정, 관절 제어
  • 안테나 위치 제어: 지향형 안테나 제어
  • 카메라 팬/틸트: 원격 카메라 위치 설정

실용적 응용

  • 가정 자동화: 자동화된 블라인드, 통풍구, 문
  • 로봇 공학: 로봇 팔 관절, 이동 로봇의 조향
  • 사물인터넷 프로젝트: 원격 위치 결정 시스템
  • 산업용: 자동 위치 제어, 밸브 제어

문제 해결

회전이 작동하지 않음

  • WiFi 연결 및 WebSocket 상태 확인
  • 콜백 함수가 올바르게 설정되었는지 확인
  • 서보/모터가 올바르게 연결되었는지 확인
  • 모터용 전원 공급이 정상인지 확인

잘못된 각도 값들

  • 특정 하드웨어에 대한 각도 매핑을 확인하십시오.
  • 서보 라이브러리와 핀 구성을 확인하십시오.
  • 콜백 함수에서 적절한 스케일링을 보장하십시오.
  • 시리얼 모니터 출력으로 테스트하십시오.

연결 문제

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

고급 기능

런타임 모드 변경

작동 중에 로테이터 모드를 변경할 수 있습니다:

void setRotatorMode(int mode, float minAng = 0, float maxAng = 360) { webRotatorPage.setRotatorMode(mode, minAng, maxAng); Serial.print("Rotator mode changed to: "); if (mode == ROTATOR_MODE_LIMITED) { Serial.print("Limited ("); Serial.print(minAng); Serial.print("° to "); Serial.print(maxAng); Serial.println("°)"); } else { Serial.println("Continuous"); } }

위치 피드백

현재 위치를 웹 인터페이스로 다시 보내기:

void sendAngleUpdate(float angle) { currentAngle = angle; webRotatorPage.sendToWebRotator(angle); Serial.print("Angle update sent to web: "); Serial.print(angle, 1); Serial.println("°"); }

참고: 웹 인터페이스로 자주 각도 피드백을 전송하면 움직임이 덜 매끄럽게 될 수 있습니다. 실시간 위치 업데이트가 필요할 때만 이 기능을 사용하십시오.

다축 제어

복합 위치 지정을 위해 여러 회전 장치를 결합하십시오:

DIYablesWebRotatorPage panRotator(ROTATOR_MODE_CONTINUOUS); DIYablesWebRotatorPage tiltRotator(ROTATOR_MODE_LIMITED, -90.0, 90.0); server.addApp(&panRotator); server.addApp(&tiltRotator);

교육 통합

STEM 학습 목표

  • 모터 제어: 서보 및 스텝퍼 작동 이해
  • 좌표계: 각도 측정 및 위치 결정
  • 웹 기술: 실시간 제어 인터페이스
  • 프로그래밍: 콜백 함수, 하드웨어 제어

교실 활동

  • 서보 보정: 서보 작동 및 PWM 신호 학습
  • 위치 제어: 정밀 위치 지정 작업 연습
  • 시스템 통합: 센서와 모터 제어를 결합
  • 문제 해결: 하드웨어 및 소프트웨어 문제 디버깅

이 예제는 회전 제어 시스템에 대한 포괄적인 기초를 제공합니다. 교육용과 실용 로봇 애플리케이션 모두에 적합합니다.