로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Sensor Applications
아듀이노 응용소스
작성자 avrtools™        
작성일 2016/02/16
첨부#1 DS3231-RTC.zip (129KB) (Down:164)
ㆍ추천: 0  ㆍ조회: 343   
  Arduino DS3231 RTC to 5110 LCD
Arduino DS3231 RTC to 5110 LCD
참조: Arduino NOKIA 5110 Graphic LCD 

Nokia 5110 LCD 모듈 (84 x 48 dot)
  
 
Nokia 5110 LCD (84 x 48 dot B&W) 모듈의 연결은 다음과 같다.
아듀이노의 기판에는 표시가 없지만 SPI로 연결하는 방법이다.
D8 = SCK (5 번) SPI Clock
D9 = MOSI (4 번) SPI Data
D10= D/C (3 번) Data/Command
D11 = RST (1 번) rest
D12 = CE (2 번) Chip Enable

+5V = VCC (6 번) 전원
3.3V = BL (7 번) LED
GND = GND (8 번) 접지

참고로 NOKIA 5110 LDE 표시의 문자는 폭x높이는 6x8의 글꼴을 사용한다.
이 글꼴은 라이브러리 LCD5110_Graph DefaultFonts.c에 들어 있다 
NOKIA 5110 그래픽 LCD에서 온도의 단위는 *C 대신 ~C를 사용하면 글꼴에서 로 표시된다.

 
LCD5110_Graph.h의 문자 표시 방법
1) 소스에서 먼저 라이브러리를 부른다.
#include <LCD5110_Graph.h>

2) LCD의 연결과 글꼴을 설정한다
LCD5110 myGLCD(8,9,10,11,12);
extern uint8_t SmallFont[];


LCD5110_Graph  라이브러리

 
3) 초기화 함수에서 LCD 함수에 사용하는 변수를 설정한다
  myGLCD.InitLCD();  // 84 x48 그래픽
  myGLCD.setFont(SmallFont);  // 6x8 글꼴

4) 주 함수에서 LCD에 표시하는 함수는 myGLCD.print(char C, int 84, int 48) 이다.
사용방법은 어렵지 않다.그래픽 문자표시 함수의 ()안에 들어가는 변수는 문자(ascii), X, Y다.
 
  myGLCD.print("DS3231 RTC", 0, 0);  // 문자열 DS2313을 0 번칸, 0 번줄로 글꼴을 보낸다
  myGLCD.update();  // LCD 모듈로 전송된 ascii 문자열을 글꼴로 바꾸어 표시한다. 
  delay(10);  // LCD 모듈 표시 지연시간


참고로 84x48 그래픽 LCD의 줄의 위치 X, Y는 다음과 같다.
1번 줄 1번글자는 0,  0 그대로 0, 0
2번 줄 1번글자는 0,  8 혹은 0, 10 
3번 줄 1번글자는 0, 16 혹은 0, 20
4 번줄 1번글자는 0, 24 혹은 0, 30
5번 줄 1번글자는 0, 30 혹은 0, 40
6번 줄 1번글자는 0, 36
 
Y의 표시 시작위치는 8 dot의 글꼴이므로 8 개씩 혹은 10 개씩증가한다. 
그러므로 줄 간격이  8 이면 마지막 줄은 6 번째 줄이다.(4 dot의 반줄이 남는다)
또한 줄 간격이 10 이면 마지막 줄은 5 번째 줄이다. (간격도 좋고 남는 dot도 없다)
 
X는 6 dot의 문자이므로 표시 시작위치는 6 개씩 증가한다.
X의 문자위치에서 공백은 반자일 때, 공백은 표시하지 않고, 다음 문자 위치를 -2 ~ -4로 앞당긴다. 
 
온도를 표시하는 함수는 다음과 같다.
  myGLCD.print("Temp", 0, 40);  // 제목은 Temp 이다
  float temp =rtc.getTemp();       //  온도를 읽는다
  myGLCD.print(String(temp), 26, 40);    // 온도값의 문자열을 LCD로 전송한다 
  myGLCD.print("~C", 56, 40);  // 단위  를 전송한다.
  myGLCD.update();               // LCD로 보낸 문자열을 글꼴로 바꾸어 표시한다.
  delay(10);                           // LCD 작동 대기시간

DS3231 RTC 모듈
   
 
 
RTC DS3231의 아두이노 소스는 하드웨어 I2C를 사용한다.
SPI의 Data인 SDA 핀은 내부에서 pull-up 하므로 외부 저항은 연결하지 않는다. 
32768 Hz 펄스가 나오는 32K 핀과 가로채기 출력 SQW/INT 핀은 사용하지 않는다.
 
RTC DS3231의 연결 방법
SDA (혹은 A4) = SDA
SCL (혹은 A5) = SCL
 
DS3231 RTC 회로도
 

RTC DS3231 모듈의 사용방법
ds3231 RTC의 초기화는 라이브러리 DS2313.h을 주함수로 불러야 한다
#include <DS3231.h>    // SDA =A4 혹은 SDA 전용핀, SCL =A4 혹은 SCL 전용핀
DS3231 rtc(SDA, SCL); //  DS3231 함수를 rtc로 설정한다


DS3231 라이브러리
   

초기화 함수에서 RTC를 작동시킨다. (리튬전지로 전원이 꺼져도 시계는 돌아간다)
   rtc.begin();    // RTC DS3231 초기화

다음은 펌웨어를 처음 구울 때 시간값을 설정한다

   //rtc.setDOW(WEDNESDAY); // Set Day-of-Week
   //rtc.setTime(04, 50, 0); // Set the time to 12:00:00 (24hr format)
   //rtc.setDate(15, 02, 2016); // Set the date to January 1st, 2014 
   // 한번 구워진 펌웨어로 시계가 맞게 작동하면, 다시 설정할 필요가 없으므로 //로 막아논다.
 
함수를 부르는 조건은 다음과 같다, () 안의 필요없는 포맷조건은 생략하고 불러도 된다.
char DS3231::getDateStr(uint8_t slformat, uint8_t eformat, char divider)
돌아오는 값은 내부에서 Str 포인터 함수로 처리하고 문자열로 준다. 
return (char*)&output;
 
초기화의 DS3231 rtc(SDA, SCL); 에서 DS3231는 rtc로 대입했다.
그러므로 RTC의 데이터를 읽는 함수는 Str =rtc.함수명(포맷조건);으로 사용한다.
RTC에서 시간값을 읽은 결과는 문자열 Str로 들어온다.
   Str 변수 =  rtc.getDOWStr());  // 요일 week 
   Str 변수 = rtc.getDateStr());  // 날짜 date 
   Str 변수 = rtc.getTimeStr()); // 시간 time 
   Str 변수 = rtc.getTemp();     // 온도 temperature

DS3231 RTC to LCD의 연결 


Mega328 Uno를 사용하려고 했으나  대중적인 응용을 고려하여 Uno를 사용했다. 
점퍼선이 좀 길어 지저분 하다. RTC 3231는 빵판에 꼽기도 좋고 시간도 잘 맞는다.
잘못된 LCD5110 라이브러리를 사용하면 명암조절이 잘못 되어 표시가 엉망으로 된다. 
 
전자부품을 수입하는 무역회사가 뽕뽕으로 말아서 테이프도 안붙히고 박스에 넣어서 배송했다.
포장 문제인지? 중국산이라 그런지?, 누르거나 잘 못 꼽으면 화면에 줄금이 가거나 희미해진다.
 
결국 2개를 사서 1개는 불량이 났고, 한개를 수리해서 사용하고 있다. 2개를 모두 교환하고 싶다.
LCD 데이터를 달라니까, 자료 사이트도 안 알려주고 인터넷에서 품명으로만 찾으란다.
거래하기 전에 일단 샘플로 구입했는데, 이 회사 거래하면 불량에 시달릴 것 같아 겁이 난다.

DS3231 RTC 소스
// ds3231 RTC & Temperature 센서의 최기화
#include <DS3231.h>    // SDA =A4 혹은 SDA 전용핀, SCL =A4 혹은 SCL 전용핀
DS3231 rtc(SDA, SCL); //  Init the DS3231 using the hardware interface 

// Nokia 5110 LCD module. (84 x 48 dot B&W) 
#include <LCD5110_Graph.h>  // SCK =D8, MOSI =D9, D/C =D10, RST =11, CE =12 
LCD5110 myGLCD(8,9,10,11,12);  // 5110 LCD 초기화 
extern uint8_t SmallFont[];   // 5110 LCD에 사용할 문자의 크기는 8x6 dot 이다.

void setup()

   rtc.begin();    // Initialize the rtc object
   //The following lines can be uncommented to set the date and time
   //rtc.setDOW(WEDNESDAY); // Set Day-of-Week
   //rtc.setTime(04, 50, 0); // Set the time to 12:00:00 (24hr format)
   //rtc.setDate(15, 02, 2016); // Set the date to January 1st, 2014 

   myGLCD.InitLCD();
   myGLCD.setFont(SmallFont); 

   Serial.begin(115200);    // Setup Serial connection 
}

void loop()
{
   Serial.print(rtc.getDOWStr()); // Send Day-of-Week
   Serial.print(" ");
   Serial.print(rtc.getDateStr()); // Send date
   Serial.print(" Time:");
   Serial.print(rtc.getTimeStr()); // Send time

   // Wait one second before repeating :)
   Serial.print(" Temp:"); // Send current temperature
   Serial.print(rtc.getTemp());
   Serial.println("*C");

   // myGLCD.print(char C, int 84, int 48) for 10 char x 6 lines 
   myGLCD.print("DS3231 RTC", 0, 0); 
   myGLCD.update(); 
   delay(10); 

   myGLCD.print(rtc.getDOWStr(), 0, 10); // display week 
   myGLCD.update(); 
   delay(10); 

   myGLCD.print(rtc.getDateStr(), 0, 20); // dusplay date 
   myGLCD.update(); 
   delay(10); 

   myGLCD.print("Time", 0, 30); 
   myGLCD.print(rtc.getTimeStr(), 26, 30); // display time 
   myGLCD.update(); 
   delay(10); 
      
   myGLCD.print("Temp", 0, 40);
   float temp =rtc.getTemp();
   myGLCD.print(String(temp), 26, 40); // send temperature
   myGLCD.print("~C", 56, 40);
   myGLCD.update();
   delay(10);

   delay (950); // (10ms x 5) + 950ms = 1000 ms delay
}

직렬포트 전송 데이터
 
DS2313 에서 읽은 요일, 날짜, 시간, 온도를 직렬 포트로 전송하여 디버깅한다. 
 
RTC DS3231의 시간설정
  
 
아두이노 스케치의 초기화 함수의 rtc.begin(); 다음의 //으로 가려진 2 줄을 보라.
// rtc.setTime(04. 50, 0);     // 현재의 시, 분. 초로 수정한다.
// rtc.setDate(15, 02, 2016);  // 현재의 일, 월, 년으로 수정한다.
 
마지막 2줄 앞의 //를 풀고, 소스를 수정한 다음, 펌웨어를 업로드 한다.
업로드가 끝나면 소스의 초기화 함수안의 2줄른 다시 //로 막아준다. 
 
Nokia 5110 그래픽 LCD의 용용 예.
24V 12A BiPWM 펄스발생기 개발모델 EB-BiPWM V1.0 작동시험 동영상


주문형으로 설계한 장치는 용액에 설치된 전극을 Bi-polar PWM 펄스로 12~24V 0.1~10A 까지 공급한다.
전극에 Bipolar 펄스를 구동하면서, ON-OFF Duty와 Periode를 실시간으로 쉽게 설정할 수 있다.
 
Bi polar PWM (100% 에서 Positive pulse와 negative 펄스 사이는 Dead time이 있다)
  

예를 들면 희귀금속 정밀도금 장치에서 도금-제거의 비율을 타이머로 제어하던 기존 도금방식이 있다,
전극의 방향을 천천히 바꾸면, 그만큼 거친 도금층이 두껍게 진행되고, 제거공정에서도 품질이 떨어진다.
이것을 Bipolar PWM Pulse Duty ON-OFF 비례방식으로 변경하면, 도금의 질을 대폭적으로 향상시킬 수 있다.

24V 15A SMPS와 함께 조립한 Bi-PWM V1.2 완성품
 

중앙에 NOKIA 5110 GLCD를 배치했고, 우측 아랫쪽은 스위치와 전원 램프를 배치했다. 
설정용 가변저항 3 개는 좌측 부터 Duty [%], Period [sec], Over Temp [℃] 설정이다.
LCD 우측의 LED 4 개는 Positive Puls, Negative Pulse, OTP indicator, Analog Outout 표시다.

또 다른 응용에서 Bipolar 구동의 효과는 정방향 전류로 발생하는 전극의 슬러지를 역방향 전류에서 제거한다.  
또한 PWM 펄스의 ON-OFF Duty 제어는 Analog 전류제어 방식보다 정밀한 출력을 직선적으로 제어한다.
이것은 아날로그 전류제어 방식보다 제어 직선성을 대폭 개선하므로, 이상적인 제어로 화학반응을 개선한다.
 
 
 
아날로그 정전류 제어는 전류를 낮출 때 구동전압이 낮게되어, 반응이 목표보다 낮아지고
전류가 높을 때는 구동전압이 높게되어, 반응이 목표보다 높아지므로 제어 직선성이 나쁘다.

구동 주기 period는 10 ~ 2000 ms (100 Hz ~ 0.5 Hz), 펄스폭은 1 ~ 99 %의 duty를 출력한다. 
전원 전압, 온도 센서, PWM 비례출력 설정인 duty 값과 구동주기 설정인 Peridode 값을 표시한다.
 
마지막 줄의 OTP는 Reactor의 온도가 높아지면, PWM 구동 펄스를 정지 시키는 보호 기능이다.
온도센서는 액체의 온도를 측정할 수 있는 -40 ℃ ~ +100 ℃ 방수용 NTC 10K를 사용했다.

각 구동값의 설정은 사용자의 편의를 위해 아날로그 가변 저항을 전면 제어판에 조립했다.
24V 12A full bridge 구동회로는 MOSFET 20A 급 4개를 Heatsink에 부착하고 2 개의 PWM 펄스로 구동했다.
구동 주파수는 10KHz 이상도 가능하지만, 주문 규격을 따라서 범위를 축소했다.   

이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
  AVRTOOLS™
   
윗글 ESP8266 ESP-12E WiFi 센서 서버의 제작
아래글 ESP8266 Weather Server의 제작
    N         제목    글쓴이 작성일 조회 추천
아듀이노 응용소스 게시판 avrtools™ 2016/02/05 (금) 151 0
25 ESP8266 MQTT Relay Control avrtools™ 2016/03/03 (목) 215 0
24 2 채널 ESP8266 WiFi Switch의 제작 avrtools™ 2016/02/25 (목) 239 0
23 ESP-12E SDK 0.9.5 사용방법 avrtools™ 2016/02/18 (목) 292 0
22 ESP8266 ESP-12E WiFi 센서 서버의 제작 avrtools™ 2016/02/17 (수) 276 0
21 Arduino DS3231 RTC to 5110 LCD avrtools™ 2016/02/16 (화) 343 0
20 ESP8266 Weather Server의 제작 avrtools™ 2016/02/15 (월) 311 0
19 Arduino 온습도 센서 DHT-22 avrtools™ 2016/02/12 (금) 279 0
18 ESP8266 WiFi 펌웨어 업그레이드 avrtools™ 2016/02/11 (목) 473 0
17 Arduion ESP8266 WiFi 설정 방법 avrtools™ 2016/02/10 (수) 378 0
16 Arduino 정전용량식 수분센서의 분석과 제작 avrtools™ 2016/02/07 (일) 234 0
15 Arduino 전극식 수분센서의 분석과 제작 avrtools™ 2016/02/07 (일) 304 0
14 Arduino 정밀 전력계의 ADC avrtools™ 2016/02/02 (화) 396 0
13 Arduino 정밀 전력계의 LPF avrtools™ 2016/02/02 (화) 343 0
12 Ardunio 16비트 ADC Data Logger avrtools™ 2016/01/31 (일) 221 0
11 Arduino AC/DC Power Meter의 제작 avrtools™ 2016/01/29 (금) 360 0
10 Arduino 교류 역율계(power factor)의 제작 avrtools™ 2016/01/29 (금) 309 0
9 Arduino DUE based DDS Synthesizer avrtools™ 2016/01/24 (일) 187 0
8 QTouch ADC 근접검출 스위치 avrtools™ 2016/01/21 (목) 324 0
7 Arduino 음성인식 Speech/Voice Recognition avrtools™ 2013/09/14 (토) 1616 0
6 Arduino Uno로 만드는 3축 CNC avrtools™ 2013/09/10 (화) 2462 0
5 Arduino로 만드는 mySpectral 분광기 avrtools™ 2013/09/04 (수) 2013 0
4 8채널 12비트 ADC MCP3208 오실로스코프 avrtools™ 2012/03/29 (목) 418 0
3 교류저항 (impedance) 측정 AD5933 avrtools™ 2012/03/17 (토) 339 0
2 Arduino DMX512 수신기 제작 avrtools™ 2012/03/15 (목) 3590 0
1 TSL2561 조도 측정기의 제작 avrtools™ 2011/09/11 (일) 2568 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0