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

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

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


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

페이지 정보

작성자 매드닥터 작성일2023-03-19 18:23 조회8,568회 댓글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

조회수 8,568

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 23705
공지 사이트 이용 안내댓글[31] master 17-10-29 37575
질문 Energia 시리얼 모니터에 아무것도 출력되지않습니다.댓글[1] 김의공 24-05-22 37
질문 아두이노 스위치, 에어펌프 연결댓글[1] 이미지첨부파일 존존 24-05-20 62
질문 MSP430런치패드를 이용한 LCD 코딩 관련 질문댓글[1] 뀨쥰이 24-05-16 66
질문 생활 속 가스 센서 이미지첨부파일 Fosen 24-05-13 51
질문 atmega128A로 초음파센서 바밤 24-05-13 79
답변 답변글 답변 : atmega128A로 초음파센서 master 24-05-13 76
질문 eeprom 값 출력이 다르게 나옵니다댓글[5] 이미지첨부파일 idghte 24-05-05 167
답변 답변글 답변 : eeprom 값 출력이 다르게 나옵니다 master 24-05-05 72
질문 센서나 블루투스에서 조건문이 실행이 느립니다. 현아 24-05-03 97
답변 답변글 답변 : 센서나 블루투스에서 조건문이 실행이 느립니다. master 24-05-03 96
질문 님들 MG811 이산화탄소 센서를 쓰는데 라칸 24-05-03 89
답변 답변글 답변 : 님들 MG811 이산화탄소 센서를 쓰는데 이미지 master 24-05-03 77
질문 아두이노와 디지털 홀센서 사용 중 sampling rate 문제입니다. 첨부파일 fjur564 24-05-03 82
답변 답변글 답변 : 아두이노와 디지털 홀센서 사용 중 sampling rate 문제입니다. 이미지 master 24-05-03 94
질문 OP AMP댓글[1] 이미지첨부파일 창원거북이 24-05-02 92
질문 라즈베리파이 라우팅 테이블을 영구 추가하려는데 라칸 24-04-30 88
질문 hc-05 블루투스와 가스센서 서브모터(sg-90) 코드 wwqa 24-04-29 113
답변 답변글 답변 : hc-05 블루투스와 가스센서 서브모터(sg-90) 코드댓글[1] master 24-04-29 138
질문 BW16 Wifi 모듈에 대한 질문좀댓글[1] 이미지 라칸 24-04-25 125
질문 블루투스(hc-05) 서브모터(sg-90) 연동 질문 있습니다. wwqa 24-04-24 101
답변 답변글 답변 : 블루투스(hc-05) 서브모터(sg-90) 연동 질문 있습니다.댓글[2] master 24-04-24 217
질문 STM32F401보드 TCRT5000 적외선 감지센서댓글[1] Orida 24-04-18 171
질문 눈 깜빡임 감지 아두이노 코딩댓글[2] 에버튼 24-04-18 271
질문 시리얼 통신 관련 질문드립니다. ㅜ 카르니코스 24-04-18 82
답변 답변글 답변 : 시리얼 통신 관련 질문드립니다. ㅜ댓글[6] master 24-04-18 739
질문 아두이노 PWM 제어 질문 있습니다.댓글[1] 홍현우 24-04-17 185
질문 초음파센서에 아무것도 잡히지 않을 시 그래프를 비워놓는 방법 질문드립니다. idghte 24-04-14 127
답변 답변글 답변 : 초음파센서에 아무것도 잡히지 않을 시 그래프를 비워놓는 방법 질문드립니다. master 24-04-14 141
게시물 검색

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
모바일버전으로보기