DynamicRC 광팬 커뮤니티에 오신 것을 환영합니다!
DynamicRC 광팬 커뮤니티

게시판 통합검색 help
subject/ name/ content/ comment

공지사항 자유게시판 QnA 제작일지 비행일지
RC전자공작 MCU STUDY IR·RF 자료실 Link 옛날 프로젝트룸

* *

 아두이노 이용한 첫번째 응용-전압계를 만들어 보자

2009-06-09 10:04:37, Hit : 14380

작성자 : 윤영준
- SiteLink #1 : 80069783977
제블로그에서 퍼왔습니다. 블로그만큼 이쁘게 되질 않네요...
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

맨날 Led만 켜란법 있나..응용력이 떨어지면 맨날 삽질만 하는거 같다.

그래서 첫번째로 전압계에 도전한다. 5V미만이라면 아래 준비물의 저항도 필요 없다. 바로 곶으면 된다. 하지만 3셀정도는 스고 있으니 리폴리 3셀 측정도 할수 있도록 저항을 준비했다. 저항의 오차가 작을 수록 정밀하게 전압을 측정할수 있고 DVM을 이용한 값과 비교해 보종해주면 정밀도를 향상 시킬수 있다.

 

준비물 :S3V3 , 저항 47k,10k-각1개,점프선

너무 단촐하네요. LCD에 함 보대 나는데 LCD가 여기서 제공하는 라이버리로 되질 않네 뭐가 문젠지..

그래서 터미널 프로그램으로 컴퓨터에서 받아 보기로 한다.

간단히 알아야할 전기 상식

저항 분배 법칙이다.

MCU에 5V이상을 넣어주면 마이무그서 죽어뿐다. 많이 묻다 아이가~~~

그래서 5V이상 전압을 주려면 저항을 써서 전압을 다운시켜주고 계산은 비율만큼 곱해서 출력을 하면 된다.

아두이노에서 아날로그포트1번을 이용해 컴퓨터로 통신하도록 한다. 넘 간단 하다 못해...감동적이다.

이걸 왜 시각광고하는쪽에서하는지 이해가 된다. 넘 쉬워서..전자 전공이 아니라도 가능한거 같다.

이두아노와 비슷한 것으로 와이어, 프로세싱이있고 빵판에 부품배치를 도와주는 프릿츠라는 것도 있다.

 

분배법칙부터...

저항 분배

  


두 개의 저항기는 오른쪽 다이어그램에 보이는 것처럼 연결된다.

출력 전압 Vout는 아래처럼 Vin과 연관된다:

자, 그럼 프로그램을 함 꾸며보자...

아두이노의 명령어는 대소문자 구별을 함으로 소문자로만 쓰면 에러발생

ex)pinMode와 pinmode는 다름.

// variables for input pin and control LED
int analogInput = 1;//Vout핀 연결
int LEDpin = 13;//프로그램이 동작하는걸 보여준다.
int prev = LOW;
int refresh = 1000;
float vout = 0.0;
float vin = 0.0;
float R1 = 47000.0; // 저항 R1

float R2 = 10000.0; //저항 R2!

int value = 0;
void setup()

{
    pinMode(analogInput, INPUT);// 핀모드 선언

    pinMode(LEDpin, OUTPUT);// 핀모드 선언   

   Serial.begin(19200);// 시리얼포트 통신 초기와
}
void loop(){
     value = analogRead(analogInput);// 1번핀 값을 읽음
     if (value >= 1023) {
     Serial.println("MAX!!");
     delay(refresh);
     return;
}
    else if (value <= 0) {
        Serial.println("MIN!!");
        delay(refresh);
        return;
}
if (prev == LOW)

    {
        prev = HIGH;
    }

else {
        prev = LOW;
       }
digitalWrite(LEDpin, prev);//디지털 포트 13번 핀 깜빡이게
vout = (value * 5.0) / 1024.0; //10비트 분해능이므로 1024로 나눠줌
vin = vout / (R2/(R1+R2));//저항분배법칙 으로 계산
Serial.print(vin); //입력되는 전압값 출력

Serial.println(" volt");
delay(refresh);
}

//부가 설명 다이해하시겠지만

시리얼로 뿌려주는게 무지 쉽게 해결된다.  Serial.begin(), Serial.print()만 알면 된다.

찐하게 표시한게 아두이노 전용명령어 이다.

 

그럼 결과적으로 전압을 제대로 나오나 측정해본 결과 실제 전압은 12.5V이고 아두이노가 측정한 값은 12.53V여서 아주 잘 측정되고 있다.


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
다음 응용과제는 RPM미터 입니다. IR수광 발광 소자를 이용하여 프롭 회전수 측정하는 것을 해보겠습니다. 꼭해보싶었는데... 인터럽터 라이브러리도 지원되네요. 그럼 즐거운 하루되세요

* 정재광님에 의해서 게시물 이동되었습니다 (2009-06-09 20:28)




이용승
잘봤습니다. 소숫점 아래까지 나오니 정확하네요. 셀밸런싱 기능도 추가하시면 좋겠습니다. 2009-06-09
13:32:27

수정 삭제
정재광
윤영준님, 이런 건 강좌란에다가...... 고맙습니다. 몇 줄 안되는 코드로 이런 것이 가능하군요. 다음엔 LCD 에 뿌려주세요~ 2009-06-09
20:27:52

수정  
찌파
정말 짧고 간단하지만 강력함을 보여주는 예제네요. 저항 분배공식도 요긴하게 쓰이던데 잘봤습니다. 2009-06-09
23:32:41

수정  

【 찌파의 AVR 강좌 8 】PWM출력을 이용한 LED 밝기 조절 2/3 [3]
【 찌파의 AVR 강좌 7 】PWM출력을 이용한 LED 밝기 조절. 1/3 [4]

Copyright 1999-2020 Zeroboard / skin by 또미
Copyright 2003-2010 DYNAMICRC.COM All rights reserved