April 28, 2024

디바이스마트 미디어:

[66호] 원하는 색상으로 제어가 가능한 아두이노 IoT 스마트 무드등 키트 -

2021-06-25

★2021 ICT 융합 프로젝트 공모전 결과 발표! -

2021-05-12

디바이스마트 국내 온라인 유통사 유일 벨로다인 라이다 공급! -

2021-02-16

★총 상금 500만원 /2021 ICT 융합 프로젝트 공모전★ -

2021-01-18

디바이스마트 온라인 매거진 전자책(PDF)이 무료! -

2020-09-29

[61호]음성으로 제어하는 간접등 만들기 -

2020-08-26

디바이스마트 자체제작 코딩키트 ‘코딩 도담도담’ 출시 -

2020-08-10

GGM AC모터 대량등록! -

2020-07-10

[60호]초소형 레이더 MDR, 어떻게 제어하고 활용하나 -

2020-06-30

[60호]NANO 33 IoT보드를 활용한 블루투스 수평계 만들기 -

2020-06-30

라즈베리파이3가 드디어 출시!!! (Now Raspberry Pi 3 is Coming!!) -

2016-02-29

MoonWalker Actuator 판매개시!! -

2015-08-27

디바이스마트 레이저가공, 밀링, 선반, 라우터 등 커스텀서비스 견적요청 방법 설명동영상 입니다. -

2015-06-09

디바이스마트와 인텔®이 함께하는 IoT 경진대회! -

2015-05-19

드디어 adafruit도 디바이스마트에서 쉽고 저렴하게 !! -

2015-03-25

[29호] Intel Edison Review -

2015-03-10

Pololu 공식 Distributor 디바이스마트, Pololu 상품 판매 개시!! -

2015-03-09

[칩센]블루투스 전 제품 10%가격할인!! -

2015-02-02

[Arduino]Uno(R3) 구입시 37종 센서키트 할인이벤트!! -

2015-02-02

[M.A.I]Ahram_ISP_V1.5 60개 한정수량 할인이벤트!! -

2015-02-02

[Weller] 독점 이벤트!! 디지털 열풍기 12% 할인+사은품증정!!

1

 

[Weller] 독점 이벤트!! 디지털 열풍기 12% 할인+사은품증정!!
Hot Air Station WHA600KR 12%할인 : 554,000원 488,000원
열풍기 스탠드 F-203 무료증정!!

이벤트 보러가기 >>

 

430836

TCP링크 증정이벤트!!

4

 

TCP링크 증정이벤트!!
TCP링크의 VSCOM, GPS NETWORKING 제품을
10만원 이상 구매하면 새롭게 출시된!!
MicroUSB-멀티 1포트 [MicroUSB-1COM] 증정!!

이벤트 보러가기 >>

717009

[26호] ICT 융합 공모전 – 레이저모듈과 포토센서를 이용한 레이저하프 악기 제작

레이저하프 08

레이저하프 01

레이저모듈과 포토센서를 이용한 레이저하프 악기 제작

글 | 동양미래대학교 박창용, 권용선, 김준범, 이동건, 임지원, 홍동의

1. 작품개요
마이크로프로세서 보드 및 그 밖의 전자부품을 이용하여 기존의 현을 이용한 하프와는 별개로 레이저모듈과 포토센서를 이용하여 실제 현이 없는 하프를 제작하였다. 일상에서 쉽게 접해보지 못하는 악기인 하프를 제작함으로써 보다 다양한 악기를 체험하고자 하였으며 간단한 회로구성만으로 하프의 동작을 구현했다는 점을 볼 때 간단한 전자회로 예제 교육용으로도 사용이 가능할 것으로 본다.

2. 작품설명
동아리 내에서 아두이노 프로그래밍 학습차 MIDI 실드 실습을 하였는데 피아노와 같은 흔히 접해볼 수 있는 악기 말고 독특한 악기를 제작해보는 건 어떨까 고민하던 중, 현을 전자회로로 조작할 수 있는 것을 구상해 보았고, 일상에서 접하기 힘든 하프를 제작해 보기로 결정하였다.
본 레이저하프에는 아두이노 보드를 이용하여 프로그래밍하였다. 하프가 현이 많은 점을 미루어보아 센서를 정밀하게 동작시키기 위해 레이저모듈을 이용하였고, 그에 따른 센서는 포토센서로 하였다. 아두이노 보드에 MIDI실드를 이용하여 하프 음계 외에 다른 종류의 음계 표현이 가능하다.

2.1 주요동작 및 특징
하프의 현을 레이저로 표현했다는 것이 가장 큰 특장점이다. 적외선 발광 다이오드같은 타 발광 다이오드는 빛의 퍼짐 현상이 있어 정확한 조작을 필요로 하는 장비에는 적합하지 않다. 따라서 빛의 퍼짐현상이 적은 레이저 모듈을 이용하여 작품을 제작하였다. 이는 사용자가 악기를 다루는데 보다 정확하게 동작시킬 수 있게 도움을 준다.

레이저하프 02

2.2 전체 시스템 구성
2.2.1 구성 재료
아두이노 Mega 2560, MIDI Shield(VS1053b), 파워서플라이(UP15S05L, 입력: 100-240V, 출력: DC5V 3A), 외부스피커, 5V 레이저 모듈(40mA, 규격 17.3mm * 6mm), 포토트랜지스터 수광부(ST-1KLA), 시멘트저항 4.7Ω 10W, 탄소피막저항 4.7kΩ, 택트스위치

2.2.2 주요 부품 사진

레이저하프 03

2.2.3 알고리즘도

레이저하프 04

2.3 개발환경
Arduino의 Processing 언어 및 Arduino IDE Tool을 사용하였다. Processing 언어는 초보자도 쉽게 이해할 수 있는 장점이 있다. 다음은 레이저하프 프로그래밍을 하기위해 참고한 아두이노의 기본 예제이다.

void setup() {
Serial,begin(9600);
}

void loop() {
int sensorValue = analogRead(AO);
float voltage = sensorValue;
Serial.println(Voltage);
delay(200);
}

3. 단계별 제작과정
3.1 스피커를 제어하는 기본 레이저모듈 회로

레이저하프 05
PHOTO TR의 Collector 단자에 5V, Emitter 단자에 GND를 연결한 뒤 Base에 빛을 가해주면 Collector와 Emitter 사이에 전류가 흐르게 된다. 이를 이용하여 Emitter와 GND 사이에 높은 수치의 저항(여기선 4.7kΩ을 사용하였다.)을 연결하면 트랜지스터에 전류가 흐를 시 이 저항에 거의 모든 전압이 걸리기 때문에 저항에 DIGITAL IN 핀을 연결하여 사용하였다.
레이저 값을 받으면 DIGITAL IN 단자에 5V, 레이저 값을 받지 못하면(손으로 레이저를 가리면) DIGITAL IN 단자에 0V가 입력되어 이를 디지털 제어용으로 활용할 수 있었다.

레이저하프 06

5V 3A의 전원이 병렬 레이저 모듈과 센서 회로에 나뉘어 들어가기 때문에 실제 전류는 약 절반인 1.5A가 센서 회로에 공급하기로 설계하였으나 트랜지스터의 라이트 정격 전류가 최대 16mA인 것을 감안하여 실제로는 아두이노 내의 5V 및 GND 단자를 이용하여 센서의 전원을 공급하였다.

3.2 하드웨어 제작

레이저하프 07

레이저하프 08
테스트용으로 제작하였기 때문에 나무 등 튼튼한 재료로 제작하지는 않았다. 저렴하고 간단하게 테스트할 수 있도록 우드락을 겹겹이 붙여서 하프의 기본 틀을 제작하였다. 우드락의 재질이 튼튼하지만 나무처럼 단단하지 않아서 조금이라도 휘는 경우 레이저 길이 틀어져서 오류를 일으키는 점이 발생했던 것을 보아 다음 제작시에는 나무 등 우드락보다 더욱 튼튼한 재료를 사용할 생각이다.

3.3 아두이노 회로 연결

레이저하프 09
본 레이저하프에는 34개의 현을 구현하기 위한 34개의 센서 및 34개의 레이저 말고도 3개의 스위치를 추가하였다. 첫 번째 스위치는 MIDI 실드의 악기 종류 초기화 버튼, 두 번째 스위치는 악기 종류 위로 변경 버튼, 세 번째 스위치는 악기 종류 아래로 변경 버튼이다. MIDI Shield에서는 128가지의 악기를 사용할 수 있어 이를 이용하고자 하였다. 따라서 본 레이저하프에서 이 스위치를 이용하여 하프음 말고도 피아노 음 같은 여러 가지 음을 표현할 수 있다.

3.4 문제점
3.4.1 프로토타입의 사이즈 문제
이번에 제작한 테스트용 레이저하프는 사이즈가 작기 때문에 아두이노 기판을 포함한 브레드보드 및 기타 회로를 내부로 넣지 못하여 외관상 보기 좋지 않았다. 따라서 다음에 제작할 레이저하프에는 이를 고려할 생각이다.

3.4.2 하프 음계의 반음 표현
본 레이저하프는 반음을 프로그래밍하지 않고 기본음만 34가지 음을 프로그래밍하였다. 하지만 실제 하프에서는 페달을 이용하여 반음을 표현할 수 있는데, 이를 다른 스위치를 이용하여 반음을 소리낼 수 있는 프로그래밍을 제작 중에 있다. 이의 프로그램이 추가되면 실제 하프와 거의 흡사한 구동을 할 수 있을 것이라 생각한다.

3.4.2 하프의 음의 크기
본 레이저하프는 음의 크기가 제어되지 않는다. 따라서 이중 현을 프로그래밍하여 속도를 계산하여 음의 크기를 조절하는 프로그램도 모색중에 있다.

4. 기타
다음은 본 레이저하프에 프로그래밍된 소스코드이다.

#include <SoftwareSerial.h>
#define senU 5 // upper instruments select sensor
#define senD 6 // down instruments select sensor
#define senA 7 // initialize sensor
// ——————————

#define sen1 8 // 34
#define sen2 9 // 33
……(생략)
#define sen34 53 // 1

SoftwareSerial mySerial(2, 3); // (RX, TX)
#define defaultPatch 46 //악기 초기화 버튼 설정 악기번호

byte note = 0;
byte resetMIDI = 4;
byte byteData;

int patch = 0; //악기 대응, 연주될 악기 종류 (0~127: 기본 128 가지 선택가능)
int bn1 = 60; // “1do”
int bn2 = 62; // “ray”
……(생략)
int bn34 = 117;

int value1;
int value2;
……(생략)
int value34;
int valueU;
int valueD;
int valueA;

boolean bs1 = false;
boolean bs2 = false;
……(생략)
boolean bs34 = false;
boolean bsU = false;
boolean bsD = false;
boolean bsA = false;

void setup() {
pinMode(sen1, INPUT);
digitalWrite(sen1, HIGH);
pinMode(sen2, INPUT);
digitalWrite(sen2, HIGH);
……(생략)
pinMode(sen34, INPUT);
digitalWrite(sen34, HIGH);
pinMode(senU, INPUT);
digitalWrite(senU, HIGH);
pinMode(senD, INPUT);
digitalWrite(senD, HIGH);
pinMode(senA, INPUT);
digitalWrite(senA, HIGH);

Serial.begin(31250); // bit per sec
mySerial.begin(31250);

//Reset the VS1053
pinMode(resetMIDI, OUTPUT);
digitalWrite(resetMIDI, LOW);
delay(100);
digitalWrite(resetMIDI, HIGH);
delay(100);
patch = defaultPatch;
talkMIDI(0xb0, 0, 0);
talkMIDI(0xb0,20, 0);
talkMIDI(0xc0, patch, 0);
}

void loop() {
value1 = digitalRead(sen1);
value2 = digitalRead(sen2);
……(생략)
value34 = digitalRead(sen34);
valueU = digitalRead(senU);
valueD = digitalRead(senD);
valueA = digitalRead(senA);
if( !bs1 && !value1 ) {
noteOn(0, bn1, 100);
bs1 = true;
}
else if( bs1 && value1 ) {
noteOff(0, bn1, 0);
bs1 = false;
}
if( !bs2 && !value2 ) {
noteOn(0, bn2, 100);
bs2 = true;
}
else if( bs2 && value2 ) {
noteOff(0, bn2, 0);
bs2 = false;
……(생략)
if( !bs34 && !value34 ) {
noteOn(0, bn34, 100);
bs34 = true;
}
else if( bs34 && value34 ) {
noteOff(0, bn34, 0);
bs34 = false;
}
if( !bsD && !valueD ) {
patch–;
if( patch < 0 ) patch = 127;
talkMIDI(0xc0, patch, 0);
bsD = true;
}
else if( bsD && valueD ) {
bsD = false;
}
if( !bsU && !valueU ) {
patch++;
if( patch > 127 ) patch = 0;
talkMIDI(0xc0, patch, 0);
bsU = true;
}
else if( bsU && valueU ) {
bsU = false;
}
if( !bsA && !valueA ) {
patch = defaultPatch;
talkMIDI(0xb0, 0, 0);
talkMIDI(0xb0,20, 0);
talkMIDI(0xc0, patch, 0);
bsA = true;
}
else if( bsA && valueA ) {
bsA = false;
}
if(Serial.available() > 0)
{
byteData = Serial.read();
Serial.write(byteData);
}

}

void noteOn(byte channel, byte note, byte attack_velocity) {
talkMIDI( (0×90 | channel), note, attack_velocity);
}

void noteOff(byte channel, byte note, byte release_velocity) {
talkMIDI( (0×80 | channel), note, release_velocity);
}

void talkMIDI(byte cmd, byte data1, byte data2) {
mySerial.write(cmd );
mySerial.write(data1 );

if( (cmd & 0xF0) <= 0xB0)
mySerial.write(data2 );

}

[26호]KB4500 출시

케이벨 01

케이벨 01

KB4500 출시

앰프 모듈과 AVR모듈 전문 업체인 (주)케이벨에서 고감고 마이크 앰프 모듈(KB4500)을 출시했다. KB4500은 초소형으로 기존 PCB 모듈 타입에서 알루미늄 케이스를 적용하여 사용시 발생할 수 있는 오차 발생을 최소화하였고 편리성을 극대화했다.
광범위 DC 전압(DC 2.7V ~ DC 13V) 사용이 가능하도록 설계 되었으며, 사용자의 응용 적용을 쉽게하기 위하여 사용 주파수 대역을 두 종류로 구분하여 출시한다.
이번에 출시되는 KB4500은 반 영구적 사용이 가능하게 설계되었고 특히 주변 환경 변화에 따른 특성 변화가 적어 실험실의 Reference 마이크로 적용이 가능하다. 자세한 사항은 디바이스마트 홈페이지에서 확인 가능하다

제품 특징
· 사용 전원 : DC 2.7V ~ DC 13V
· Frequency Response Bandwidth ( – 6.0 dB ) :
A 형 : 20Hz ~ 20KHz
B 형 : 200Hz ~ 4000Hz
· 외곽 Size : Dia 10mm , Length 23mm
· 증폭 Gain : 60 dB (1000배)
· 최대 출력 전압 (THD 5%, DC 13 V) : P-P 10V

TEL. 02-6443-4703
kbell@k-bell.co.kr

[26호] ICT 융합 공모전 -스마트 선풍기

선풍기 01

선풍기 16

글 | 경상대학교 전자공학과 김지완, 안민수, 김형진, 강수빈

‘스마트’를 이름 붙인 이유는 기존의 선풍기보다 똑똑하기 때문이다. 기존의 선풍기는 사용자가 직접 전원을 ON/OFF 시키므로 켜놓은 채 방치시키기도 한다. 그리고 현재 온도가 몇 도인지 알 수 없어서 사람이 덥다고 느낄 때마다 ON/OFF 시켜야한다. 이러한 한계점을 극복하기 위해 자동으로 ON/OFF되고, 현재 온도를 알 수 있는 선풍기를 제작하여 ‘스마트 선풍기’라고 이름을 지었다.

1. 작품 개요

선풍기 01

본 작품은 센서에 의해 자동으로 제어되는 선풍기이다. 본 작품은 일반모드, 적외선 센서를 이용한 인체 감지 모드, 온도 센서를 이용한 온도 감지 모드로 모두 3가지 모드에서 작동할 수 있다. 일반적인 선풍기의 한계를 뛰어넘고 ICT와 융합하여 효율성을 증대시킨 작품이다. 본 작품은 에너지를 절약함으로써 여름철 전력난을 완화할 수 있고, PC방이나목욕탕, 관공서와 같은 공공시설에서 활용가치가 높다는 것이 장점이다.

2. 작품 설명
2.1. 주요 동작 및 특징
2.1.1. MODE 1

선풍기 02

컨트롤 박스의 첫 번째 스위치이다. 이 스위치를 올리면 일반적인 선풍기와 같이 동작한다. 온도와 상관없이 사용하고 싶을 때, 사람이 없어도 동작하게 할 때 사용한다.

2.1.2. MODE 2

선풍기 03

컨트롤 박스의 두 번째 스위치이다. 이 스위치를 올리면 적외선 센서로 제어되는 인체감지 모드로 동작한다.

선풍기 04

사람이 앞에 있으면 적외선 센서인 LHI-878이 감지하여 선풍기를 동작시킨다. 센서가 동작하는지는 센서 옆에 있는 센서 동작 램프를 통해 알 수 있다. 센서의 동작 효율을 높이기 위해서 적외선 센서 전용 캡을 씌웠다. 적외선 센서의 특성상 연속적으로 감지하는 것이 아니라 딜레이가 없으면 동작이 연속적으로 되지 못한다. 그 문제를 해결하기 위하여 약 3초 정도의 시간 지연을 줌으로써 동작 오류를 완벽하게 제거하였다.

※ 시간 지연 루틴
void delay(unsigned int i)
{
while(i–);
}

2.1.3. MODE 3

선풍기 05

컨트롤 박스의 세 번째 스위치이다. 이 스위치를 올리면 온도센서로 제어되는 온도 감지 모드로 동작한다.

선풍기 06

미리 설정된 2개의 기준온도(상한 임계 온도, 하한 임계 온도)에 따라 붉은색 LED와 노란색 LED가 켜진다. 본 작품에서는 상한 임계 온도를 26도, 하한 임계 온도를 22도로 설정했다. 만약 현재 온도가 26도 이상이 되면 위의 사진과 같이 붉은색 LED가 켜지면서 선풍기가 켜진다. 현재 온도가 상한 임계 온도 이하로 떨어지게 되면 곧바로 붉은색 LED와 선풍기가 꺼지게 된다. 그리고 하한 임계 온도 이하로 떨어지게 되면 노란색 LED가 켜진다. 하한 임계 온도는 선풍기의 동작에는 관여하지 않지만 온도가 상당히 떨어졌을 때를 표시 할 수 있으며 나아가 히터를 작동시키는데 활용 할 수 있다.

※ 상한 임계 온도, 하한 임계 온도 설정
set_TH(0×00,0×34); // TH값 전송(+26℃)
set_TL(0×00,0x2c); // TL값 전송(+22℃)

2.1.4. 작품의 특징
디자인적인 측면에서 많은 노력이 들어갔다. 선풍기 부분의 헬로키티의 눈에 5색 LED를 부착했고 본체 부분은 작은 박스 안에 기판들을 집적하여 보기 좋게 만들었다.

2.2 전체 시스템 구성

선풍기 07
MCU는 89S52를 사용했고 적외선 센서와 온도 센서로부터 정보를 받아서 선풍기를 제어하는 방식이다. 세 가지 MODE의 제어를 위해 스위치를 3개 만들었다. 7-세그먼트로 현재 온도를 확인할 수 있다.

본 작품의 상세 설명

선풍기 08


본 작품 내부 모습

선풍기 09

본 작품 옆면의 스위치

선풍기 10

2.3 개발 환경
개발언어 : C언어
Tool : Keil uVision4, AVR Studio 4
사용시스템 : 89S52

3. 단계별 제작 과정
● 스케줄

선풍기 11

● 아이디어 회의

선풍기 12
실용적이면서 동시에 요즘 트렌드인 ICT에 적합한 작품이 없을까 하다가 물의 온도를 자동으로 바꿔주는 수도꼭지와 인체를 감지는 스마트 선풍기 2개를 두고 고민했다. 하지만 아이디어 회의 결과, 복지적인 측면에서 장애인들에게 실용성이 높고 이슈가 되는 전력난 해소에도 긍정적일 것 같아서 스마트 선풍기로 결정했다.

● 내용 구체화
세 가지 기능, 적외선 센서로 사람의 유무를 판단해 작동되는 기능과 온도를 표시해주고 정해놓은 온도에 따라서 선풍기가 작동하는 기능과 일반적인 선풍기처럼 작동하는 기능이 있다. 그리고 선풍기에 5색 led를 설치해 작동 여부를 쉽게 구분하고 미적인 측면과 재미를 강조하기로 했다. 전체 동작을 순서도로 작성하여 실제 제작과 프로그래밍을 할 때 알기 쉽도록 했다.

● 회로 설계

선풍기 13
온도측정을 위해서 LM35DZ 온도 센서를 사용하려고 했지만, LM35DZ에서 받은 아날로그 신호를 다시 디지털로 바꾸기 위해서는 다른 칩이 많이 필요해 집적도가 떨어지는 문제가 발생해서 DS1620으로 대체했다. 적외선 센서는 많이 쓰이는 LHI-878을 사용했다.

● 프로그래밍
선풍기가 작동하는 온도인 상한 임계 온도는 26℃로 하한 임계 온도는 22℃로 설정했다. 그리고 적외선 센서의 감지 시간 딜레이를 넣지 않아 동작이 불안정한 것을, 약 3초의 딜레이를 프로그래밍에 추가해서 동작을 자연스럽게 만들었다.

● 회로 제작

선풍기 14
효율성을 높이기 위해서 2명씩 짝을 이뤄서 1조는 회로를 제작했고 2조는 케이스를 제작했다. 우리는 제작에 사용할 선풍기를 구입하기 전에 컴퓨터에 사용되는 쿨링팬을 연결하여 테스트를 했다. 작동이 잘 되는 것을 보고 선풍기를 구입했고 테스트를 했지만 실제 선풍기를 작동시키기 위한 전류는 훨씬 커야 했다. 그 문제를 해결하기 위해 트랜지스터로 전류를 증폭했다. 적외선 센서와 온도 센서로부터 입력을 받는 부분에 동작이 불안정 했는데 중간에 버퍼를 사용해서 문제를 해결했다.

● 케이스 제작
하얀색 바탕의 상자를 제작해 스위치 3개와 온도센서, 적외선센서, 세그먼트가 나올 수 있는 구멍을 만들었다. 적외선 센서는 중앙에 배치해 인체감지에 용이하게 했고 바로 밑에 온도표시를 하는 세그먼트를 보이게 했다. 그리고 선풍기의 작동여부를 알기 쉽게 하기 위해서 인형 모형의 눈에 5색 led 2개를 장착했다.

4. 부품리스트

선풍기 15

 

5. 참고 문헌
· 임석구, 디지털논리회로, 한빛미디어
· Behzad Razavi, 아날로그 CMOS 직접회로 설계, 한빛미디어
· Robert L,Boylestad,Louis Nashelsky, 전자회로, 홍릉과학출판사
· 강경일, OP-Amp회로실험, MC Graw Hill
· 임석구, C언어로 배우는 8051 마이크로프로세서, 한빛미디어
· 디바이스마트, http://www.devicemart.co.kr/
· 뉴티씨, http://www.newtc.co.kr/
· 전자공작, http://cafe.naver.com/circuitsmanual
· 당근이의 AVR 갖고 놀기, http://cafe.naver.com/carroty/

6. 소스코드

#include <reg51.h>

sbit DQ=P1^0; // DS1620의 직렬 데이터 입출력
sbit CLK=P1^1; // DS1620의 CLK
sbit RST=P1^2; // DS1620의 RST
sbit minus=P1^3; // 영상 또는 영하 디스플레이
sbit degree=P1^4; // 소수점 이하 디스플레이(0 또는 5)
sbit inn1=P3^0; // 모드1 입력
sbit inn2=P3^1; // 모드2 입력
sbit inn3=P3^2; // 모드3 입력
sbit outt=P3^4; // 출력
void delay(unsigned int i) // 시간 지연
{
while(i–);
}

void ds_write(unsigned char t_data) // 명령어 쓰기(89S52→DS1620)
{
unsigned char i;
for (i=0; i<8; i++) {
CLK=0; // CLK=Low
delay(10);
DQ=t_data & 0×01; // 명령어 쓰기
CLK=1; // CLK=High
delay(10);
t_data >>= 1; // 오른쪽으로 1비트 시프트
}
}

void ds_write_9bit(unsigned char t_sign, unsigned char t_data)
{ // 9비트 데이터 쓰기(89S52→DS1620)
unsigned char i;
for (i=0; i<8; i++) {
CLK=0; // CLK=Low
delay(10);
DQ=t_data & 0×01; // 데이터 쓰기
CLK=1; // CLK=High
delay(10);
t_data >>= 1; // 오른쪽으로 1비트 시프트
}
CLK=0; // CLK=Low
delay(10);
DQ=t_sign; // 부호비트
CLK=1; // CLK=High
delay(10);
}

unsigned char ds_read(void) // 데이터 읽기(DS1620→89S52)
{
unsigned char i, g_data, temp;
g_data=0×00;
temp=0×01; // 0000 0001B

for (i=0; i<8; i++) {
CLK=0; // CLK=Low
delay(10);
if (DQ==1) g_data |= temp; // 데이터 읽기
CLK=1; // CLK=High
delay(10);
temp=temp<<1;
}
return g_data;
}

// 3 Alarm Thermostat Operation
void set_TH(unsigned char th_sign, unsigned char th_data)
{
RST=1; // RST=High
delay(10);
ds_write(0×01); // TH 레지스터에 데이터를 쓰는 명령
ds_write_9bit(th_sign,th_data); // TH 데이터 전송(LSB 먼저)
RST=0; // RST=Low
delay(10); // 지연
delay(2000);
}

void set_TL(unsigned char tl_sign, unsigned char tl_data)
{
RST=1; // RST=High
delay(10);
ds_write(0×02); // TL 레지스터에 데이터를 쓰는 명령
ds_write_9bit(tl_sign,tl_data); // TL 데이터 전송(LSB 먼저)
RST=0; // RST=Low
delay(10); // 지연
delay(2000);
}

// 9비트 데이터(2 Bytes)로부터 온도계산
// data2: 부호, data1: 온도
void display_temp(unsigned char data2, unsigned char data1)
{
unsigned char temp, d100, d10, d1;

if (data2==0×01) { // 0000 0001B→영하표시
minus=0;
data1=~data1;
data1 += 1; // 2의 보수
} else {
minus=1; // 영상 디스플레이
}

temp=data1 & 0×01; // 0.5℃ 인지 0.0℃ 인지 점검
data1 >>= 1; // 실제온도=data1을 오른쪽으로 시프트
d100=data1/100;
d10=(data1%100)/10;
d1=(data1%100)%10;

if (temp) degree=1; // 7-세그먼트에 소수점 이하 값인 5를 디스플레이
else degree=0; // 7-세그먼트에 소수점 이하 값인 0을 디스플레이
P2=(d10<<4) | d1; // 7-세그먼트에 온도 디스플레이
}
void main(void)
{
unsigned char get_data1, get_data2;

// 초기화 및 구성 레지스터 동작모드 설정
// 1 Shot 동작모드(0×03), 연속동작모드(0×02)
RST=0; // 초기화, RST=Low
delay(10);
CLK=1; // CLK=High
delay(10);

RST=1; // RST=High
delay(10);
ds_write(0x0c); // 구성 레지스터에 데이터를 쓰는 명령
ds_write(0×02); // 구성 레지스터에 쓸 데이터 전송(연속 동작모드)
RST=0; // RST=Low
delay(10); // 지연
delay(2000);

set_TH(0×00,0×34); // TH값 전송(+26℃)
set_TL(0×00,0x2c); // TL값 전송(+22℃)

RST=1; // RST=High
delay(10);
ds_write(0×22); // 온도 변환 중지 명령
RST=0; // RST=Low
delay(10);

RST=1; // RST=High
delay(10);
ds_write(0xee); // 온도 변환 시작 명령
RST=0; // RST=Low
delay(10);
delay(50000); // 변환을 위해 지연
delay(50000);

do {
RST=1; // RST=High
delay(10);
ds_write(0xaa); // 온도 데이터 읽기 명령
get_data1=ds_read(); // 온도 데이터
get_data2=ds_read(); // 부호
RST=0; // RST=Low
delay(10);
display_temp(get_data2,get_data1);
// 온도를 계산하고 7-세그먼트에 디스플레이

if((inn1==0) || (inn3==0)) {
outt=0;
}
else if(inn2==0) {
outt=0;
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000);
delay(50000); // 약 3초 지연
}
else {
outt=1;
}
} while(1);

}

7. 회로도

스마트선풍기 회로도(jpg파일)