질문게시판 > 아두이노 제어하기

TODAY495 TOTAL2,679,202
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | 아두이노 제어하기

페이지 정보

작성자 매드닥터 작성일2023-03-19 18:23 조회797회 댓글8건

본문

	

제가 이번에 배운 아두이노를 활용하여 만들어보려 합니다.

 목적

아두이노 모터와 초음파를 이용하여 진동이 울리는 것입니다.

 

1.모터를 0도에서 180도로 각도는 10 간격으로 제어한다

2.모터에 초음파를 달아 탐지한다. 초음파 거리는 1미터이다

3.모터 각도에 초음파 센서에 걸리면 진동이 발생한다.

 

일단  초음파 코드를 올렸습니다. 코드를 섞는 방법을 몰라 알려주세요

  pinMode(TRIG, OUTPUT);

  pinMode(ECHO, INPUT);

 

}

 

void loop()

 

{

  long duration, distance;

 

  digitalWrite(TRIG, LOW);

  delayMicroseconds(2);

  digitalWrite(TRIG, HIGH);

  delayMicroseconds(10);

  digitalWrite(TRIG, LOW);

 

  duration = pulseIn (ECHO, HIGH); 

 

  distance = duration * 17 / 1000;  

 

  Serial.println(duration );

  Serial.print("\nDIstance : ");

  Serial.print(distance); 

  Serial.println(" Cm");

 

  delay(1000);

 

}

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 8

조회수 797

master님의 댓글

master 작성일

#include<Servo.h>
Servo servo;
//
const int TRIG=2,ECHO=3,MOTOR=4;
//
long duration,distance;
//
void sonar(){
  digitalWrite(TRIG,1); delayMicroseconds(10); digitalWrite(TRIG,0);
  duration=pulseIn(ECHO,1);
  Serial.println(duration);
  distance=duration*17/1000;
  Serial.print("\nDIstance : "); Serial.print(distance); Serial.println(" Cm");
}
//
void setup(){
  pinMode(MOTOR,OUTPUT);
  pinMode(TRIG,OUTPUT); pinMode(ECHO,INPUT);
  servo.attach(7);
}
//
void loop(){
 
  for(int i=0;i<=180;i+=10){
    servo.write(i); delay(100);
    sonar();
    if(distance<100)digitalWrite(MOTOR,1); // 1m 이내로 감지되면 진동모터 ON
    else digitalWrite(MOTOR,0); // 진동모터 OFF
  }
  for(int i=180;i>=0;i-=10){
    servo.write(i); delay(100);
    sonar();
    if(distance<100)digitalWrite(MOTOR,1); // 1m 이내로 감지되면 진동모터 ON
    else digitalWrite(MOTOR,0); // 진동모터 OFF
  }
}

매드닥터님의 댓글

매드닥터 작성일

감사합니다. 제가하나빠트린내용과 바뀐내용이 있습니다. 제가생각해도 각도의크기가너무작아 변경하였습니다. 각도는10도로 총18개이며 각각도에도달할때 초음파센서에 무언가탐지되면 울리는형식입니다. 또한 각 각도마다 진동센서를 나눌생각입니다.  쉽게말하자면 0도에무언가 감지되면 1번진동센서가 울리고 10도에 초음파에무언가 감지되면 2번 진동센서가 2초동안 울리는방식 입니다.

참고로 한번 아두이노를작성해보았습니다. 하지만 제가생각한대로 움직이지않습니다. ㅠㅠ
제가만든 코드입니다.
#include <Servo.h>

#define TRIGGER_PIN  2  // 초음파센서 트리거 핀
#define ECHO_PIN    3  // 초음파센서 에코 핀
#define VIBRATE_PIN  4  // 진동센서 핀
#define SERVO_PIN    5  // 서보모터 핀
#define SERVO_SPEED  5000  // 5초에 한 바퀴

Servo myservo;

void setup() {
  myservo.attach(SERVO_PIN);
  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(VIBRATE_PIN, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  for (int angle = 0; angle <= 180; angle += 10) { // 0도에서 180도까지 10도씩 이동
    myservo.write(angle);
    delay(SERVO_SPEED / 180); // 10도마다 이동
    float distance = getDistance();
    if (distance < 150) { // 초음파에 무언가 탐지
      digitalWrite(VIBRATE_PIN, HIGH); // 진동센서 동작
      delay(2000); // 2초간 진동
      digitalWrite(VIBRATE_PIN, LOW); // 진동센서 종료
    }
  }
}

float getDistance() {
  digitalWrite(TRIGGER_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGGER_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGGER_PIN, LOW);
  float duration = pulseIn(ECHO_PIN, HIGH);
  float distance = duration * 0.034 / 2;
  return distance;
}

master님의 댓글

master 작성일

뭐가되고 뭐가 안되는지 알아야 하지 않을까요?
//
1번 진동센서 2번 진동센서...라고 질문에 적으셨는데 코드는 진동센서가 1개 뿐입니다.

매드닥터님의 댓글

매드닥터 작성일

제가 설명이부족했습니다. 죄송합니다
일단재료는 아두이노 마이크로와 서보모터1개 초음파센서1개 진동모터가9개입니다
서보모터에 초음파센서를부착시켜 움직일수있게 합니다. 초음파센서는 무한히 45도움직입니다.또한속도는왕복 5초입니다.
여기서 진동모터의 작동방식은이렇습니다.
1번 진동모터(서보모터0~5도로 움직인다. 초음파센서1.5미터거리에 무언가 탐지되면 울린다.)
2번 진동모터(서보모터5~10도로 움직인다. 초음파센서1.5미터거리에 무언가 탐지되면 울린다.)
3번 진동모터(서보모터10~15도로 움직인다. 초음파센서1.5미터거리에 무언가 탐지되면 울린다.)
4번 진동모터(서보모15~20도로 움직인다. 초음파센서1.5미터거리에 무언가 탐지되면 울린다.)
5번 진동모터(서보모터20~25도로 움직인다. 초음파센서1.5미터거리에 무언가 탐지되면 울린다.)
6번 진동모터(서보모터25~30도로 움직인다. 초음파센서1.5미터거리에 무언가 탐지되면 울린다.)
7번 진동모터(서보모터30~35도로 움직인다. 초음파센서1.5미터거리에 무언가 탐지되면 울린다.)
8번 진동모터(서보모터35~40도로 움직인다. 초음파센서1.5미터거리에 무언가 탐지되면 울린다.)
9번 진동모터(서보모터40~45도로 움직인다. 초음파센서1.5미터거리에 무언가 탐지되면 울린다.)
참고로 진동모터가울리며 초음파센서에무언가탐지되어도 서보모터는 초기화하지않고 계속진행되는형식입니다.
아두이노 코드가너무복잡해 도움을청합니다.

master님의 댓글

master 작성일

진동모터가 초음파센서의 측정을 방해 할 수 있겠습니다.
한 개도 아니고 9개라면 더욱..

#include <Servo.h>
Servo myservo;
//
#define TRIGGER_PIN  2  // 초음파센서 트리거 핀
#define ECHO_PIN    3  // 초음파센서 에코 핀
#define VIBRATE_PIN  4  // 진동센서 핀
#define SERVO_PIN    5  // 서보모터 핀
#define SERVO_SPEED  5000  // 5초에 한 바퀴
//
void setup() {
  myservo.attach(SERVO_PIN);
  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(VIBRATE_PIN, OUTPUT);
  Serial.begin(9600);
}
//
void loop() {
  for(int a=0;a<=9;a++){ // 0도에서 45도까지 5도씩 이동
    myservo.write(a*5); delay(556); // 5도마다 이동 // 556*9=5004ms
    float distance=getDistance();
    if(distance<150){ // 초음파에 무언가 탐지
      digitalWrite(VIBRATE_PIN,HIGH); // 진동센서 동작
      delay(2000); // 2초간 진동
      digitalWrite(VIBRATE_PIN,LOW); // 진동센서 종료
    }
  }
  //
  for(int a=9;a>=0;a--){ // 45도에서 0도까지 5도씩 이동
    myservo.write(a*5); delay(556); // 5도마다 이동 // 556*9=5004ms
    float distance=getDistance();
    if(distance<150){ // 초음파에 무언가 탐지
      digitalWrite(VIBRATE_PIN,HIGH); // 진동센서 동작
      delay(2000); // 2초간 진동
      digitalWrite(VIBRATE_PIN,LOW); // 진동센서 종료
    }
  }
}
//
float getDistance() {
  digitalWrite(TRIGGER_PIN, LOW);  delayMicroseconds(2);
  digitalWrite(TRIGGER_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIGGER_PIN, LOW);
  float duration = pulseIn(ECHO_PIN, HIGH);
  float distance = duration * 0.034 / 2;
  return distance;
}

매드닥터님의 댓글

매드닥터 작성일

진동모터는 몸에부착시킬것이며 완전체(초음파센서와 서보모터의부착)은 제가들고다닐것입니다. 제가바라본방향에 어느각도에서 탐지되면 맞는방향의 진동모터가 몸에 진동을울리는것입니다. 왼쪽에서 울리면 몸의 왼쪽에서 오른쪽에서 탐지되면 몸의 오른쪽에서 내용이 이상하다면 그림으로 따로그려 올려드리겠습니다.

매드닥터님의 댓글

매드닥터 작성일

#include <Servo.h>
#include <NewPing.h>
#include <SoftwareSerial.h>

// 초음파 센서 핀 설정
#define trigPin 11
#define echoPin 12
#define maxDistance 150 // 최대 감지 거리 (단위: cm)

// 서보모터 핀 설정
#define servoPin 9
Servo servo;

// 음성 출력을 위한 소프트웨어 시리얼 설정
#define voiceTx 7
#define voiceRx 8
SoftwareSerial voice(voiceTx, voiceRx);

// 서보모터 각도 초기값 설정
int angle = 0;

// 초음파 센서 객체 생성
NewPing sonar(trigPin, echoPin, maxDistance);

void setup() {
  // Serial 통신 시작
  Serial.begin(9600);

  // 서보모터 핀 모드 설정
  servo.attach(servoPin);

  // 음성 출력용 소프트웨어 시리얼 통신 시작
  voice.begin(9600);

  // 서보모터 초기 각도로 이동
  servo.write(angle);

  // 초기화 완료 메시지 출력
  Serial.println("Initialization complete.");
}

void loop() {
  // 초음파 센서로부터 거리 측정
  int distance = sonar.ping_cm();

  // 거리가 0보다 큰 경우 (감지 성공)
  if (distance > 0) {
    // 각도 및 거리 정보 출력
    Serial.print("Angle: ");
    Serial.print(angle);
    Serial.print(" deg, Distance: ");
    Serial.print(distance);
    Serial.println(" cm");

    // 음성으로 감지된 각도와 거리 정보 출력
    voice.print("Object detected at ");
    voice.print(angle);
    voice.print(" degrees, ");
    voice.print(distance);
    voice.println(" centimeters away.");

    // 각도를 5도 증가시키거나 40도에서 0도로 되돌림
    angle += 5;
    if (angle > 40) {
      angle = 0;
    }

    // 서보모터를 다음 각도로 이동
    servo.write(angle);
    delay(500);
  }

  // 거리가 0인 경우 (감지 실패)
  else {
    // 실패 메시지 출력
    Serial.println("Object not detected.");

    // 서보모터를 0도로 이동하여 시작 위치로 되돌림
    angle = 0;
    servo.write(angle);
    delay(500);
  }
}
진동모터에관해서 문제점이있다고 말씀하셔서 음성출력코드와 함쳐서 만들어보았습니다. 진동모터는 빼는것으로 하였습니다. 여기에 서보모터의 속도를 조절하고싶어서 코딩을 하려하니 오류가 발생합니다. 도와주십시오 서보모터의 속도는 왕복 4초입니다.

매드닥터님의 댓글

매드닥터 작성일

원하는 완제품의기능 이렇습니다
서보모터는 45도를 5도간격으로 무한히 왕복운동을 한다 속도는 왕복기준5초이다.
초음파센서는 서보모터에 부착하여 회전하면서 탐지한다
5도간격마다 초음파센서가 몇미터안에 무언가 탐지되면 음성으로 (몇도  몇미터에 사물이탐지되었다고 말해준다)입니다

제가만든 코딩에서 부족한 것이있다면 도와주십시오 ㅠㅠ

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 19173
공지 사이트 이용 안내댓글[28] master 17-10-29 34060
질문 stm32f767 스텝모터 속도 질문있습니다 새글 123132 23-05-27 12
질문 아트메가 128 코딩 오류 질문입니다.댓글[1] 새글 태태킴 23-05-27 12
질문 스텝모터 제어하는 소스파일인데 질문있습니다. 새글 Bs드리프터 23-05-27 16
답변 답변글 답변 : 스텝모터 제어하는 소스파일인데 질문있습니다. 새글 master 23-05-27 20
질문 모터 컨트롤러와 웜기어 모터 연결 문의 드립니다댓글[2] 새글 오후에 23-05-27 13
답변 답변글 답변 : 모터 컨트롤러와 웜기어 모터 연결 문의 드립니다댓글[1] 새글첨부파일 오후에 23-05-27 14
질문 아두이노 스텝모터 초음파 결합댓글[2] 새글 결합기원 23-05-26 24
답변 답변글 답변 : 아두이노 스텝모터 초음파 결합 새글 master 23-05-27 11
질문 piezo부저 연결 방법댓글[2] 이미지새글첨부파일 djwb 23-05-26 17
질문 Atmega128과 도트매트릭스을 이용해 16x16미로찾기 새글 JJEE 23-05-26 25
답변 답변글 답변 : Atmega128과 도트매트릭스을 이용해 16x16미로찾기 새글 master 23-05-26 18
질문 아두이노 mq3 센서 여러개댓글[5] 새글 keyest 23-05-26 31
질문 아두이노 이어폰모듈 elb080306댓글[1] 크라퀴 23-05-25 20
질문 어제 아두이노 핀 문제댓글[2] 미ㅏㄴㅇ 23-05-25 31
질문 스텝 모터, 모터 드라이버 관련 질문입니다댓글[2] 스튜와트 23-05-24 30
답변 답변글 답변 : 스텝 모터, 모터 드라이버 관련 질문입니다 이미지 master 23-05-24 21
질문 아두이노 디지털 핀 문제 미ㅏㄴㅇ 23-05-24 24
답변 답변글 답변 : 아두이노 디지털 핀 문제댓글[1] master 23-05-24 36
질문 아두이노 코드 합치기댓글[1] 아두초보이노 23-05-24 31
질문 마그네틱 도어센서 관련 질문드립니다. 엉아 23-05-23 22
답변 답변글 답변 : 마그네틱 도어센서 관련 질문드립니다.댓글[1] master 23-05-24 18
답변 답변글 답변 : 답변 : 마그네틱 도어센서 관련 질문드립니다. master 23-05-24 21
질문 토양습도센서 이용시LCD 오류댓글[5] 윤던 23-05-23 40
질문 ATMEGA 광센서 부저댓글[2] 코딩 23-05-23 41
질문 ATMEGA J-KIT 128 스위치 부저댓글[1] 이미지첨부파일 코딩 23-05-22 45
질문 장애물 회피 게임댓글[1] 첨부파일 헬창 23-05-20 56
질문 회로도 관련 질문댓글[1] 이미지첨부파일 dnjs 23-05-20 42
질문 Atmega FND 왼쪽 2칸엔 고정 오른쪽 2칸엔 1씩증가댓글[1] 초피 23-05-20 49
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기