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

웹 연동 아두이노 자동차 경주 벽돌 게임 만들기

부품 및 소모품

부품 수량 비고
아두이노 우노 1
PHPoC 실드 (이더넷 또는 와이파이 실드 겸용) 1 USB 와이파이 동글(RT3070/RT5370 칩셋) 연결 가능, 또는 유선 랜 직결
USB 와이파이 동글 1 PHPoC 실드용, 유선 사용 시 불필요
로터리 앵글 센서 (가변저항) 1 차선 변경 입력용

프로젝트 개요

데모

고전 벽돌 게임 스타일의 자동차 경주 게임입니다. 5개 차선 중 내 차를 조종해 상대 차들을 피하며 최고 점수를 겨룹니다. 속도 15단계로 빨라질수록 난이도 상승.

배선

  1. PHPoC 실드를 아두이노에 적층
  2. 로터리 앵글 센서: GND→GND, VCC→5V, SIG→A0

웹 연동 아두이노 자동차 경주 벽돌 게임 만들기

데이터 흐름

아두이노 → PHPoC 실드 → 웹 브라우저

준비 사항

  1. PHPoC 실드 와이파이 설정 (SSID/비번) — 공식 매뉴얼 참조
  2. 웹 UI 업로드: remote_racing_game.php 다운로드 → PHPoC 디버거로 실드에 업로드
  3. 아두이노 코드 업로드: PHPoC 라이브러리 설치 후 스케치 업로드

실행 방법

  1. 아두이노 IDE 시리얼 모니터 열기 → 출력되는 IP 주소 확인
  2. 웹 브라우저에서 https://<IP주소>/remote_racing_game.php 접속
  3. [CONNECT] 버튼 클릭 → 웹소켓 연결 후 게임 시작

아두이노 코드

#include "SPI.h"
#include "Phpoc.h"

PhpocServer server(80);
int adcPin = A0;
float adcVal = 0;
int lastPos = -1;
float adcMin = 512 - 2.5*100; // 센서 중앙값 보정용

void setup() {
  Serial.begin(9600);
  while(!Serial);
  Phpoc.begin(PF_LOG_SPI | PF_LOG_NET);
  server.beginWebSocket("game");
  Serial.print("WebSocket server address: ");
  Serial.println(Phpoc.localIP());
}

void loop() {
  PhpocClient client = server.available();
  if (client) {
    // 노이즈 제거용 50회 평균
    adcVal = 0;
    for(int i=0;i<50;i++) adcVal += analogRead(adcPin);
    adcVal /= 50;
    
    // 0~4 차선 인덱스로 매핑
    int pos = (int)((adcVal - adcMin) / 100);
    pos = constrain(pos, 0, 4);
    
    if (lastPos != pos) {
      String txtMsg = String(pos) + "\r\n";
      char buf[txtMsg.length()];
      txtMsg.toCharArray(buf, txtMsg.length());
      server.write(buf, txtMsg.length());
      Serial.println(txtMsg);
      lastPos = pos;
      delayMicroseconds(50);
    }
  }
}

PHPoC 실드 측 웹 UI 코드 (remote_racing_game.php)

HTML5 Canvas + JavaScript로 구현된 완전한 게임 엔진입니다. 주요 기능:

<!DOCTYPE html>
<html><head>
<title>Arduino - Web-based Game</title>
<meta name="viewport" content="width=device-width, initial-scale=0.7, maximum-scale=0.7">
<style> body{text-align:center;font:15pt Arial;} h1{font:bold 25pt;} h2{font:bold 15pt;} button{font:bold 15pt;} </style>
<script>
// ... (전체 자바스크립트 게임 엔진 코드 - 원문 참조)
// 주요 함수: init(), connect_onclick(), ws_onopen/close/message(),
// draw_car/grid/sideline/score, move_opponent_cars(), check_crash(),
// game_process(), blinking(), game_over(), update_scene()
</script></head><body>
<center>
<h1>Arduino - Car Race <br> Brick Game</h1>
<canvas id="remote" width="500" height="400"></canvas>
<h2>WebSocket: <span id="ws_state">null</span> <button id="bt_connect" onclick="connect_onclick()">CONNECT</button></h2>
</center></body></html>

함수 레퍼런스 (학습용)

확장 아이디어

제조공정

  1. 웹 제어 DMX 조명 시스템 - 아두이노 마스터 컨트롤러
  2. 아두이노 우노와 OLED 디스플레이로 클래식 퐁(Pong) 게임 만들기: 단계별 튜토리얼
  3. 블루투스 제어 아두이노 스파이봇(Spybot) 만들기
  4. DIY 아두이노 USB 게임 컨트롤러 - 나만의 고성능 게임패드 만들기
  5. 아두이노 터치 브레이크아웃 게임: 2.4" TFT LCD로 클래식 아케이드 구현
  6. 낡은 RC카를 아두이노와 엑스박스 컨트롤러로 조종하는 차량으로 개조하기
  7. 아두이노 웹 제어 MP3 플레이어 - 브라우저로 오디오 재생하기
  8. 픽셀 체이서: 아두이노 나노로 만든 인터랙티브 원탭 LED 게임
  9. 아두이노 웹 패턴 언락으로 보안 강화하기 – 간편 설정 및 원격 제어
  10. 아두이노로 크롬 공룡 게임 자동화하기 – LDR과 파이썬으로 장애물 감지