질문게시판 > atmega128 장애물회피자동차 스텝모터

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

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


BASIC4MCU | 질문게시판 | atmega128 장애물회피자동차 스텝모터

페이지 정보

작성자 alsdn6431 작성일2018-05-14 11:54 조회1,518회 댓글1건

본문

	

atmega128을 이용해서 장애물 회피 자동차를 만들고있습니다.

https://www.youtube.com/watch?v=F9s5NOJfJ1s   

 

동영상에서 보이는거와 같이 구현하고있는데

 

장애물 앞에서 직각회전으로 저렇게 구현하려면 자동차에 DC모터가 아닌 스텝모터를 달아야 한다더군요.

그러면 스텝모터를 달면 소스코드가 달라지나요?

현재 제가 짠 소스 코드입니다.

어떻게 수정이 필요한가요?ㅠ

 

 

 

#include <avr/io.h>

#include <stdlib.h>

#define F_CPU 16000000UL

#define__DELAY_BACKWARD_COMPATIBLE__  

#include <util/delay.h>

 

#define  TRIG  6  

#define  ECHO  7  

unsunsigned char digit[10] = {0x3f,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67};

unsunsigned char fnd_sel[4]= {0x01, 0x02, 0x04, 0x08};

unsunsigned char fnd[4];

void display_fnd(unsignedintvalue);

 

#define SPEED_100  255  //PWM 100% 값

#defineSPEED_50  128  // PWM 50% 값

#defineSPEED_0  0  //PWM 0% 값

 

intmotor_a_in1 = 4;  // motor A IN : PD4 +PD5

intmotor_a_in2 = 5;

intmotor_b_in1 = 6;   // motor B IN : PD6 +PD7

intmotor_b_in2 = 7;

intmotor_a_pwm= 6;  // motor A PWM : PB6

intmotor_b_pwm= 7;   // motor B PWM : PB7

voidforw()

 

{

    PORTD = (PORTD & 0b00001111) 0b10100000;OCR1B = SPEED_100;OCR1C = SPEED_100;

    PORTA = PORTD;

}

voidback()

{

    PORTD = (PORTD & 0b00001111) 0b01010000;OCR1B = SPEED_100;OCR1C = SPEED_100;

    PORTA = PORTD;

}

voidclockwise()

{

    PORTD = (PORTD & 0b00001111) 0b01100000;OCR1B = SPEED_100;OCR1C = SPEED_100;

    PORTA = PORTD;

}

voidcclockwise()

{

    PORTD = (PORTD & 0b00001111) 0b10010000;OCR1B = SPEED_100;OCR1C = SPEED_100;

    PORTA = PORTD;

}

voidsstop()

{

    PORTD = (PORTD & 0b00001111) 0b00000000;OCR1B = SPEED_0;OCR1C = SPEED_0;

    PORTA = PORTD;

 

}

void init_uart1() // UART1 초기화 함수

{

    UCSR1B = 0x18; // 송신 Transmit(TX), Receive(RX) Enable

    UCSR1C = 0x06; // UART Mode, 8 Bit Data, No Parity, 1 Stop Bit

    UBRR1H = 0; // Baudrate 세팅

    UBRR1L = 8; // 16Mhz, 115200 baud

}

void putchar1(char c) // 1 문자를 송신(Transmit)하는 함수

{

     while(!(UCSR1A & (1<<UDRE1))) ; // TX 통신 가능 확인, UDRE : bit 5

     UDR1 = c; // 1문자 송신

}

char getchar1() // 1 character를 수신(receive)하는 함수

{

while (!(UCSR1A & (1<<RXC1))); // UCSR1A 7번 비트= RXC1(Receiver Complete)

return(UDR1); // 1 character 수신

}

unsigned int cal_distance() // 장애물까지의 거리 계산

{

unsigned distance;

TCCR3B = 0x02; // Counter/Timer 1 클록 0.5us 

PORTE &= ~(1<<TRIG); // Trig = LOW

_delay_us(10);

PORTE |= (1<<TRIG); // Trig = HIGH

_delay_us(10);

PORTE &= ~(1<<TRIG); // Trig = LOW

while(!(PINE & (1<<ECHO))) ; // wait until Echo = HIGH

TCNT3 = 0x0000; // Counter/Timer 1 값 초기화(=0)

while (PINE & (1<<ECHO));

TCCR3B = 0x00; // Counter/Timer 1 클록 정지

distance = (unsigned int)(TCNT3 / 2 / 5.8); // 시간에 비례하는 거리보정 함수 적용

return(distance);

}

void display_fnd(unsigned int value)

{   int i;

    fnd[3] = (value/1000)%10;

    fnd[2] = (value/100)%10;

    fnd[1] = (value/10)%10;

    fnd[0] = (value/1)%10;;

    for (i=0; i<4; i++)

    {

PORTC = digit[fnd[i]] | (i==1 ? 0x80 : 0x00);

PORTG = fnd_sel[i];

_delay_ms(2);

if (i%2)

    _delay_ms(1);

    }

}

int main(void)

{

unsigned int distance;

DDRC = 0xff;

DDRG = 0x0f;

DDRD |= 0xf0; // 모터 출력, PD4-7, PB6, PB7

  DDRE = ((DDRE | (1<<TRIG)) & ~(1<<ECHO));

DDRA = DDRD; // Test LED, DDRD=DDRA

DDRB |= 0xc0; 

TCCR1A = 0xaa; // Fast PWM, 8bit, 매치시 OC1A/B/C 모두 LOW

TCCR1B = 0x0c; // 256분주, 16us

while(1)

{

distance = cal_distance();

 

if (distance < 100) // 위험 거리이면

{

switch (rand()%4) { // 랜덤으로 방향 설정

case 0: clockwise();_delay_ms(500+rand()%500);PORTA = 0x01;break;

case 1: cclockwise();_delay_ms(500+rand()%500);PORTA = 0x02;break;

case2: back();_delay_ms(500+rand()%500);clockwise();_delay_ms(500+rand()%500);PORTA = 0x04;break;

case 3: back();_delay_ms(500+rand()%500);cclockwise();_delay_ms(300+rand()%500);PORTA = 0x08;break;

default:sstop();_delay_ms(100+rand()%100);break;

}

}

else

{

forw(); _delay_ms(10);  PORTA = 0x80;  // 그렇지 않으면 전진

}

}

}

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

댓글 1

조회수 1,518

master님의 댓글

master 작성일

스텝모터를 구입하시고
1상여자 방식으로 구동하세요
1상여자 방식으로 토크가 부족하면 2상여자 방식으로 구동하여야하는데
전류가 2배 흐르므로 드라이버 전류 능력이 부족하지 않은지 체크해야합니다.

동영상에 사용된 스텝모터의 스펙부터 알아보세요
모터를 결정하면 구입 전에 드라이버도 같이 검토해야합니다.

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

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은 질문게시판에서만 작성 가능합니다. 스태프 19-01-15 25
공지 사이트 이용 안내 댓글[4] master 17-10-29 4676
질문 마스터님 봐주세요~ 댓글[2] 이미지새글첨부파일 현이꽃 19-01-22 17
답변 답변글 답변 : 마스터님 봐주세요~ 댓글[6] 새글 master 09:50 14
질문 c언어 조언 해주세요. 댓글[2] 새글 c린이 19-01-22 15
질문 손문일 새글 손문일 19-01-22 18
답변 답변글 답변 : 손문일 새글 master 19-01-22 9
답변 답변글 답변 : 손문일 새글 손문일 19-01-22 6
답변 답변글 답변 : 답변 : 손문일 새글 master 19-01-22 8
질문 블루투스 조이스틱 질문좀요 새글 현이꽃 19-01-22 9
답변 답변글 답변 : 블루투스 조이스틱 질문좀요 댓글[1] 새글 master 19-01-22 12
질문 atmega128 풀업 스위치 댓글[2] 새글 c린이 19-01-22 13
질문 master님 스테핑 모터 3개 제어 관련 문의드립니다. 이미지새글첨부파일 원스타 19-01-22 21
답변 답변글 답변 : master님 스테핑 모터 3개 제어 관련 문의드립니다. 댓글[4] 새글 master 19-01-22 12
답변 답변글 답변 : 답변 : master님 스테핑 모터 3개 제어 관련 문의드립니다. 새글 원스타 19-01-22 8
답변 답변글 답변 : 답변 : 답변 : master님 스테핑 모터 3개 제어 관련 문의드립니다. 댓글[1] 새글 master 19-01-22 11
질문 아두이노 스케치 반복문 질문 master 19-01-20 16
질문 스위치 회로 댓글[2] 이미지 동지 19-01-19 26
질문 LCD 회로가 바뀌었는데 이미지첨부파일 Lami 19-01-19 21
답변 답변글 답변 : LCD 회로가 바뀌었는데 master 19-01-20 14
질문 C언어 댓글[4] c린이 19-01-18 32
질문 아두이노 하나로 2개의 센서 데이터 받기 질문 master 19-01-18 17
질문 ATmega128에서 TWI(I2C)에 대한 코딩 질문입니다!! 댓글[2] 이미지첨부파일 질문Y 19-01-15 36
질문 아두이노 소프트웨어 시리얼 질문 댓글[2] 이미지첨부파일 hktsakura 19-01-15 28
답변 답변글 답변 : 아두이노 소프트웨어 시리얼 질문 댓글[5] 이미지 master 19-01-15 35
답변 답변글 답변 : 답변 : 아두이노 소프트웨어 시리얼 질문 댓글[4] master 19-01-15 32
답변 답변글 답변 : 답변 : 답변 : 아두이노 소프트웨어 시리얼 질문 댓글[3] master 19-01-16 28
질문 아두이노 적외선센서 2개를 이용해서 출입인원 카운팅을 하려고 합니다. 배우러왔습니다 19-01-14 25
답변 답변글 답변 : 아두이노 적외선센서 2개를 이용해서 출입인원 카운팅을 하려고 합니다. 댓글[1] master 19-01-15 19
답변 답변글 답변 : 답변 : 아두이노 적외선센서 2개를 이용해서 출입인원 카운팅을 하려고 합니다. 댓글[1] 배우러왔습니다 19-01-15 12
게시물 검색

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