[실습세미나] 미로찾기 1팀

작성자
이준 문재현 임민수 서현원
작성일
2022-05-15 22:37
조회
302
저희 미로찾기 1팀은 기존의 직육면체 미로 구조에서 벗어나 원형 미로구조를 구현했습니다. Single Plus-320C_PLA 프린터를 이용하여 구조를 3d프린팅 했으며 구조는 Fusion360을 이용하여 생성했습니다.  중앙에 놓인 구슬은 초음파 센서가 있는 곳까지 사용자의 조이스틱 조작을 통해서 이동시킵니다.  X, Y방향을 조이스틱으로부터 아날로그 신호를 서브모터에 보내 조작합니다.

한계로는 2가지가 있습니다. 초음파 센서가 두개의 센서를 이용해 거리차를 계산하는 원리인데 세로로 설치함으로써 구슬을 크게 해야하는 변수가 있었습니다.  그리고 시작 스위치와 도착 사이에 임의의 시스템 시간을 빼는 방법을 적용시키지 못해 실질적인 미로 탐색 시간을 즉각 확인하지 못하는 한계가 있습니다.




#include 
//타이머
int count = 0;
//나머지
Servo sv1;
Servo sv2;

int trigPin = 7;
int echoPin = 8;

int speakerPin = 2;

int buttonPin = 4;

void setup() {
  //서보 조이스틱
  sv1.attach(13);
  sv2.attach(12);

  //초음파 센서
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin,INPUT);

  //스위치
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(speakerPin, OUTPUT);
}

void loop() {
  //서보모터 조이스틱
  int x = analogRead(A0);
  int y = analogRead(A1);

  int angle1 = map(x, 0, 1023, 40, 80);
  sv1.write(angle1);

  int angle2 = map(y, 0, 1023, 40, 80);
  sv2.write(angle2);
  
  delay(15);

  //초음파 센서
  digitalWrite(trigPin, HIGH);
  delay(10);
  digitalWrite(trigPin, LOW);

  float duration = pulseIn(echoPin, HIGH);

  float distance = ((float)(340 * duration) / 10000) / 2;

  int time= millis()/1000;
  int k = millis()/1000;
  //거리조절 부위
  if (distance < 3)
  {
    tone(speakerPin,2000);
    delay(500);
    noTone(speakerPin);
    Serial.print(time);
    Serial.print("초\n");
  }
  //스위치

  if (digitalRead(buttonPin) == LOW)
  {
    time = time - k;
    digitalWrite(speakerPin, 5000);
    delay(500);
    noTone(speakerPin);
  }
}

전체 0