T895 택시 전광판 GPS시계 > DIY / 자작사진

본문 바로가기

쇼핑몰 검색

회원메뉴

즐겨찾기 추가

회원로그인

감사합니다


T895 택시 전광판 GPS시계

페이지 정보

작성자 테스트맨 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일21-04-24 02:04 조회1,479회 댓글0건

첨부파일

본문

T895 택시 전광판의 GPS시계 프로그램 입니다.
구매한것중 도트불량이 없는 제품이 있어서 그걸 시계로 만들었습니다.
부품용으로 구매했으니 도트의 문제는 복불복 입니다.

시간 조정 기능은 없이 단순히 GPS수신해서 현재 시간만 표시합니다.
아두이노로 프로그램 했습니다.
컴파일 업로드 하기 위해서는 아두이노IDE에 라이브러리 관리에서 Tinygps를 추가하고
보드매니저에서 Mightycore를 설치해야 합니다.

아두이노 IDE에서 부트로더 업로드후 화일을 컴파일해 올리면 됩니다.
업로드는 spi단자로 해도 되고(보드 개조 불필요)
usb to serial을 이용해도 됩니다.(보드 결선 필요)

GPS 속도는 9600bps로 되어 있습니다.

첫번째 사진은  GPS의 tx를 연결하는 곳입니다. MCU 입장에서는 RX
PCB J3의 연결을 자르세요.(가운데를 커터칼 등으로 긁으면됨)
검정색 단자는 아두이노 업로드를 위해서 만든 시리얼 통신단자 입니다.
usbAsp등의 프로그래머가 있으면 spi단자를 이용해서도 업로드가 가능하므로 만들 필요는 없습니다.
두번째 사진은 아두이노에서 USB TO SERIAL 업로드시 권장하는 회로 입니다.

프로그램을 수정만 하시면 GPS HUD, 시계, 외에 GPS로 얻을 수있는 데이타를 표시하는 장치 구현이 가능합니다.

https://blog.naver.com/greenzgu/222132658503

아두이노 프로그램
//2020.11.01 39*14 DotMatrix, Atmega32L, Taxi Display, Clock, Ext 8Mhz Ver 1.0
//Program By TestMan

#include <TinyGPS.h>
TinyGPS gps;

byte latchPin = 22;  //12 74hc595
byte clockPin = 17;  //11 74hc595
byte dataPin = 16;  //14 74hc595
int year;
unsigned long comma;
byte si, month, day, hour, minute, second, hundredths, colum;
byte Display[69];  //화면 표시용 메모리 확보

byte colum_data[] = {
  0xC0, 0x80, 0xA0, 0x80, 0x90, 0x80, 0x88, 0x80, 0x84, 0x80, 0x82, 0x80, 0x81, 0x80,
  0x80, 0x81, 0x80, 0x82, 0x80, 0x84, 0x80, 0x88, 0x80, 0x90, 0x80, 0xA0, 0x80, 0xC0
};

byte BigFont[] = {
  0x3E, 0x7F, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x7F, 0x3E,  //0-13
  0x04, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x04,  //14-27
  0x3E, 0x7F, 0x03, 0x03, 0x03, 0x03, 0x3F, 0x7E, 0x60, 0x60, 0x60, 0x60, 0x7F, 0x3E,  //28-41
  0x3E, 0x7F, 0x03, 0x03, 0x03, 0x03, 0x1F, 0x3F, 0x03, 0x03, 0x03, 0x03, 0x7F, 0x3E,
  0x22, 0x63, 0x63, 0x63, 0x63, 0x63, 0x7F, 0x3F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02,
  0x3E, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x3F, 0x03, 0x03, 0x03, 0x03, 0x7F, 0x3E,
  0x3E, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x7F, 0x63, 0x63, 0x63, 0x63, 0x7F, 0x3E,
  0x3E, 0x7F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02,
  0x3E, 0x7F, 0x63, 0x63, 0x63, 0x63, 0x7F, 0x7F, 0x63, 0x63, 0x63, 0x63, 0x7F, 0x3E,
  0x3E, 0x7F, 0x63, 0x63, 0x63, 0x63, 0x7F, 0x3F, 0x03, 0x03, 0x03, 0x03, 0x7F, 0x3E,
  0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00
};

//************************************* Satellite Data ************************************
int get_gpsdata() {
  byte c = Serial.read();
  if (gps.encode(c)) {
    gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths);
  }
}

//***************************************** Dot Display ***************************************
void dot_display() {

  for (byte line = 0; line < 14; line ++)  //ULN2003,74HC595D 제어
  {
    digitalWrite(latchPin, LOW);  //레지스터 입력 모드
    shiftOut(dataPin, clockPin, LSBFIRST, Display[line + 56]);  //분 일
    shiftOut(dataPin, clockPin, LSBFIRST, Display[line + 42]);  //분 십
    shiftOut(dataPin, clockPin, LSBFIRST, Display[line + 28]);  //콤마
    shiftOut(dataPin, clockPin, LSBFIRST, Display[line + 14]);  //시간 일
    shiftOut(dataPin, clockPin, LSBFIRST, Display[line]);      //시간 십
    digitalWrite(latchPin, HIGH);  //레지스터 출력 모드

    PORTA = colum_data[line * 2];
    PORTB = colum_data[(line * 2) + 1];
  }
  // 마지막줄 깜빡임 방지
  digitalWrite(latchPin, LOW);  //레지스터 입력 모드
  for (int c = 0; c < 6; c++) {
    shiftOut(dataPin, clockPin, LSBFIRST, 0x00);  //공백
  }
  digitalWrite(latchPin, HIGH);  //레지스터 출력 모드
}

void setup() {
  Serial.begin(9600);
  DDRA = 0xFF; // y축 제어
  DDRB = 0xFF;

  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  //************************************* Satellite Data *************************************
  while (Serial.available()) {
    get_gpsdata();
  }


  //*************************************** GMT -> KST *************************************
  si = (hour + 9) % 12;
  if (si == 0) {
    si = 12;
  }

  //************************************** Time Font Cal ***********************************
  //폰트 수정 하지않고 자리이동위해 *2 함(595d 1번 Q0사용 안함)
  byte si10 = si / 10;  //시간 십 단위 구하기
  if (si10 == 0) {
    for (byte c = 0; c < 14; c++)  //시간 십단위 배열 채움
      Display[c] = 0x00;          //시간 십 단위가 0이면 Display[] 0~13까지 공백 채움
  } else {
    for (byte c = 0; c < 14; c++)  //시간 십단위 Display[] 0~13까지 채움
    {
      Display[c] = (BigFont[(si10 * 14) + c] * 2);
    }
  }

  byte si1 = si % 10;
  for (byte c = 0; c < 14; c++)  //시간 일단위 배열 채움
  {
    Display[c + 14] = (BigFont[(si1 * 14) + c] * 2);  //시간 일 단위 Display[] 14~27까지 채움
  }

  comma = millis(); // 1초마다 콤마 깜빡임
  if (comma % 1000 >= 500)
  {
    for (byte c = 0; c < 14; c++)  //시,분 구분 콤마
    {
      Display[c + 28] = BigFont[140 + c];
    }
  }
  else
  {
    for (byte c = 0; c < 14; c++)
    {
      Display[c + 28] = 0x00;
    }
  }

  byte bun10 = minute / 10;      //분 십 단위 구하기
  for (byte c = 0; c < 14; c++)  //분 십단위 배열 채움
  {
    Display[c + 42] = (BigFont[(bun10 * 14) + c] * 2);  //분 십 단위 Display[] 42~55까지 채움
  }

  byte bun1 = minute % 10;      //분 일 단위 구하기
  for (byte c = 0; c < 14; c++)  //분 일단위 배열 채움
  {
    Display[c + 56] = (BigFont[(bun1 * 14) + c] * 2); //분 일 단위 Display[] 56~69까지 채움
  }

  //***************************************** Display ***************************************

  dot_display();
}

댓글목록

등록된 댓글이 없습니다.

SECURED BY RapidSSL

회사명 선인만물 주소 경기도 시흥시 수인로2979번길 40
사업자 등록번호 140-02-91346 대표 김원규 전화 010-5253-7691/031-315-8691 팩스 031-315-8692
통신판매업신고번호 시흥 제 2007-4호 개인정보관리책임자 김원규
Copyright © 2001-2013 선인만물. All Rights Reserved.

모바일버전 보기 상단으로