질문게시판 > 스텝모터2개 + 초음파센서

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

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


BASIC4MCU | 질문게시판 | 스텝모터2개 + 초음파센서

페이지 정보

작성자 공천 작성일2022-06-06 18:21 조회1,109회 댓글1건

본문

	

안녕하세요. 아두이노에 입문한지 얼마 되지 않아 얼마 되지 않은 지식으로 짜보려 하는데 원하는대로 되지않아 질문합니다!

엘리베이터가 어디에 있든 n층 사는 사람이 번호를 누르면 엘리베이터가 1층에 내려온 다음 해당 n층으로 다시 이동하는 코드를 짜는 중입니다.

엘리베이터가 두 대 라는 가정하에 스텝모터를 2개를 쓰니 if조건문이 잘못된건지 코딩자체가 잘못된건지 계속 스텝모터 1개만 작동을 하고 

나머지 하나는 신호만 가고 돌지 않아 글을 올려봅니다. (외부전원도 연결해봐서 전력부족은 아닌것같습니다!)

 

#include <Stepper.h>  ///스텝모터 

#include <NewPing.h>  ///초음파센서 다중 연결 

 

//sonar(TrigPin, EchoPin, MaxDistance);

NewPing sonar[2] = { 

  NewPing(2, 3, 200), ///초음파센서 1번

  NewPing(12, 13, 200), ///초음파센서 2번

};

///모터 1번

int in1 = 8;   ///in1=8번 연결

int in2 = 9;   ///in2=9번 연결

int in3 = 10;   ///in3=10번 연결

int in4 = 11;   ///in4=11번 연결 pmw제어를 위해 연결번호 바꾸면안된다.

 

///모터 2번

int in11 = 4;   ///in11=3번 연결

int in22 = 5;   ///in22=4번 연결

int in33 = 6;   ///in33=5번 연결

int in44 = 7;   ///in44=6번 연결 pmw제어를 위해 연결번호 바꾸면안된다.

 

int steps = 1280;     // 한바퀴에 해당하는 값 선언

Stepper stepper1(steps,  11, 9, 10, 8);  // 스텝모터 객체 선언 (INT4, INT2, INT3, INT1) 순

Stepper stepper2(steps,  7, 5, 6, 4);  // 스텝모터 객체 선언 (INT4, INT2, INT3, INT1) 순

 

int sec = 1000;    //한 층당 걸리는 시간

 

void setup() {

  Serial.begin(9600);

  stepper1.setSpeed(20); // rpm : 1분당 도는 횟수, 너무 큰값을 하면 안돌아감

  Serial.println("START!!");

}

 

void loop() {

 int floor1 = 0;   ///1번 엘리베이터 층수 변수 설정

 int floor2 = 0;   ///2번 엘리베이터 층수 변수 설정

 int distance1 = (sonar[0].ping_cm());

 int distance2 = (sonar[1].ping_cm()); 

 

 delay(500);

 

///거리별 층 수 설정

  Serial.print("distance1: ");

  Serial.print(distance1);

  Serial.println("cm");

  if(distance1 > 0 && distance1 < 2.5)

 {floor1 = 1;}

else if(distance1 >= 2.5 && distance1 < 7.5)

 {floor1 = 2;}

else if(distance1 >= 7.5 && distance1 < 12.5)

 {floor1 = 3;}

else if(distance1 >= 12.5 && distance1 < 17.5)

 {floor1 = 4;}

else if(distance1 >= 17.5 && distance1 < 22.5)

 {floor1 = 5;}

else if(distance1 >= 22.5 && distance1 < 27.5)

 {floor1 = 6;}

else if(distance1 >= 27.5 && distance1 < 40)

 {floor1 = 7;}  

else if(distance1 > 40)

 {floor1 = Serial.print("error");} 

      

  Serial.print("NO.1 Floor: "); ///층수 표시

  Serial.print(floor1);

  Serial.println();

 

  delay(50);

 

  Serial.print("distance2: ");

  Serial.print(distance2);

  Serial.println("cm");

  if(distance2 > 0 && distance2 < 2.5)

 {floor2 = 1;}

else if(distance2 >= 2.5 && distance2 < 7.5)

 {floor2 = 2;}

else if(distance2 >= 7.5 && distance2 < 12.5)

 {floor2 = 3;}

else if(distance2 >= 12.5 && distance2 < 17.5)

 {floor2 = 4;}

else if(distance2 >= 17.5 && distance2 < 22.5)

 {floor2 = 5;}

else if(distance2 >= 22.5 && distance2 < 27.5)

 {floor2 = 6;}

else if(distance2 >= 27.5 && distance2 < 40)

 {floor2 = 7;}            

 else if(distance2 > 40)

 {floor2 = Serial.print("error");} 

  Serial.print("NO.2 Floor: "); ///층수 표시

  Serial.print(floor2);

  Serial.println();

  delay(2000);

 

  if(Serial.available())

    {char input = Serial.read();

     int diff1 = (input-floor1);

     int diff2 = (input-floor2);

 

     int TIME1 = ((diff1+input)*2.5)+1;

     int TIME2 = ((diff2+input)*2.5)+1;

 

    if(floor1 < floor2)// 엘리베이터 A가 B보다 낮은 층에 있으면 

    {for(int i=0; i<25 ; i++)

      {

        stepper1.step(floor1*10);

        delay(1000);

        

        if(TIME1 > TIME2)

          {for(int i=0; i<diff2; i++)

            {stepper2.step(diff2*10);

              delay(1000);

              stepper2.step(-input*10);

              break;}}

        else if(TIME1 < TIME2)

          {for(int i=0; i<diff1; i++)

            {stepper1.step(diff1*10);

              delay(1000);

              stepper1.step(-input*10);

              break;}}

        else ///입력값이 현재 층 일때

         {stepper1.step(0);

         stepper2.step(0); }

         

         }

      }

 

    else if(floor1 > floor2)// 엘리베이터 B가 A보다 낮은 층에 있으면

    {for(int i=0; i<25 ; i++)

      {

        stepper2.step(floor2*10);

        delay(1000);

 

        if(TIME1 > TIME2)

          {for(int i=0; i<diff2; i++)

            {stepper2.step(diff2*10);

              delay(1000);

              stepper2.step(-input*10);

              break;}}

        else if(TIME1 < TIME2)

          {for(int i=0; i<diff1; i++)

            {stepper1.step(diff1*10);

              delay(1000);

              stepper1.step(-input*10);

              break;}}

        else ///입력값이 현재 층 일때

         {stepper1.step(0);

         stepper2.step(0); 

         }

    }

    }

    else(floor1 = floor2)// 엘리베이터 A,B의 현재 층수가 같으면 그냥 A 호출

     ;{for(int i=0; i<diff1 ; i++)

      {

        stepper1.step(floor1*10);

        delay(1000);

        stepper1.step(-input*10);

        

        break;

      }

    }

 

    }

}

  

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

댓글 1

조회수 1,109

master님의 댓글

master 작성일

엘리베이터가 20층에 있고
19층에서 1층에 가기 위해서 버튼을 누르면
20층에 있던 엘리베이터가 1층에 갔다가 19층으로 와서 사람을 태우고 1층에 간다고요?
왜 이렇게 제어 할까요?

1개의 엘리베이터도 복잡해서 남의 도움을 받기가 쉽지 않은데 2대라면 더욱 남의 도움을 받기 어렵겠습니다.

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

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
질문 아두이노 도트 매트릭스 코딩댓글[1] 이미지첨부파일 끼룩 22-06-13 895
질문 아두이노 레오나르도 업로딩 오류댓글[1] 면지지 22-06-13 986
질문 통신에 대한 기초 책 추천댓글[2] 하리 22-06-13 1301
질문 스텝모터,릴레이모듈 9V 인가 (회로도 포함)댓글[1] 이미지첨부파일 아두이노대학 22-06-12 1141
질문 esp32댓글[1] 이미지첨부파일 ejdog 22-06-12 1224
질문 Simpletimer 라이브러리 질문입니다 홍머생 22-06-11 1157
답변 답변글 답변 : Simpletimer 라이브러리 질문입니다댓글[1] master 22-06-13 806
질문 millis()? 질문드립니다.댓글[3] 브링미히어 22-06-11 1521
답변 답변글 답변 : millis()? 질문드립니다.댓글[2] master 22-06-13 630
질문 토글스위치 질문드립니다.댓글[3] 412904 22-06-11 634
질문 조도센서로 서보모터 제어 질문입니다. 왕초보입니다 22-06-11 852
답변 답변글 답변 : 조도센서로 서보모터 제어 질문입니다.댓글[1] master 22-06-11 1702
질문 블루투스와 적외선센서댓글[1] 지훈 22-06-11 1028
질문 아두이노 수위센서 모터 3개 ...댓글[1] 고옹대 22-06-10 1321
질문 atmega128 인터럽트 이용한 dc모터 제어댓글[2] 이미지첨부파일 박맹 22-06-10 1689
질문 아두이노간 블루투스 질문 드립니다.댓글[8] 흐규흐규 22-06-10 2572
질문 토글스위치를 사용한 dc모터 정역회전 제어 부분에 있어서 질문드립니다...댓글[4] 쿤싼 22-06-10 1624
질문 atmega isp 연결관련해서 질문드려요댓글[3] 아트메가넘어려워 22-06-10 1494
질문 TFT LCD 이상이 있습니다댓글[4] 이미지 플립플롭 22-06-10 1847
질문 atmega128 순차적신호 질문있습니다댓글[1] 이미지첨부파일 졸업예정 22-06-10 1191
답변 답변글 답변 : atmega128 순차적신호 질문있습니다 master 22-06-10 1435
질문 아두이노 센서 3개와 모터 bldc연동 코딩 첨부파일 RLOP35 22-06-09 984
답변 답변글 답변 : 아두이노 센서 3개와 모터 bldc연동 코딩댓글[4] master 22-06-09 1560
질문 atmega 128 led 순차적 제어입니다 졸업예정 22-06-09 1403
답변 답변글 답변 : atmega 128 led 순차적 제어입니다 master 22-06-09 1266
질문 ATMEGA128 인터럽트 관련질문입니다댓글[2] 짜요쩌요 22-06-09 1285
질문 아두이노 코드를 보던 중, define부분이 이해가 안되서 해석 부탁드립니다댓글[2] 선학 22-06-09 1123
질문 LCD 화면 문자출력이 안되요..댓글[3] 이미지첨부파일 chelsea 22-06-09 614
질문 서보모터 2개... 살려주세요댓글[3] 브링미히어 22-06-09 1237
질문 아두이노 코딩 질문드립니다!댓글[2] 흑백 22-06-08 1164
게시물 검색

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