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

사이즈 표시 기능 보완

by FermeH 2020. 5. 10.

어제 한 자리 7세그먼트 캐소드를 이용해서 사이즈를 표시했는데요,

핀을 너무 많이 사용하는 것이 고민이었습니다. 

그래서 사실 다른 기능도 사용할 것을 생각하면 아두이노를 2개 이상 써야 하나 싶었어요. 

 

그런데 정말 고맙게도 그 포스팅을 보고 피드백을 받았어요! 다음과 같은 방법을 알게 되었습니다. 

아래는 각각의 방법에 대한 간단한 소개입니다. 

방법 기존 방법(한 자리 7세그먼트 캐소드) 한 자리 7 세그먼트 캐소드 + 74HC595 시프트 레지스터 사용 어댑터 결합형 LCD 모듈 사용  4핀 OLED 모듈 사용 
필요한 핀의 개수  8개 3개  2개  2개 
 - 아날로그 핀  4개 2개  3개 2개
 - 디지털 핀  4개 1개 3개 0개 
가격  440원(0.56인치 기준) 440원 + 200원(시프트 레지스터) 2200원  4400원(0.91인치)

1) 74HC595 시프트 레지스터 사용: datain, latch, clk (아날로그 핀 2개, 디지털 핀 1개)

왼쪽이 틴커캐드 서킷에 있는 8비트 시프트 레지스터입니다. 가운데는 해당 레지스터의 구조입니다.

 7세그먼트 캐소드를 사용하되 8비트 시프트 레지스터인 74HC595를 이용하는 것인데요,

- 기존에 만든 코드를 활용할 수 있다는 점 

- 틴커캐드 서킷에 이 부품이 있어서 한 번 만들어 볼 수 있다는 점이 장점입니다. 

 

2) 어댑터 결합형 LCD모듈 사용: SCL, SDA (아날로그 핀 2개) 

이전에 LCD모듈 사용에 대해 포스팅한 적이 있습니다.

https://juhongeom.tistory.com/3?category=896695

 

아두이노랑 서킷이랑 2

오늘은 LCD 를 연결하기를 시도했습니다. 서킷에 예제가 있어서 보고 따라해보려 했는데요, 이 녀석이 이 녀석이랑 같은지가 알 수 없어서 다른 예제를 찾아보게 되었습니다. 그 중 제가 갖고 있�

juhongeom.tistory.com

이것도 어댑터가 결합된 것이 있더라구요! 

 

3) OLED 모듈 사용: SCL, SDA (아날로그 핀 2개) 

참고한 블로그 링크입니다. - https://baessi.tistory.com/51

 

[아두이노] OLED[0.96인치(128*64)]에 원하는 그림 출력-NodeMCU포함

안녕하세요 오늘은 OLED에 원하는 그림 출력에 대해서 알려드리겠습니다. 이전에도 OLED를 이용한 예제를 보여드렸는데 이번에는 Adafruit_SSD1306 라이브러리를 이용하여 OLED에 본인이 원하는 그림을

baessi.tistory.com

3), 4)가 제일 핀을 덜 쓰기 때문에 그 둘 중 선택을 해야할 것 같습니다. 

저는 4)로 하기로 결정했습니다. ㅋㅋㅋ 조금 비싸긴 하지만 일단 핀의 개수가 가장 큰 변수니까요!


그래도 일단은 틴커캐드에 3), 4)가 없어서 1)로 해보았습니다. 

회로 구성 사진입니다.

아래는 이에 사용한 코드입니다. 

 

byte dec_digits[] = {0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 
0b01101101, 0b01111100, 0b00000111, 0b01111111, 0b01100111};

byte eraser = 0b00000000;

int dataPin = 5;
int latchPin = 6;
int clockPin = 7;

int UB = 10; //UpButton
int DB = 11; //DownButton
int num = 0; //화면 표시 숫자 
int Size = 0; //정한 사이즈 
int SetSize = A5;

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, 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(200);
    segOutput(Size);
  }  
}

void segClear(){
  digitalWrite(latchPin, LOW);
 shiftOut(dataPin, clockPin, MSBFIRST,eraser);  
  digitalWrite(latchPin, HIGH); 
}			


void segOutput(int Number){
  segClear();
  digitalWrite(latchPin, LOW); // shift out the bits:
  shiftOut(dataPin, clockPin, MSBFIRST, dec_digits[Number]);
    //take the latch pin high so the LEDs will light up:
  digitalWrite(latchPin, HIGH); // pause before next value:
  delayMicroseconds(1000);
}

그리고 틴커캐드 링크입니다. 

https://www.tinkercad.com/things/jukG1RLe7IU

 

Circuit design 74HC595 와 7세그먼트 캐소드

3D design '74HC595 와 7세그먼트 캐소드' created by juhong0422 with Tinkercad.

www.tinkercad.com

작동하는 모습입니다. 

 

ㅎㅎ 이제 OLED모듈도 구해야겠군요!^^ 

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

코틀린_공부_1  (0) 2020.09.10
이것은 바로!! 사업 선정 결과!!  (0) 2020.05.24
스테퍼 모터 연구4  (0) 2020.05.09
스테퍼 모터 연구3  (0) 2020.05.09
스테퍼 모터 연구2  (0) 2020.04.01

댓글