- Arduino 계량기 작동
- Arduino 기반 계량기에 필요한 구성 요소
- Arduino 기반 계량기-회로도
- 점선 Perfboard에 회로 만들기
- Arduino 기반 계량기 용 인클로저 구축
- Arduino 계량기-코드
디지털로드 스케일은 현대 엔지니어링 및 설계의 또 다른 기적입니다. 예, 우리는 대부분의 식료품 점과 다른 장소에서 흔히 볼 수있는 체중계 에 대해 이야기하고 있지만 체중계 가 어떻게 작동하는지 궁금한 적이 있습니까? 이 질문에 답하기 위해이 프로젝트에서는로드 셀과 그 작동 방식을 살펴볼 것입니다. 마지막으로, 우리는 최대 10kg의 무게를 측정 할 수 있는 HX711 무게 센서 로 휴대용 Arduino 기반로드 스케일을 구축 할 것 입니다.
이 계량기 는 대량으로 품목을 포장하는 지역 상점에 적합합니다. 상업용 제품과 마찬가지로 체중계에는 체중계를 0으로 만드는 제로 버튼이 있습니다. 또한 측정 무게를 설정하는 옵션이 있으며, 측정 무게가 설정 무게에 도달하면 부저가 빠르게 울리고 설정 무게가 측정 무게와 같을 때 멈 춥니 다. 이렇게하면 사용자는 소리 만 듣고 디스플레이를 볼 필요없이 포장 할 수 있습니다. 이것은 매우 간단한 프로젝트이므로 Arduino 및 스트레인 게이지 로드셀과 같은 구성 요소를 사용하여 매우 쉽게 구축 할 것입니다. 따라서 더 이상 지체하지 않고 바로 시작하겠습니다.
이전 기사에서 우리는 인기있는 HX711 로드셀 증폭기 모듈을 사용하여 이메일 경고 및 웹 모니터링 기능이있는 Raspberry Pi 기반 무게 센서 및 IoT 스마트 컨테이너와 같은 프로젝트를 만들었습니다. 따라서 그것이 귀하의 요구 사항인지 확인하십시오.
Arduino 계량기 작동
이 프로젝트의 주요 구성 요소는 로드 셀 과 HX711로드 셀 증폭기 모듈 입니다. 보시다시피 한쪽은 10kg으로 표시되어 있습니다. 또한로드 셀 위에 일종의 흰색 보호 접착제가 나오고 네 가지 색상의 전선이 나오는 것을 볼 수 있습니다. 흰색 보호 접착제 아래의 비밀과이 4 색 와이어의 기능을 기사 뒷부분에서 밝혀줍니다.
로드 셀은 힘 또는 압력을 전기 출력으로 변환하는 변환기입니다. 그것은 양면이 있습니다. 오른쪽과 왼쪽이 있고 알루미늄 블록으로 만들어졌습니다. 보시다시피 중간에 큰 구멍을 뚫어 소재가 얇아졌습니다. 그렇기 때문에 마운트 측에 하중이 가해지면 변형되는 지점입니다. 이제 오른쪽 셀이베이스에 장착되고 왼쪽이 부하가있는 곳이라고 가정 해 보겠습니다.이 구성 은 가운데에있는 거대한 구멍 때문에 스트레인 게이지로드 셀을 변형시킵니다.
로드 셀의로드 측에 하중이 가해지면 상단 부분이 장력을 받고 하단 부분이 압축됩니다. 그래서 알루미늄 막대가 왼쪽에서 아래쪽으로 구부러져 있습니다. 이 변형을 측정하면 알루미늄 블록에 가해진 힘을 측정 할 수 있습니다. 이것이 바로 우리가 할 일입니다.
이제 질문은 흰색 보호용 접착제 안에 무엇이 있습니까? 이 보호용 접착제 내부에는 스트레인 게이지 라고하는 매우 얇은 탄성 부품이 있습니다.. 스트레인 게이지는 스트레인을 측정하는 데 사용되는 구성 요소입니다. 이 구성 요소를 자세히 살펴보면 두 개의 연결 패드를 볼 수 있으며 반복적 인 편향이있는 전도성 와이어 패턴이 있습니다. 이 전도성 와이어에는 정의 된 저항이 있습니다. 구부리면 저항 값이 변할까요? 따라서 스트레인 게이지의 한쪽이 장착되고 고정됩니다. 알루미늄 바의 다른쪽에 무게를두면 스트레인 게이지가 구부러져 저항이 변경됩니다. 이것이 실제로 어떻게 발생합니까? 스트레인 게이지의 전도성 패턴은 구리로 만들어지며,이 와이어는 특정 면적과 길이를 가지므로이 두 장치는 와이어의 저항을 제공합니다. 전선의 저항은 전류의 흐름에 반대합니다. 이제이 와이어의 면적이 작아지면더 적은 전자가 통과 할 수 있다는 것은 더 낮은 전류를 의미합니다. 이제 면적을 늘리면 도체의 저항이 증가합니다. 이 와이어에 약간의 힘이 가해지면 면적이 늘어나면서 동시에 작아지고 저항이 증가합니다. 그러나이 저항 변화는 매우 낮습니다. 스트레인 게이지를 늘리면 저항이 증가하고 압축하면 저항이 낮아집니다. 힘을 측정하려면 저항을 측정해야합니다. 저항을 직접 측정하는 것은 변화가 매우 적기 때문에 항상 실용적인 것은 아닙니다. 따라서 저항을 측정하는 대신 전압을 쉽게 측정 할 수 있습니다. 따라서이 경우 게이지 출력을 저항 값에서 전압 값으로 변환해야합니다.이 와이어에 약간의 힘이 가해지면 면적이 늘어나면서 동시에 작아지고 저항이 증가합니다. 그러나이 저항 변화는 매우 낮습니다. 스트레인 게이지를 늘리면 저항이 증가하고 압축하면 저항이 낮아집니다. 힘을 측정하려면 저항을 측정해야합니다. 저항을 직접 측정하는 것은 변화가 매우 적기 때문에 항상 실용적인 것은 아닙니다. 따라서 저항을 측정하는 대신 전압을 쉽게 측정 할 수 있습니다. 따라서이 경우 게이지 출력을 저항 값에서 전압 값으로 변환해야합니다.이 와이어에 약간의 힘이 가해지면 면적이 늘어나면서 동시에 작아지고 저항이 증가합니다. 그러나이 저항 변화는 매우 낮습니다. 스트레인 게이지를 늘리면 저항이 증가하고 압축하면 저항이 낮아집니다. 힘을 측정하려면 저항을 측정해야합니다. 저항을 직접 측정하는 것은 변화가 매우 적기 때문에 항상 실용적인 것은 아닙니다. 따라서 저항을 측정하는 대신 전압을 쉽게 측정 할 수 있습니다. 따라서이 경우 게이지 출력을 저항 값에서 전압 값으로 변환해야합니다.저항이 낮아질 것입니다. 힘을 측정하려면 저항을 측정해야합니다. 저항을 직접 측정하는 것은 변화가 매우 적기 때문에 항상 실용적인 것은 아닙니다. 따라서 저항을 측정하는 대신 전압을 쉽게 측정 할 수 있습니다. 따라서이 경우 게이지 출력을 저항 값에서 전압 값으로 변환해야합니다.저항이 낮아질 것입니다. 힘을 측정하려면 저항을 측정해야합니다. 저항을 직접 측정하는 것은 변화가 매우 적기 때문에 항상 실용적인 것은 아닙니다. 따라서 저항을 측정하는 대신 전압을 쉽게 측정 할 수 있습니다. 따라서이 경우 게이지 출력을 저항 값에서 전압 값으로 변환해야합니다.
우리는 휘트 스톤 다리의 도움으로 이것을 할 수 있습니다. 브리지가 균형을 이루는 경우 스트레인 게이지를 Wheatstone 브리지에 배치하고 중간 지점의 전압은 0이어야합니다 (이전에는 Wheatstone 브리지의 작동 방식을 설명한 프로젝트를 만들었습니다. 원하는 경우 확인할 수 있음) 주제에 대해 더 많이 알고 있음). 스트레인 게이지가 저항을 변경하면 브리지의 불균형이 발생하고 전압도 변경됩니다. 따라서 이것은 휘트 스톤 브리지가 저항 변화를 전압 값으로 변환하는 방법입니다.
그러나이 전압 변화는 여전히 매우 작기 때문에이를 높이려면 HX711 모듈 을 사용해야합니다. HX711은 24 비트 차동 ADC이므로 매우 작은 전압 변화를 측정 할 수 있습니다. 0에서 2까지의 값을 제공합니다.
Arduino 기반 계량기에 필요한 구성 요소
이 프로젝트를 가능한 한 간단하게 만들기 위해 우리는 지역 취미 상점에서 찾을 수있는 매우 일반적인 구성 요소를 사용했습니다. 아래 이미지는 구성 요소에 대한 아이디어를 제공합니다. 또한 다음과 같은 BOM (Bill of Materials)이 있습니다.
- 로드셀 (10kg 로드셀 사용)
- HX 711 증폭기 모듈
- Arduino Nano
- I2C LCD 16X2 – I2C 호환
- 1k 저항 -2 Nos
- LED -2 개
- 부저
- 일반적인 PCB
- 7.4V 배터리 (휴대용을 원하는 경우)
- LM7805 전압 조정기
Arduino 기반 계량기-회로도
로드셀에는 빨강, 검정, 녹색 및 흰색의 4 개의 와이어가 있습니다. 이 색상은 제조업체에 따라 다를 수 있으므로 데이터 시트를 참조하는 것이 좋습니다. 빨간색을 HX711 보드의 E +에 연결하고, 검정색을 E-에 연결하고, 흰색을 A +에 연결하고, 녹색을 A-에 연결하고, 보드의 시계를 D4와 D5에 각각 연결합니다. 누름 버튼의 한쪽 끝을 D3, D8, D9에 연결하고 다른 쪽 끝을 접지에 연결합니다. I2C LCD가 있으므로 SDA를 A4에 연결하고 SCL을 A5에 연결합니다. LCD, HX711 및 Arduino의 접지를 접지에 연결하고 VCC도 Arduino 의 5Vpin에 연결 합니다. 모든 모듈은 5V에서 작동하므로 LM7805 전압 조정기를 추가했습니다. 휴대용으로 사용하지 않으려면 USB 케이블을 사용하여 Arduino에 직접 전원을 공급할 수 있습니다.
점선 Perfboard에 회로 만들기
우리는 모든 구성 요소를 공통 점선 퍼프 보드에 납땜했습니다. 우리는 암 헤더를 사용하여 Arduino 및 ADC를 회로 기판과 납땜했으며 전선을 사용하여 모든 푸시 버튼과 LED를 연결했습니다. 모든 납땜 공정이 완료된 후 LM7805에서 적절한 5V가 나오는지 확인했습니다. 마지막으로 회로의 전원을 켜고 끄는 스위치를 넣었습니다. 모든 작업이 끝나면 아래 이미지와 같습니다.
Arduino 기반 계량기 용 인클로저 구축
보시다시피 로드셀에는 나사산이 몇 개 있으므로베이스 플레이트에 장착 할 수 있습니다. 스케일의베이스로 PVC 보드를 사용할 것입니다.이를 위해 먼저 PVC 보드에서 20 * 20cm 정사각형과 4 개의 20 * 5 직사각형을 자릅니다. 그런 다음 단단한 접착제를 사용하여 모든 조각을 붙이고 작은 인클로저를 만들었습니다.
푸시 버튼, LED 및 LCD를 그 위에 배치해야하므로 한쪽을 고정하지 않았습니다. 그런 다음 저울 상단에 플라스틱 보드를 사용했습니다. 이 설정을 영구적으로 만들기 전에지면에서로드 셀까지 충분한 공간이 있는지 확인하여 구부릴 수 있도록해야합니다. 따라서로드 셀과베이스 사이에 나사와 너트를 배치하고 추가했습니다. 로드 셀과 상단 부분 사이에 플라스틱 스페이서가 있습니다. 우리는 둥근 플라스틱 시트를 균형의 최고로 사용했습니다.
그런 다음 LCD, LED 및 푸시 버튼 을 전면 패널에 배치하고 모든 것을 긴 절연 전선으로 연결했습니다. 배선 작업을 마친 후 전면 패널을 약간 기울여서 메인베이스에 붙 였으므로 LCD에서 값을 매우 쉽게 읽을 수 있습니다. 마지막으로 저울 측면에 메인 스위치를 부착했습니다. 이것이 우리가 체중계를 위해 몸을 만든 방법 입니다.
아이디어로 디자인 할 수 있지만 이미지와 같이 로드셀을 배치하는 것을 잊지 마십시오.
Arduino 계량기-코드
이제 디지털 스케일 의 빌드 프로세스를 마쳤으므로 프로그래밍 부분으로 넘어갈 수 있습니다. 쉬운 프로그래밍을 위해 HX711 라이브러리, EEPROM 라이브러리 및 LiquidCrystal 라이브러리를 사용할 것입니다. 공식 GitHub 저장소에서 HX711 라이브러리를 다운로드하거나 도구 > 라이브러리 포함 > 라이브러리 관리 로 이동 한 다음 HX711 키워드를 사용하여 라이브러리를 검색하고 라이브러리를 다운로드 한 후 Arduino ide에 설치합니다.
먼저로드 셀을 보정하고 해당 값을 EEPROM에 저장해야합니다.이를 위해 file> examples> HX 711_ADC로 이동 한 다음 보정 코드 를 선택합니다. 코드를 업로드하기 전에 균형을 안정된 평면에 놓습니다. 그런 다음 코드를 Arduino에 업로드하고 직렬 모니터를 엽니 다. 그런 다음 전송 속도를 572600으로 변경합니다. 이제 모니터가 가중치를 가져 가도록 요청합니다. t를 누르고 입력해야합니다.
이제 저울에 알려진 무게를 배치해야합니다. 제 경우에는 194gm입니다. 알려진 무게를 배치 한 후 직렬 모니터에 무게를 입력하고 Enter 키를 누릅니다.
이제 직렬 모니터는 값을 EEPROM에 저장할 것인지 묻습니다. 예를 선택하려면 Y를 입력합니다. 이제 직렬 모니터에서 무게를 볼 수 있습니다.
HX711 라이브러리의 예제 스케치에서 개발 한이 프로젝트의 주요 코드입니다. 이 프로젝트의 코드는 아래에서 다운로드 할 수 있습니다.
코딩 섹션에서 먼저 세 라이브러리를 모두 추가했습니다. HX711 라이브러리는로드 셀 값을 가져 오기위한 것입니다. EEPROM은 Arduino ide의 내장 라이브러리로 EEPROM에 값을 저장하는 데 사용되며 LiquidCrystal 라이브러리는 l2C LCD 모듈 용입니다.
#포함
그런 다음 다른 핀과 할당 된 값에 대해 정수를 정의했습니다. HX711_ADC 로드셀 기능은 Dout 및 클럭 핀을 설정하기위한 것입니다.
const int HX711_dout = 4; const int HX711_sck = 5; int tpin = 3; HX711_ADC LoadCell (HX711_dout, HX711_sck); const int calVal_eepromAdress = 0; 긴 t; const int Up_buttonPin = 9; const int Down_buttonPin = 8; float buttonPushCounter = 0; float up_buttonState = 0; float up_lastButtonState = 0; float down_buttonState = 0; float down_lastButtonState = 0;
설정 섹션에서 먼저 직렬 모니터를 시작했습니다. 이것은 디버깅 전용입니다. 그런 다음 핀 모드를 정의하고 모든 푸시 버튼은 입력으로 정의됩니다. Arduino PULL UP 기능을 사용하여 핀을 일반적으로 논리적 하이로 설정합니다. 따라서 우리는 외부 저항을 사용하고 싶지 않습니다.
pinMode (tpin, INPUT_PULLUP); pinMode (6, OUTPUT); pinMode (12, OUTPUT); pinMode (Up_buttonPin, INPUT_PULLUP); pinMode (Down_buttonPin, INPUT_PULLUP);
다음 코드는 I2C LCD 설정을위한 것입니다. 먼저 LCD.print () 함수를 사용하여 환영 텍스트를 표시하고 2 초 후에 lcd.clear ()를 사용하여 디스플레이를 지 웠습니다 . 즉, 처음에는 디스플레이에 ARDUINO BALANCE 를 환영 텍스트로 표시 하고 2 초 후에 측정 중량을 지우고 표시합니다.
lcd.init (); lcd.backlight (); lcd.setCursor (0, 0); lcd.print ("ARDUINO BALANCE"); lcd.setCursor (0, 1); lcd.print ("측정하자"); 지연 (2000); lcd.clear ();
그런 다음 loadCell.begin () 함수를 사용하여 로드셀에서 값을 읽기 시작했습니다. 그 후 보정 된 값에 대한 EEPROM을 읽고 EEPROM.get () 함수를 사용하여 수행 합니다. 즉, EEPROM 주소 에 보정 스케치를 사용하여 이미 값을 저장 했으므로 해당 값을 다시 가져 옵니다.
LoadCell.begin (); EEPROM.get (calVal_eepromAdress, calibrationValue);
루프 섹션에서 먼저 LoadCell.update ()를 사용하여로드 셀의 데이터를 사용할 수 있는지 확인합니다. 사용 가능한 경우 해당 데이터를 읽고 저장합니다.이를 위해 LoadCell.getData ()를 사용 합니다. 다음으로 저장된 값을 LCD에 표시해야합니다. 이를 위해 LCD.print () 함수를 사용했습니다. 또한 설정된 가중치를 인쇄합니다. 무게 설정은 푸시 버튼 카운터 의 도움으로 설정됩니다. 마지막 섹션에서 설명했습니다.
if (LoadCell.update ()) newDataReady = true; if (newDataReady) { if (millis ()> t + serialPrintInterval) { float i = LoadCell.getData (); lcd.setCursor (0, 0); lcd.print ("set wei:"); lcd.setCursor (9, 0); lcd.print (buttonPushCounter); lcd.setCursor (14, 0); lcd.print ("GM"); lcd.setCursor (0, 1); lcd.print ("무게:"); lcd.setCursor (9, 1); lcd.print (i); lcd.setCursor (14, 1); lcd.print ("GM");
다음으로 tare 값을 설정합니다. 먼저 digitalRead () 함수를 사용하여 tare 푸시 버튼의 상태를 읽습니다. 상태가 낮 으면 무게를 0으로 설정합니다. 이 체중계의 용기 기능 은 판독 값을 0으로 만드는 것입니다. 예를 들어, 물건을 담은 그릇이 있다면, 순 중량은 그릇의 무게 + 물건의 무게가됩니다. 짐을 싣기 전에 로드셀에 그릇이있는 용기 버튼을 누르면 바스켓의 무게가 무거워지고 무게를 측정 할 수 있습니다.
if (digitalRead (tpin) == LOW) {LoadCell.tareNoDelay ();
이제 부저 지연 및 LED 상태 설정과 같은 다양한 표시에 대한 조건을 설정해야합니다. if 조건 을 사용하여 수행 했습니다. 총 세 가지 조건이 있습니다. 먼저 설정 무게와 측정 무게의 차이를 계산 한 다음 해당 값을 변수 k에 저장합니다.
float k = buttonPushCounter-i;
1. 설정 무게와 측정 무게의 차이가 50gms 이상이면 부저가 200 밀리 초 지연 (느리게) 울립니다.
if (k> = 50) { digitalWrite (6, HIGH); 지연 (200); digitalWrite (6, LOW); 지연 (200); }
2. 설정 무게와 측정 무게의 차이가 50 미만이고 1g 이상이면 부저가 50 밀리 초 지연 (빠른 속도)으로 신호음을 울립니다.
if (k <50 && k> 1) { digitalWrite (6, HIGH); 지연 (50); digitalWrite (6, LOW); 지연 (50); }
3. 측정 무게가 설정 값보다 크거나 같을 때 녹색 LED가 켜지고 부저와 적색 LED가 꺼집니다.
if (i> = buttonPushCounter) { digitalWrite (6, LOW); digitalWrite (12, HIGH); }
(버튼 누름을 계산하기위한) 설정 무게를 설정하기위한 두 가지 더 많은 void 함수 ()가 있습니다.
누를 때마다 설정 값을 10gms 씩 증가시키는 기능. 핀이 낮 으면 버튼이 눌려지고 값이 10gms 씩 증가하는 경우 Arduino 의 digitalRead 기능을 사용하여 수행됩니다.
up_buttonState = digitalRead (Up_buttonPin); if (up_buttonState! = up_lastButtonState) { if (up_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter + 10; }
비슷하게, 체크 다운은 누를 때마다 설정 값을 10gm 씩 감소시키는 것입니다.
down_buttonState = digitalRead (Down_buttonPin); if (down_buttonState! = down_lastButtonState) { if (down_buttonState == LOW) { bPress = true; buttonPushCounter = buttonPushCounter-10; }
이것은 프로그래밍 부분의 끝을 표시합니다.
이 Arduino 기반 전자 저울은 최대 10kg의 무게를 측정하는 데 적합합니다 (더 높은 정격 로드셀을 사용하여이 한계를 늘릴 수 있음). 이것은 원래 측정치에 대해 99 % 정확합니다.
이 Arduino 기반 LCD 무게 균형 기계 회로에 대한 질문이 있으시면 댓글 섹션에 게시하십시오. 감사합니다!