MAX471 전압, 전류 센서

지금은 단종된 칩인 MAX471로 전압과 전류를 측정해 봅니다.

전압과 전류를 측정해서 무엇에 쓰냐구요?

배터리로 동작하는 장치의 경우 배터리가 일정 전압 밑으로 떨어지면 신호를 보내주는 장치가 필요합니다. 이럴때에 이 센서로 사용자에게 신호를 보내면 충전할 타이밍을 알수가 있겠지요.

#define vtpin A0
#define atpin A5
#define Arduino_Voltage 5.0


void setup() {
	pinMode(vtpin, INPUT);
	pinMode(atpin, INPUT);
	Serial.begin(9600);
}


void loop() {
	int v = analogRead(vtpin);
	int a = analogRead(atpin);
	double voltage = v * (Arduino_Voltage / 1023.0) * 5;
	double current = a * (Arduino_Voltage / 1023.0);
	Serial.print(voltage);
	Serial.println('v');
	Serial.print(current);
	Serial.println('A');
	delay(3000);
}

아두이노 아날로그핀으로도 전압 측정은 가능한데 3V-36V, 3A까지 측정이 가능한 이 센서를 사용하면 좀 더 쉽고 정확하게 측정이 가능합니다. 이 센서 단독으로 사용하는건 의미가 없고 배터리로 작동되는 장치의 경우 이 센서와 결합해서 추가 기능을 넣을수 있겠네요.

avrdude: stk500_getsync(): not in sync: resp=0x00


avrdude: stk500_getsync(): not in sync: resp=0x00 에러가 나오는 경우가 있어서 찾아보니 여러가지 해결책이 있긴 한데 그중에서 ATmega328P(Old Bootloader)인 경우에 대해서 써 봅니다.

얼마전에 Arduino Nano 보드를 우연히 얻은게 있어서 사용해 볼려고 하니 제목같은 에러가 나오더라구요. Attempt 10번 하고서 안된다고 에러가 뜨네요. 문제는 이 보드가 오랜된 보드라서 아두이노 IDE에서 processor에서 선택을 ATmega328P(Old Bootloader)로 해야 제대로 업로드가 됩니다. 한마디로 부트로더가 오래된 재고품이라는 거죠. 확인해 보니 아두이노 펌웨어가 전부 업데이트 되었나 봅니다. 가지고 있는거 전부 업데이트가 필요하네요.

해결책은 그냥 부트로더를 구우면 되는데 이게 USBasp가 필요합니다. 아니면 아두이노 2개로 하나는 ArduinoISP를 올려서 다른 하나를 업데이트 하는 방식입니다. 제가 USBasp를 가지고 있기 때문에 이 방식으로 업데이트 해 봅니다.

HM-10 블루투스 셋업

– HM-10 TX pin – Arduino D8
– HM-10 RX pin – Arduino D9
– HM-10 GND – GND
– HM-10 VCC – 5V

AltSoftSerial 라이브러리로 소프트웨어 시리얼 연결합니다.

#include <AltSoftSerial.h>
AltSoftSerial BTserial; 
 
char c=' ';
boolean NL = true;
 
void setup() 
{
    Serial.begin(9600);
    Serial.print("Sketch:   ");   Serial.println(__FILE__);
    Serial.print("Uploaded: ");   Serial.println(__DATE__);
    Serial.println(" ");
 
    BTserial.begin(9600);  
    Serial.println("BTserial started at 9600");
}
 
void loop()
{
    // Read from the Bluetooth module and send to the Arduino Serial Monitor
    if (BTserial.available())
    {
        c = BTserial.read();
        Serial.write(c);
    }
 
 
    // Read from the Serial Monitor and send to the Bluetooth module
    if (Serial.available())
    {
        c = Serial.read();
 
        // do not send line end characters to the HM-10
        if (c!=10 & c!=13 ) 
        {  
             BTserial.write(c);
        }
 
        // Echo the user input to the main window. 
        // If there is a new line print the ">" character.
        if (NL) { Serial.print("\r\n>");  NL = false; }
        Serial.write(c);
        if (c==10) { NL = true; }
    }
}

HM-10에 씌어져 있는 비닐랩을 벗겨서 멀티미터로 전압을 측정해 보니 따로 Voltage divider는 필요 없네요.

스마트폰 앱인 BLE Scanner을 다운받아 연결해서 테스트 해보면 됩니다.

microPython 설치하기

  1. python을 설치합니다.
  2.  microPython사이트 에서 본인이 가지고 있는 버전을 다운 받습니다.
  3. cmd창으로 들어가 pip install esptool 로 esptool 설치
  4. esptool.py port COM3 erase_flash 로 플래시 삭제
  5. esptool.py –port COM3 –baud 460800 write_flash 0x1000 esp32-20190122-v1.9.4-782-geb446ec22.bin 로 새로운 펌웨어 설치(파일 이름은 다릅니다)

위와 같이 하면 정상적으로 설치가 된겁니다. putty로 해당 serial 포트에 115200 baud로 접속하면 확인이 가능합니다.

위 화면에서 파이썬 코드 작성해서 실행 가능합니다. 보드에서 위에 처럼 코드 작성하는 것보다는 에디터에서 파이썬 코드 작성해서 저장한 다음에 보드에 업로드해서 실행해 보는게 방법적으로 더 좋습니다.

pip install adafruit-ampy 로 ampy 설치

pip install rshell, pip install pyreadline 로 rshell 설치

위에 두가지 중에 하나 사용해서 프로그램을 보드에서 실행하거나 복사할 수 있습니다.

위에 무한 반복되게 깜박이는 프로그램입니다. sublime text로 작성해서 ampy로 업로드 했습니다. 전원 켜질때 마다 실행되게 할려면 main.py로 복사해 넣으면 됩니다.

아두이노의 C 코드보다 보기도 좋고 깔끔해서 속도가 문제되는 경우가 아니면 마이크로파이썬 추천합니다.

BMP280 센서와 ESP8266(NodeMcu) 한글 작업

bmp280 센서로 온도와 기압 측정하는 셋팅해보았습니다.

bme280 센서는 습도까지 측정이 가능하기 때문에 구입하실거면 bme280으로 사시는게 좋습니다. dht22센서만 구입해서 온습도만 측정해도 되긴 합니다만 기압센서로 날씨측정까지 하면 더 좋겠지요.

bmp280은 SPI로 연결했고 oled는 I2C로 연결했습니다.

- BMP280 connections
D5 - SCK
D6 - SDO (MISO)
D7 - SDI (MOSI)
D8 - CS

- OLED connections
D1 - SCL
D2 - SDA

센서로 측정해서 나오게 하는건 문제가 없는데 한글 나오게 할려고 작업하다보니 좀 복잡해졌습니다. 한글 부분은 다음에 따로 포스팅하겠습니다.

ATtiny85 IR Decoder

작은 크기의 IR 디코더를 만들기 위해 셋팅을 했습니다. 처음에는 칩을 양쪽에 설치해가면서 테스트 했는데 번거로워서 아예 우노와 연결해서 프로그래머로 사용했습니다.

IR 칩은 모토롤라 핸드폰에 같이 왔던 Dock을 분해해서 설치했습니다.(납땜해서 핀 설치)

#include "tiny_IRremote.h"
#include <Tiny4kOLED.h>

int RECV_PIN = 3;
IRrecv irrecv(RECV_PIN);
decode_results results;
// ============================================================================

void setup() {
  irrecv.enableIRIn(); // Start the receiver
  
  oled.begin();
  oled.setFont(FONT8X16);
  oled.clear();
  oled.on();
  oled.print(F("IR Starting"));
}

void loop() {
  if (irrecv.decode(&results)) { 
    oled.clear();
    oled.print(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100);

}

납땜흡입기 – DIY

겨울에 납땜 할려니깐 환기도 안되는 실내에서 납 연기 때문에 문제가 되더라구요. 하코꺼 살려고 하니깐 5만원이 넘는 가격 때문에 비싸서 못 사겠더라구요. 그래서 DIY로 만들기로 결정

구입한 물품입니다.

네이버 쇼핑에서 한장에 1,500원에 판매 – 배송비 때문에 여러장 구입
컴퓨터 케이스 뒷쪽에 들어가는 덕트입니다만 이걸로 팬과 필터 설치하기로 결정 – 최저가는 7,500원
마트에서 냄비 받침대로 3,900원에 구입
  • 120x38mm 팬과 팬 컨트롤러 구입(네이버 쇼핑)
  • 12V 어댑터는 전에 쓰던 모토롤라 휴대폰 충전기로 사용
  • 받침용 꺽쇠는 마트에서 1,000원에 구입

납 연기가 빠져나가지 못하게 필터 2장을 넣었습니다. 테스트 해보니깐 잘 빨려 들어가네요. 소음은 팬 컨트롤러로 조정하기 때문에 문제가 없습니다. 그냥 컴퓨터 케이스에 있는 25mm짜리 팬으로 컨트롤러 없이 사용하셔도 될거 같습니다. 여기에 추가로 on/off 스위치 넣고 케이블 정리하면 끝나겠네요.

비용을 최소한으로 할려면 배송비 포함해서 2만원정도면 만들수 있습니다. 저는 팬과 컨트롤러까지 구입해서 3만원정도 나왔네요.