전압계를 만드는 것은 훌륭한 학습 경험입니다. 이 프로젝트 구축을 마치면 전압계가 어떻게 작동하는지 더 잘 이해하고 옴 법칙에 대한 지식을 새로 고침하고 Arduino 플랫폼이 얼마나 강력한지 실제로 보게 될 것입니다. 이 프로젝트를 기반으로 하고 얻은 경험을 바탕으로 앞으로 더 복잡한 프로젝트를 쉽게 구축할 수 있을 것입니다.
이 프로젝트를 사용하여 다양한 전자 회로의 DC 전압을 측정하거나 Arduino 프로젝트의 배터리 상태를 쉽게 모니터링할 수 있습니다. 또한 얻은 지식을 바탕으로 자신의 전압 센서를 쉽게 구축하여 필요에 맞는 맞춤형 전압계를 만들 수 있습니다.
이 프로젝트를 빌드하는 데 필요한 부품은 다음과 같습니다.
<울>
프로젝트 비용이 매우 저렴합니다. 약 10$입니다.
이 센서 모듈이 어떻게 작동하는지 봅시다. 이 전압 센서는 매우 간단하며 0-25V의 DC 전압을 측정할 수 있습니다. 단 2개의 저항으로 구성되어 있습니다! 원하는 경우 쉽게 자체 제작할 수 있으며 이미 제작된 것을 원할 경우 이 모듈 센서를 1달러 미만으로 구입할 수 있습니다. 이것이 작동하는 방식입니다. 이 센서는 실제로 전압 분배기입니다. 분압기 회로는 한 쌍의 저항기를 사용하여 더 높은 전압을 취하고 더 낮은 전압으로 변환하는 매우 일반적인 회로입니다. 출력 전압을 계산하는 공식은 옴의 법칙을 기반으로 합니다. 첨부된 이미지를 확인해주세요.
이 모듈에서 R1은 30.000옴이고 R2는 7500옴입니다. 입력에 25V를 넣고 계산하면 출력에서 5V가 나옵니다! 그리고 이것이 Arduino의 아날로그 핀이 처리할 수 있는 최대 전압입니다. 따라서 입력에서 25V를 초과하면 Arduino의 아날로그 핀을 태울 것입니다. 입력에 0V를 넣으면 출력에서 0V가 됩니다. 따라서 입력에서 0-25V의 전압을 입력하면 출력에서 0-5V의 전압을 얻게 됩니다.
Arduino Uno에는 10비트 ADC가 있으므로 이 센서를 사용하여 얻을 수 있는 분해능은 25mV입니다. Arduino Due를 사용하면 12bit ADC를 가지고 있기 때문에 더 나은 해상도를 얻을 수 있습니다. 그러나 물론 Arduino Due 보드는 3.3V 로직 레벨을 사용하고 그 이상의 전압은 아날로그 핀을 파괴하기 때문에 자체 전압 센서를 구축해야 합니다.
Nokia 5110은 내 Arduino 프로젝트에서 가장 좋아하는 디스플레이입니다.
Nokia 5110은 원래 휴대폰 화면용으로 설계된 기본 그래픽 LCD 화면입니다. 저전력 CMOS LCD 컨트롤러/드라이버인 PCD8544 컨트롤러를 사용합니다. 이 때문에 이 디스플레이는 인상적인 전력 소비를 가지고 있습니다. 켜져 있지만 백라이트는 비활성화되어 있을 때 0.4mA만 사용합니다. 절전 모드일 때 0.06mA 미만을 사용합니다! 이것이 이 디스플레이를 제가 가장 좋아하는 이유 중 하나입니다.
PCD8544는 직렬 버스 인터페이스를 통해 마이크로컨트롤러에 인터페이스합니다. 따라서 디스플레이를 Arduino와 함께 사용하기가 매우 쉽습니다. 8개의 전선만 연결하고 다음 라이브러리를 사용하면 됩니다. http://www.rinkydinkelectronics.com/library.php?id=47
이 인상적인 라이브러리는 Arduino 커뮤니티가 자신의 라이브러리로 앞으로 나아갈 수 있도록 많은 노력을 기울인 Henning Karlsen이 개발했습니다.
Nokia 5110 LCD 디스플레이를 Arduino와 함께 사용하는 방법에 대한 자세한 자습서를 준비했습니다. 이 튜토리얼에서 해당 비디오를 첨부했으며 디스플레이에 대한 유용한 정보를 제공할 수 있으므로 주의 깊게 시청하는 것이 좋습니다.
이제 모든 부품을 함께 연결해 보겠습니다.
먼저 전압 센서를 연결합니다. 핀이 3개뿐입니다. 그 중 2개만 연결하면 됩니다.
다음 단계는 Nokia 5110 LCD 디스플레이를 연결하는 것입니다.
이제 모든 부분을 함께 연결했으므로 코드를 로드하기만 하면 됩니다. 스플래시 화면이 몇 초 동안 표시된 다음 전압 측정을 시작할 수 있습니다.
프로젝트 코드는 2개의 파일로 구성되어 있습니다.
<울>
첫 번째 파일 ui.c에는 Nokia 5110 LCD 디스플레이에 표시되는 2개의 아이콘 이진 값이 있습니다. 나중에 나타나는 전압계에 대한 스플래시 아이콘과 사용자 인터페이스가 있습니다. 아두이노 프로젝트에 커스텀 그래픽을 로드하는 방법을 알아보기 위해 제가 준비한 첨부 영상을 봐주세요.
프로젝트의 주요 코드는 매우 간단합니다. Nokia 5110 라이브러리를 포함해야 합니다. 다음으로 몇 가지 변수를 선언합니다. 디스플레이를 초기화하고 시작 화면을 3초 동안 표시합니다. 그 후 ui 아이콘을 한 번 인쇄하고 1초마다 센서에서 아날로그 값을 읽습니다.
모든 마법은 다음 함수에서 발생합니다.
이 위의 방법은 센서에서 값을 읽고 이를 0~25V의 전압으로 변환합니다. 맞춤형 전압 센서를 사용하는 경우 센서의 저항 값을 반영하기 위해 R1 및 R2 변수를 변경해야 합니다.
센서에서 값을 읽은 후 코드는 값을 문자열로 변환하여 화면에 표시합니다.
이 튜토리얼에 코드를 첨부했습니다. 최신 버전의 코드를 다운로드하려면 프로젝트 웹페이지를 방문하세요. educ8s.tv/arduino-voltmeter-project/
이제 코드가 로드되었으므로 일부 배터리로 전압계를 테스트할 수 있습니다. 충전식 AA 배터리, 18650 배터리 및 대용량 12V 알람 배터리로 테스트합니다.
첨부된 사진에서 볼 수 있듯이 전압계는 잘 작동합니다. 비교를 위해 내 멀티 미터도 사용했습니다. 당사의 "수제" 전압계 판독값은 전문 멀티미터 판독값과 매우 유사합니다. 대단하지 않나요?
보시다시피, 이 프로젝트는 오픈 소스 하드웨어와 소프트웨어가 무엇을 할 수 있는지에 대한 훌륭한 시연입니다. 몇 분 안에 이렇게 인상적인 프로젝트를 만들 수 있습니다! 이 프로젝트는 초보자에게 이상적이며 처음에 말했듯이 이 프로젝트는 훌륭한 학습 경험입니다.
이 프로젝트에 대한 귀하의 의견을 듣고 싶습니다. 유용하다고 생각하십니까? 이 프로젝트에 구현할 수 있는 개선 사항이 있습니까? 아래 의견 섹션에 의견이나 아이디어를 게시하십시오!
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드"> // 내가 사용하고 있는 라이브러리는 다음과 같습니다. http://www.rinkydinkelectronics.com/library .php?id=47LCD5110 lcd(8,9,10,12,11);extern unsigned char BigNumbers[];extern uint8_t ui[];extern uint8_t startScreen[];부동 전압 =0.0;int sensorPin =A0; 플로트 센서 값 =0.0f; 문자열 전압 문자열 ="0.0"; 정수 문자열 길이 =0; 부동 vout =0.0; 부동 빈 =0.0; 부동 R1 =30000.0; 부동 소수점 R2 =7500.0; 무효 설정() { Serial.begin(9600); lcd.InitLCD(); lcd.drawBitmap(0, 0, 시작 화면, 84, 48); lcd.update(); 지연(3000); lcd.setFont(BigNumbers); 지연(1000);} 무효 루프() { lcd.clrScr(); lcd.drawBitmap(0, 0, UI, 84, 48); 전압 =readVoltage(); Serial.println(전압); 전압 문자열 =문자열(전압, 1); 문자열길이 =전압문자열.길이(); 디스플레이 전압(문자열 길이); lcd.update(); delay(1000);} float readVoltage(){ sensorValue =analogRead(sensorPin); vout =(센서값 * 5.0) / 1024.0; 빈 =vout / (R2/(R1+R2)); return vin;} 무효 displayVoltage(int length){ switch(length) { 경우 3:lcd.print(voltageString,14,19); 부서지다; 사례 4:lcd.print(voltageString,2,19); 부서지다; 기본값:lcd.print(전압 문자열,2,19); 부서지다; }} ui.cC/C++
사용자 인터페이스 데이터#include const unsigned char ui []PROGMEM ={0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xF1, 0x01, 00x1 0xD1, 0x01, 0x01,0x81, 0xF1, 0x11, 0x11, 0xC1, 0xE1, 0x11, 0x11, 0x11, 0x11, 0x11, 0x31, 0xE1, 0xC1, 0x1, 0x 하게 0x11 0x11을, 0xF1, 0xF1, 0x11을,하게 0x11 0x31로 회신,하는 0x01, 0x01로, 0x01,0x01,는 0x81이 0x61, 0x31로 회신, 0xF1, 0xC1,하는 0x01, 0x01로, 0x01로, 0xC1, 0xE1, 0x21, 0x11을,하게 0x11 0x11을, 0x31,0x31, 0x01, 0x11, 0xF1, 0xF1, 0x91, 0x91, 0x91, 0x31, 0xC, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0x 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,0xC0, 0xC3, 0xC0, 0xC0, 8xC0, 8xC3, 0xC0, 0xC0, 0xC0, 0xC0 0xC0, 0xC8, 0xCF, 0xCF, 0xC8, 0xC8, 0xC8, 0xCC, 0xC0, 0xC0, 0xC8, 0xCF, 0xCF, 0xCF, 1xCF, 0xC8, 0xC0,0xC0, 0x80,0 0xCE, 0xC8, 0xC0, 0xC3, 0xC7, 0xCC, 0xC8, 0xC8, 0xC9, 0xCF, 0xC7, 0xC1, 0xC8, 0xCF, 0xCF, 0xC8, 0xC8, 0xC8, 0xCC, 0xC0, 0xC0, 0xC0,0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0x00, 0x00 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00,0x00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0xE0, 0xE0, 0xE0, 0xE0, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x20, 0x60, 0xE0, 0xE0, 0x 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00,0x00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1F, 0x7F, 0xFF, 0xFF, 0xF8, 0xE0,0x00 0, 0x00, 0xC0, 0xF0, 0xFE, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,0xFF, 0x00, 0x00,00 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00,0x00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00, 0x00, 0x00,0x01, 0x0F, 0x3F, 0xFF, 0xFF, 0xFC, 0xF0, 0xFE, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00,0 을 0x80, 0x80을 0x80에, 0x80을 0x80에, 0x80을 0x80에, 0x80을 0x80에, 0x80,0x80, 0x80을 0x80에, 0x80을 0x80에, 0x80을 0x80에, 0x80을 0x80에, 0x80을 0x80에, 0x80을 0x80에, 0x80을 0x80에, 0x80,0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x83, 0x 0x80, 0x80, 0x80, 0x80, 0x80,0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 시작 화면 []PROGMEM, ={0x0x 0x00, 0x00, 0x00, 0x80, 0xF0, 0xFC, 0xFC, 0xFC, 0xFC,0xFC, 0x7C, 0x1C, 0x0,0x04, 0x00, 0x20, 0xE0, 00xE ,는 0x60, 0x20에,가 0x20, 0x20에, 0x60으로, 0xc0과, 0x80으로,가 0x20, 0xE0, 0xE0,가 0x20, 0x00으로, 0 × 00, 0 × 00, 0 × 00, 0x00,0xE0, 0x60으로,가 0x20, 0xE0, 0xE0,가 0x20, 0x60으로, 0xE0, 0x00으로 , 0 × 00, 0 × 00, 0xE0, 0xE0, 0xE0, 0 × 00, 0x00,0x00, 0x80으로, 0xc0과,는 0x60, 0x20에,가 0x20, 0x20에,는 0x60, 0xE0, 0x00으로,가 0x20, 0xE0, 0xE0,가 0x20, 0x20에, 0x20,0x60, 0x00으로는 , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0x0,0x0,0,0x0,0xFF, 0xFF,0x0F, 0x3F, 0x0 , 0x07 인, 0x3F입니다, 0x38로, 0x38로, 0x07,0x00, 0 × 00, 0x0F의, 0x1f이, 0x30에,가 0x20, 0x20에,가 0x20, 0x30에, 0x1f이, 0x0F의,가 0x20, 0x3F입니다, 0x3F입니다, 0x20에, 0x20,0x30, 0x38로, 0 × 00, 0 × 00 , 0x00, 0x00, 0x20, 0x3F, 0x3F, 0x20, 0x00, 0x00, 0x20, 0x38, 0x27, 0x04,0x04, 0x27, 0x3F, 0x 0x3C, 0x20, 0x0F, 0x1F, 0x30, 0x20, 0x20, 0x24, 0x3C, 0x3C, 0x04, 0x20, 0x3F, 0x3F, 0x22, 0x22, 00x2 0xE0, 0xF8, 0xFE, 0xFF, 0xFF, 0x3F, 0x0F, 0x83, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 00xE0 는 0x08, 0xF8, 0x18, 0xF8, 0xE0, 0 × 00, 0xE0, 0x18, 0xF8, 0xF8, 0x08,0x08, 0xF8, 0xF8, 0x88의, 함께 0x88, 0x88의, 0x18, 0x00으로, 0 × 00, 0x38로, 0x18, 0x08에서, 0xF8, 0xF8, 0x08, 0x18,0x38, 0x08, 0xF8, 0xF8, 0x88, 0x88, 0x88, 0x18, 0x00, 0x00, 0x, 0x08, 0x88, 0xF8, 0x88, 0x 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x7C, 0x3F,0x3F, 0x3F, 0x1F, 0x, 0x1F, 0x1E, 0x0F, 0x0F, 0x 0x1f이,은 0x03, 0x00으로, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 즉 0x08, 0x0F의, 즉 0x08, 0x00으로, 0x07 값, 0x07 인, 0x00,0x08, 0x0F의, 0x0F의, 즉 0x08, 0x08에서, 0x0F의, 0x0F의, 즉 0x08, 0x08에서, 0x08, 0x08, 0x0E, 0x00, 0x00, 0x00, 0x08,0x0F, 0x0F, 0x08, 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x , 0x0E, 0x00으로, 즉 0x08, 0x0F의, 0x0F의, 즉 0x08, 0x01로,은 0x03, 0x06 일, 0x0C, 즉 0x08, 0x08에서, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00,0x00, 0 × 00, 0 × 00, 0 × 00, 0 × 00이 , 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0xc0과, 0xc0과,을 0x80, 0xE0, 0xFE로, 0x7F의, 0x9F,에는 0x87, 0x81 등, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00이 , 0 × 00, 0x00,0x00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00,0x00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00이 , 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00,0x00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00이 , 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00,은 0x03, 0x7F의, 0x7F의, 0x3F입니다, 0x1f이, 0x0F의,은 0x03, 0x01로, 0 × 00, 0 × 00, 0 × 00이 , 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00,0x00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0 × 00, 0x00,0x00, 0x00으로는 , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x000,