본문 바로가기
  • 스스로 행복을 가꾸는 교육을 꿈꾸다
MAKING/우리반 쌤의 똑똑한 메이커 테이블

스테퍼 모터 연구3

by FermeH 2020. 5. 9.

(4월 26일에 진행한 연구 내용입니다! 포스팅이 날아가버려서 다시 씁니다 ㅠㅠ)

 

지난 시간에 이어 스텝 모터 연구를 진행했습니다.

벌써 근 한 달이 되었더라구요... 이것저것 하다보니 시간이 너무 빨리 가네요 ㅠㅠ 

원래 집에 가져와서 아두이노를 만지면서 하려고 다 챙겨왔는데요, 

글쎼 아두이노와 모터를 연결하는 선을 두고와서 ㅋㅋ 틴커캐드 서킷으로 진행했습니다.

이럴 때 최고입니다ㅎㅎ 


그래서 오늘의 목표는

한 자리 7세그먼트 캐소드를 사용해서 숫자를 올리고 내려 사이즈를 정하는 기능을 구현하는 것이었습니다.


저번에는 4자리 7세그먼트 캐소드를 만들었는데요, 그건 아두이노에 꼽아야하는 입력 핀이 너무 많았습니다. 

버튼에 사용되는 핀과 스테퍼 모터에도 사용되는 핀까지 생각하면 아두이노에 있는 핀의 개수가 턱없이 모자랐습니다. 

그래서 한 자리의 7세그먼트 캐소드를 사용하기로 했습니다. 

LED를 사용할까 했는데 그것도 핀을 많이 차지할 것 같았습니다.

아예 그냥 1, 2, 3번 버튼을 설정해 놓을까도 했지만, 무엇이 몇 번인지 직관적이지 않아서 그냥 숫자가 보이게 만들고 싶었습니다. 

 

 

근데 하필 갖고 있는 캐소드가 보통 많이 쓰는 것이랑은 다르더라구요. 

보통 많이 쓰는 것은 약 0.5인치의 크기로, 핀이 아래 위에 5개씩 있는데,
제가 갖고 있는 것은 건 약 0.3인치의 크기로 핀이 좌우로 5개씩 있었습니다. 

 

사무실에서 열심히 자료를 찾다가 결국 못찾고 에너지가 떨어져서 집에 갖고 왔습니다.ㅋㅋ

 

그렇지만 아시다시피 아두이노를 연결 케이블을 놓고 왔습니다.ㅋㅋㅋ

 

아쉽게도 틴커캐드 서킷에도 약 0.3인치 크기의 그 캐소드는 없더라구요. 

그래서 일단 약 0.5인치 짜리로 만들었습니다. 

 

코드는 아래와 같습니다. 

int segValue[10][8] = {
  {1, 1, 1, 1, 1, 1, 0, 0}, // 0
  {0, 1, 1, 0, 0, 0, 0, 0}, // 1
  {1, 1, 0, 1, 1, 0, 1, 0}, // 2
  {1, 1, 1, 1, 0, 0, 1, 0}, // 3
  {0, 1, 1, 0, 0, 1, 1, 0}, // 4
  {1, 0, 1, 1, 0, 1, 1, 0}, // 5
  {1, 0, 1, 1, 1, 1, 1, 0}, // 6
  {1, 1, 1, 0, 0, 0, 0, 0}, // 7
  {1, 1, 1, 1, 1, 1, 1, 0}, // 8
  {1, 1, 1, 1, 0, 1, 1, 0}  // 9
};

int segPin[]={2, 3, 4, 5, 6, 7, 8, 9}; //사용핀{a,b,c,d,e,f,g,dp} 순서대로 
int UB = 10; //UpButton
int DB = 11; //DownButton
int num = 0; //화면 표시 숫자 
int Size = 0; //정한 사이즈 
int SetSize = A5;

void setup() {
  for(int i=0;i<8;i++){
    pinMode(segPin[i], OUTPUT);
  }
  pinMode(UB, INPUT_PULLUP);//UpButton 입력 
  pinMode(DB, INPUT_PULLUP);//DownButton 입력
  pinMode(SetSize, INPUT_PULLUP);//사이즈 정하기 버튼 입력
}



void loop() {   
  if(digitalRead(UB) == LOW){
  	if(num==9) num = 0;
    else num++;
    delay(150);
  }
  
  if(digitalRead(DB) == LOW){
  	if(num != 0) num--;
    delay(150);
  }
  
  segOutput(num);
  
  if(digitalRead(SetSize) == LOW){
  	Size = num;
    segClear();
    delay(100);
    segOutput(Size);
  }  
}

void segClear(){
  for(int i= 0; i < 8; i++){
  	digitalWrite(segPin[i], LOW);
  }
}			


void segOutput(int Number){
	segClear();
  for(int i=0; i<8; i++){
  	digitalWrite(segPin[i], segValue[Number][i]);
  }
  delayMicroseconds(1000);
}

작동하는 모습은 다음과 같습니다. 

모터를 조심스레 붙여보려고 했는데 디버깅을 하려다 보니 시간이 너무 늦어졌더라구요 ㅋㅋ 

그래서 그건 다음 연구로 넘깁니다 :) 

'MAKING > 우리반 쌤의 똑똑한 메이커 테이블' 카테고리의 다른 글

사이즈 표시 기능 보완  (0) 2020.05.10
스테퍼 모터 연구4  (0) 2020.05.09
스테퍼 모터 연구2  (0) 2020.04.01
스테퍼 모터 연구1  (0) 2020.03.27
(사실은 이미..) 시작!  (0) 2020.03.27

댓글