유속계. Arduino에서 포토레지스터와 HD44780 LCD 디스플레이를 사용한 작업의 예


32:20 - 펌웨어 16 및 18용 알고리즘
36:50 - 펌웨어 변수
40:40 - 홀 센서 시험

여기에 설명된 레귤레이터를 조립하고 테스트한 후: https://shenrok.blog...t=1489156293398
주어진 속도를 유지하는 펌웨어 설치를 시작할 수 있습니다. 하지만 먼저 홀 센서 문제를 살펴 보겠습니다.
타코제너레이터를 홀 센서로 교체하는 것은 전혀 어렵지 않습니다. 이에 대해서는 영상 5:48에서 자세히 설명하겠습니다. 그런데 어느 것을 넣을까요? 디지털 홀 센서, 바람직하게는 바이폴라가 필요합니다. 2배 더 많은 신호를 생성하기 때문입니다. 그리고 이것은 저속에서 매우 중요합니다. 이게 내 엔진에 있는 거야 봄 여름 시즌441 .

고려해 봅시다 PID_12:
스케치 시작 부분에는 필요한 값을 입력해야 하는 줄이 있습니다.

int obMax = 6000; //최대 속도 입력

float kImp = 120; //10회전당 펄스 수를 입력합니다.

첫 번째 줄에는 필요한 최대 회전 수를 입력합니다. 두 번째 - 최소한. 세 번째 줄에는 샤프트 10회전당 센서의 펄스 수를 입력합니다. 네 번째 줄에는 최소 속도 전류를 제한하는 숫자를 입력해야 합니다. 최소 회전수와 적용 하중에 따라 달라집니다. 그리고 다섯 번째는 펌웨어 6 번에서 엔진이 회전하기 시작하는 숫자입니다 (우리는 이에주의했습니다).
다음으로 가장 중요한 문제가 나옵니다. PID 제어기의 계수를 구성(선택)해야 합니다. 그들은 스케치의 19번째 줄에 있습니다:
PID myPID(&입력, &출력, &설정점, 0.01 , 0.2 , 0 , 직접);

검색은 여러 구성 방법을 제공하며 어떤 것을 사용할 수 있습니다. 하지만 솔직히 말해서 저는 이 레귤레이터가 별로 마음에 들지 않았습니다. 아니면 내가 설정하는 데 인내심이 없었을 수도 있습니다.

고려해 봅시다 _16:
스케치의 주요 변수는 PID 컨트롤러와 동일합니다.

int obMin = 200; //최소 속도 입력


int minzn = 115; // 회전이 시작되는 트라이악의 최소값입니다.
int ogrmin = 70 ; // 트라이악을 최소 속도로 제한합니다.
int mindimming = 80; //기계가 걸렸을 때의 트라이액 값(초기 임펄스)

그리고 같은 방식으로 설치됩니다. 그런데 2가지 의미가 추가되었습니다. 이것 기계가 걸렸을 때 트라이액 값(초기 임펄스) 이렇게 선택됩니다. 펌웨어 6번에서는 샤프트가 유휴 상태가 아닌 한 샤프트에 최소한의 작은 부하를 가합니다. 그리고 우리는 레귤레이터를 회전시키기 시작합니다. 샤프트가 회전하기 시작하는 숫자를 기록해 둘 필요가 있습니다. 기계에 초기 자극을 주려면 이 값이 필요합니다. 숫자는 매우 임의적이며 약간의 허용 오차를 허용합니다. 그리고 구성과 선택이 필요한 주요 변수는 다음과 같습니다. 마이너스 및 플러스 속도 허용 오차. 이는 엔진 회전이 어느 정도의 한계 내에서 안정화되는지를 의미합니다. 우리는 유휴 상태와 부하 상태에서 서로 다른 속도로 엔진이 갑자기 움직이지 않고 회전하는 최소값을 찾습니다. 이 펌웨어는 이미 지정된 제한 내에서 우수한 속도 안정화를 제공하며 아마도 이것만으로도 충분할 것입니다. 정확한 속도 안정화가 필요한 경우 다음 재봉으로 넘어갑니다.

고려해 봅시다 _18:

모든 값은 이전 펌웨어에서 전송됩니다.

int obMin = 200; //최소 속도 입력
int obMax = 9000; //최대 속도 입력
int kImp = 120; //10회전당 펄스 수를 입력합니다.
int minzn = 115; // 회전이 시작되는 트라이악의 최소값입니다.
int ogrmin = 70 ; // 트라이악을 최소 속도로 제한합니다.
int mindimming = 80; //기계가 걸렸을 때의 트라이액 값(초기 임펄스)
int 입장 = 200 ; //마이너스와 플러스의 회전 허용
int razgon = 50; //가속도 변수 1 - 100

가속도, 즉 부드러움의 값만 추가되었습니다. 값이 1이면 안정화가 원활하게 이루어지며, 값이 증가할수록 가속도가 더 심해집니다. 상한은 매우 크지만 100 이후(저의 경우)에는 변화가 없습니다.

병렬 개발: http://www.motor-r.i...og-page_19.html

칩메이커의 레귤레이터 옵션:

세부 사항, 주문 장소에 대한 질문이 많습니다. 제가 직접 세트를 주문해서 여러분께 공유해 드립니다.

그리고 역방향 및 보호용 릴레이 블록을 주문했습니다. 더 추가하겠습니다.

귀하의 질문에 따라 기사가 보완됩니다. 그래서 우리는 묻습니다.

이제 폐루프 속도 컨트롤러를 계속해서 조정하고 개선해 보겠습니다.
여기에서 시작하세요:
1 아이디어와 개발
2 PID 컨트롤러
3 레귤레이터 조립, 단계별 지침
4가지 질문 - 답변, 팁, 작업 알고리즘
5 공차 설정, 오버플로와 관련된 저크 제거, 속도 2용 토글 스위치, 트라이악 고장 방지를 위한 릴레이.

이미 이 레귤레이터를 만든 사람들은 문제에 직면했습니다. 가변 공차를 선택하는 것이 매우 어렵습니다. 무차별 대입 방법은 길고 불편합니다. 그리고 저속에서의 공차와 고속에서의 공차가 다를 수 있다는 것이 밝혀졌습니다. 따라서 한 번에 최소 및 최대 속도 모두에서 이 값을 매우 정확하게 선택하는 데 도움이 되는 펌웨어가 작성되었습니다.
이렇게 하려면 Arduino 핀 A3에 중앙 접점을 사용하여 10kOhm 가변 저항을 일시적으로 납땜해야 합니다. 항상 그렇듯이 저항의 극단적인 접점을 + 및 -에 납땜합니다.
이제 펌웨어를 업로드한 후 nastroyka_dopuska , 먼저 기계나 엔진과 관련된 모든 변수를 입력합니다. 주요한 것은 기계에 필요한 최소 및 최대 회전수와 10 스핀들 회전당 펄스 수입니다.
비디오에 표시된 대로 공차를 선택합니다. 그런 다음 수신된 데이터를 펌웨어 18에 입력하여 사용할 수 있습니다. 이 펌웨어는 디스플레이 디스플레이를 개선합니다. 당신이 요청한 것처럼.
펌웨어: https://drive.google...iew?usp=sharing


우리가 겪었던 다음 문제는 특정 엔진 속도에서 "저크"가 발생했다는 것입니다. 그 이유를 이해하기 위해 tic 변수의 값을 컴퓨터로 전송하는 펌웨어가 만들어졌습니다. 홀 센서의 신호 사이를 통과하는 클록 사이클 수입니다. 데이터는 SerialPortPlotter 프로그램에 그래픽 형식으로 표시되었습니다.




협의 결과, 센서의 신호가 65535 클록 사이클 후에 발생하는 카운터 오버플로와 동시에 도착하면 오류가 발생하는 것으로 나타났습니다. 그들은 또한 그러한 실패를 피하는 방법을 알려주었고 나는 매우 감사했습니다.

우리가 직면한 추가 작업은 릴레이를 사용하여 트라이액 고장에 대한 보호를 구현하는 것이었습니다. 따라서 속도가 설정된 속도를 특정 숫자만큼 초과하면 릴레이가 작동하고 엔진이 꺼집니다.
앞으로는 이를 통해 엔진 역회전을 구현할 것이므로 4개로 구성된 릴레이 블록을 사용할 것입니다. 하지만 역방향이 필요하지 않다면 릴레이 하나만으로 지나갈 수 있습니다.


GND 접점에 마이너스를 적용하고 VCC에 플러스 5V를 적용하고 IN3과 IN4를 Arduino의 A1 접점에 연결합니다. 이는 역방향이고 IN2는 A2 접점에 연결합니다. 이 접점은 전원 보드 연결을 끊는 역할을 합니다. 펌웨어 업로드 proverka_rele , 그리고 우리의 릴레이는 1초 동안 교대로 켜지고 꺼져야 합니다. 두 개가 짝을 이루고 하나는 따로 있습니다. 모든 것이 올바르게 작동하면 이 단일 릴레이를 통해 전원 보드로 가는 전선을 연결하고 펌웨어를 업로드할 수 있습니다. roos_zashita_1 그리고 레귤레이터를 사용하세요. 여기서 저크가 제거되고 보호가 구현됩니다.

또한 후진용 토글 스위치를 3개 위치로 즉시 설치하고 연결할 수도 있으며, 속도 범위를 원하는 방식으로 나누는 토글 스위치도 사용할 수 있습니다. 내 기계의 경우 첫 번째 회전 속도를 100rpm에서 2000rpm으로 설정하고 두 번째 연삭 속도를 1500rpm에서 5000rpm으로 설정했습니다. 다음 구성표에 따라 연결합니다.

확인하려면 스케치를 업로드하세요. proverka_tumblerov 토글 스위치의 위치를 ​​변경하면 화면의 숫자가 변경됩니다. 변경 사항이 발생하면 펌웨어를 업로드할 수 있습니다. roos_zashita_2skorosti 그리고 그것을 사용하십시오.

모든 펌웨어에서 필요한 값을 입력해야 한다는 점을 잊지 마십시오.
펌웨어:
Signet ---- 후진 및 제동을 위한 2개의 릴레이 포함 https://wdfiles.ru/dr8k

인장 ---- SMD 구성 요소 포함 및 펄스 블록 D6MG 케이스용 전원 공급 장치 https://drive.google...T0JOd2pFZjI3SmM

12V 릴레이의 경우 점퍼를 12 표시로 이동합니다.
릴레이의 경우 5V는 이미 마크 5에 있습니다.
릴레이의 다이오드를 도체 쪽에서 보드에 직접 납땜합니다.
ULN2003이 있는 보드의 경우 릴레이의 다이오드가 필요하지 않습니다.

선택한 씰에 따라 부품 목록이 변경됩니다.

저항기 10k 0.25W-2pcs
저항기 4.7k 0.25W - 1개
저항기 2k 0.25W - 1개
저항기 470 0.25W-1개
저항기 100 2W-1pcs
저항기 360 0.25w-2pcs
저항기 5k 0.25W-1개(역방향 버튼)
트리밍 저항 10k-1pcs (LCD 디스플레이용)
가변 저항 10k-1pcs (속도 제어)
트리밍 저항기 10k(레그 A3당)
다이오드RL205 1pc
커패시터 100n 600V-1pcs C4
커패시터 0.05 MF - 1개 C3
트라이액 BTA24-600 (BTA16-600) 라디에이터에
PC817C-1개
MOC3021-1개(MOC3023)
L7805CV-1개
GBL04-E3/51(KBL04) 보드와 같은 다이오드 브리지, 다이오드 브리지 4A 400V
보드당 단자대 - 이중 - 7개,
릴레이 JS1-12V 2개, 5V 가능
전해 콘덴서 100 uF *25V -2 개 (C1 및 C2)
칩 ULN2003A - 1개

변압기 - 무엇이든 찾을 수 있습니다(1.5-3W)
3위치 스위치 - 1개
Arduino용 소켓 - 1개

목록에는 없고 게시판에 있음
Arduino 아래 회로의 저항은 10k입니다(트랙 측면에 있습니까, 아니면 차이가 없습니까?) 보드의 도체 측면에 있지만 위에 배치할 수도 있습니다. 그리고 속도 제어 범위를 두 개의 하위 범위로 나누려는 사람들에게 필요합니다.
다이오드 뒷면릴레이용 보드 - 어떤 것인가요? 대답 - 가능한 모든 RL205
트랜지스터 BC 550 - 2개의 트랜지스터, arr이 있는 모든 것. 방출하다. KT 315나 KT3102를 이용하시면 됩니다.

구성표 옵션
계획의 조정된 버전

첨부된 이미지




orio55가 편집한 게시물: 2017년 5월 1일 - 20:05

타코미터는 바퀴나 회전하는 모든 것의 RPM(분당 회전 수)을 계산하는 데 유용한 도구입니다. 타코미터를 만드는 가장 쉬운 방법은 IR 송신기와 수신기를 사용하는 것입니다. 그들 사이의 연결이 중단되면 무언가 회전하고 있음을 알 수 있으며 코드를 사용하여 통신 중단 빈도에 따라 RPM을 계산할 수 있습니다.

이 기사에서는 IR 송신기와 수신기를 사용하여 Arduino를 사용하여 회전 속도계를 만드는 방법을 살펴보겠습니다. 결과는 16x2 LCD 디스플레이에 표시됩니다.

이 프로젝트의 목표는 하나의 입력과 하나의 출력을 갖는 시스템을 만드는 것입니다. 장치의 입력에는 통신이 중단될 때 높은(+5V) 레벨에서 낮은(+0V) 레벨로 변경되는 신호가 있습니다. 이 신호에 따라 Arduino는 내부 카운터 값을 증가시킵니다. 그런 다음 수행 추가 처리및 계산을 수행하고 트리거가 중단되면 계산된 RPM이 LCD 디스플레이에 표시됩니다.

통신을 위해 낮은 저항 저항을 통해 연결된 IR LED의 IR 빔을 사용하여 밝게 빛납니다. IR LED의 빛이 없을 때 "닫히는" 광트랜지스터를 수신기로 사용하겠습니다. IR 송신기와 수신기 사이에 컴퓨터 팬이 배치되어 켜집니다. 트랜지스터 회로를 통해 연결된 IR 수신기는 인터럽트를 생성합니다. 결과를 출력하려면 사용됩니다. 아두이노 LCD인터페이스를 통해 최종 RPM 값을 LCD에 표시할 수 있습니다.

강요:

개발 보드

트리머 저항기 5kΩ

점퍼

SIP 커넥터

2x 2N2222 NPN 트랜지스터

적외선 LED

포토트랜지스터

10옴 저항

저항기 100kΩ

저항기 15kΩ 또는 16kΩ

컴퓨터 팬

품목 상세 목록

프로젝트에 사용되는 모든 요소는 위에 나열되어 있지만 주요 요소의 기능을 더 자세히 설명하겠습니다.

아두이노 우노

이것은 수신기와 센서 사이에 컴퓨터 팬 블레이드가 있음을 나타내는 IR 빔 인터럽트의 펄스를 처리하는 데 사용할 Arduino 보드입니다. Arduino는 타이머와 함께 이러한 펄스를 사용하여 팬의 RPM을 계산합니다.

LCD 16×2

Arduino가 RPM을 계산하면 이 값이 사용자 친화적인 방식으로 디스플레이에 표시됩니다.

트리머 저항기 5kΩ

이 트리머는 16x2 LCD의 대비를 조정하는 데 사용됩니다. 0~+5V 범위의 아날로그 전압을 제공하여 LCD 디스플레이의 밝기를 조정할 수 있습니다.

적외선 LED 및 광트랜지스터

강력한 IR 빛이 닿으면 포토트랜지스터가 켜집니다. 따라서 IR LED가 켜지면 포토트랜지스터가 열린 상태로 유지되지만, 예를 들어 IR LED가 팬 블레이드로 덮여 있으면 포토트랜지스터가 닫힙니다.

2N3904 및 2N3906

이 트랜지스터는 +0 및 +5V 이외의 전압이 없는 광트랜지스터의 출력 펄스를 Arduino에 제공하기 위해 신호 레벨을 변환하는 데 사용됩니다.

개략도


회로에서 LCD 디스플레이와의 통신 인터페이스는 단순화되었으며 제어 라인 2개와 데이터 라인 4개만 있습니다.

계획의 특징

16×2 LCD 인터페이스

2개의 제어 핀과 4개의 데이터 전송용 핀이 Arduino에서 LCD 디스플레이로 연결됩니다. 이는 LCD에 무엇을 해야 할지, 언제 해야 할지 알려 주는 것입니다.

IR 빔 차단 회로

IR 빔 차단 신호는 두 번째 디지털로 이동합니다. 아두이노 핀. 이로 인해 Arduino가 중단되어 펄스를 계산하고 회전 속도계가 데이터를 수신할 수 있습니다.

아두이노 LCD 라이브러리

이 프로젝트에서는 Arduino LCD 라이브러리를 사용합니다. 기본적으로 두 번째 줄의 RPM 값을 새 값으로 업데이트하겠습니다.

준비하려면 이 라이브러리를 사용하여 LCD에 "Hello, World!"를 표시하는 아래 코드를 살펴보세요. 타코미터에서는 유사한 코드, 특히 "lcd.print(millis()/1000);"를 사용합니다.


계속 진행하기 전에 이 LCD 라이브러리의 기능을 최대한 자세히 이해하십시오. 너무 복잡하지 않으며 Arduino 웹사이트에 잘 문서화되어 있습니다.

Arduino를 사용하여 RPM 계산

컴퓨터 팬의 RPM을 계산할 예정이므로 계산에 IR 빔 차단을 사용한다는 점을 이해해야 합니다. 이것은 매우 편리하지만 컴퓨터 팬의 블레이드가 7개라는 점을 고려해야 합니다. 이는 7번의 중단이 1회전임을 의미합니다.

인터럽트를 추적하는 경우 7번째 인터럽트마다 1회의 전체 회전이 방금 발생했음을 의미한다는 것을 알아야 합니다. 회전을 완료하는 데 걸리는 시간을 추적하면 RPM을 쉽게 계산할 수 있습니다.

1차 회전시간 = P * (μS/revolution)

RPM = rpm = 60,000,000 * (μS/min) * (1/P) = (60,000,000 / P) * (rpm)

RPM을 계산하려면 위에 주어진 공식을 사용합니다. 공식은 정확하며 정확도는 Arduino가 인터럽트 사이의 시간을 얼마나 잘 추적하고 전체 회전 수를 계산할 수 있는지에 따라 달라집니다.

회로 조립

아래 사진 보면 다 나와요 필요한 세부 사항그리고 다이어그램과 같은 점퍼.


먼저 +5V와 LCD 디스플레이의 데이터/제어선을 연결합니다. 그런 다음 LCD 디스플레이, 대비 전위차계 및 전원 LED.


IR 빔의 회로 차단기가 조립되었습니다. IR LED와 포토트랜지스터 사이에 어느 정도 거리를 유지하십시오. 이 사진은 IR LED와 컴퓨터 팬을 배치할 포토트랜지스터 사이의 거리를 보여줍니다.


하드웨어 이야기는 이제 그만! 장치가 어떻게 작동하는지 확인하기 위해 펌웨어/프로그램을 시작해 보겠습니다!

소프트웨어 부분

코드에는 두 가지 주요 부분이 있으며 아래에 자세히 설명되어 있습니다.

기본 LCD 새로 고침 주기

인터럽트 시간 업데이트

메인 사이클에서는 LCD 디스플레이의 회전과 업데이트가 계산됩니다. 메인 루프는 거대한 while(1) 루프이므로 항상 실행되고 RPM이 계산되며 LCD는 초당 여러 번 업데이트됩니다. 인터럽트의 기능은 IR 인터럽트 사이의 시간을 계산하므로 메인 루프에서 RPM을 계산할 수 있습니다.

컴퓨터 팬에는 7개의 블레이드가 있으므로 이 회전 속도계는 해당 팬에만 작동하도록 설계되었습니다. 팬이나 기타 장치가 회전당 4개의 펄스만 생성하는 경우 코드를 "(time*4)"로 변경합니다.

다음은 타코미터 작동 방식에 대한 데모 비디오입니다.

두 개의 팬은 약 3000rpm과 2600rpm에서 작동하며 오차는 약 +/-100rpm입니다.

Arduino의 타코미터 검토

팬은 인터럽트 펄스를 생성하고 출력에는 RPM이 표시됩니다. 정확도는 100%는 아니지만 약 95%이고 부품 비용은 10달러이므로 Arduino에서 이 회전 속도계를 구축하는 것이 합리적입니다.

이제 무엇을 해야 할까요?

빔 브레이크 기반 시스템은 RPM 측정뿐만 아니라 다른 센서로도 유용합니다. 예를 들어, 문이 열려 있는지 닫혀 있는지 알고 싶습니다. 아마도 로봇 아래로 무언가가 지나가고 있는지 알고 싶을 것입니다. 빔 차단에는 다양한 용도가 있으며 여기에 사용된 회로는 매우 간단하여 이를 개선하고 다른 놀라운 장치를 구축할 수 있는 방법이 많습니다.

결론

전반적으로 이 프로젝트는 성공했다고 생각합니다... 하지만 시간과 경험의 문제입니다.. 어쨌든 시스템은 의도한 대로 상당히 안정적으로 작동하여 예상한 결과를 얻었습니다. 이 기사를 읽고 Arduino를 사용하여 회전 속도계를 만드는 방법을 배우는 것이 즐거웠기를 바랍니다!

원본 기사 영어(번역: 알렉산더 카샤노프 cxem.net 사이트의 경우)

엔진 속도 센서 모듈은 주로 모터 샤프트의 회전 속도를 감지하도록 설계되었습니다. 이 모듈은 마이크로컨트롤러와 함께 속도 외에도 펄스 수와 샤프트 위치를 결정할 수 있습니다.



일반적으로 센서는 특정 이벤트를 기록한 다음 이벤트 수를 해당 이벤트가 발생한 기간과 연결하여 수량을 측정합니다.


따라서 이 경우 속도가 측정됩니다. 여기서 이벤트는 슬롯이 있는 디스크가 회전하는 동안 광학 센서의 작동 결과로 수신된 임펄스를 의미합니다. 센서는 LED와 포토트랜지스터로 구성되어 있으며, LED에서 나오는 빛의 유무를 감지합니다.


계획


제시된 회로는 기록된 펄스를 마이크로컨트롤러로 보내는 데 사용될 수 있습니다. 계획의 기초는 다음과 같습니다. 광학 센서 LED 및 포토트랜지스터 출력을 갖춘 OS25B10(OC1).


다음은 간단한 슈미트 트리거로 구성된 LM393 듀얼 비교기 IC(IC1)입니다. 녹색 LED(LED1)은 회로에 전압이 인가되어 있음을 나타내며, 빨간색 LED(LED2)는 엔진 속도 센서 모듈의 출력을 모니터링합니다. 추천 작동 전압모듈은 4.5~5.5V입니다.




여기서 저항 R1(180ohm)은 OS25B10 광학 센서(OC1) 내부 LED의 작동 전류를 제한하는 데 사용됩니다. 필요한 경우 프로토타입의 값을 변경할 수 있습니다. 또한 저항 R2(10kOhm)의 값을 조정하여 회로에 필요한 전압을 얻을 수도 있습니다. 저항 R7(10K)은 옵션 풀업 저항입니다.


인코더 디스크


센서 슬롯에 배치된 인코더 디스크는 광학 센서를 분할하여 디스크 한쪽에는 LED가 있고 다른 쪽에는 포토트랜지스터가 있습니다. LED에서 나오는 광선의 경로가 디스크에 의해 차단되지 않으면 포토트랜지스터는 전류를 통과하고, 그렇지 않으면 닫힙니다.


타코미터는 주어진 시간 간격 동안 물체의 회전 수를 측정하는 데 사용되는 장치입니다. 일반적으로 값은 분당 회전수 또는 rpm으로 표시됩니다. 이전에 타코미터는 기계적 연결(케이블 또는 샤프트)을 통해 회전이 타코미터에 전달되는 순전히 기계 장치였으며 분당 회전수는 다음을 사용하여 결정되었습니다. 기어 변속기원형 규모로 표시되었습니다. 현대 전자공학의 출현 이후 회전 속도계는 많은 변화를 겪었습니다. 이 기사에서는 비접촉식 디지털 타코미터에 대해 설명합니다. Arduino 기반. 유사한 회로를 사용하여 모터의 속도를 제어할 수도 있습니다. 분당 회전수 및 기타 정보가 16×2 LCD 디스플레이에 표시됩니다. 전기 다이어그램 Arduino 기반 디지털 타코미터는 다음과 같습니다.

전기 다이어그램


RPM 센서
적외선 광트랜지스터와 적외선 LED가 센서를 구성합니다. 적외선 포토트랜지스터는 적외선에만 반응하는 포토트랜지스터의 일종입니다. 적외선 포토트랜지스터를 사용하면 다른 빛 간섭의 영향을 피할 수 있습니다. 환경. 포토트랜지스터와 적외선 LED가 병렬로 배열되어 있습니다. 저항 R2는 적외선 다이오드를 통한 전류를 제한합니다. 반사 가이드 테이프는 센서에 맞춰 회전하는 물체(샤프트, 디스크 또는 팬)에 접착됩니다. 저는 공급전압이 9V/100mA인 냉각팬을 사용했습니다. 센서와 반사 가이드 스트립 사이의 간격은 1cm를 초과해서는 안 됩니다. 반사 가이드 스트립이 센서 앞을 통과하면 적외선이 포토트랜지스터로 다시 반사됩니다. 포토트랜지스터는 특정 순간에 더 많은 전류를 전도하므로 결과적으로 R3(68K 저항)의 전압이 빠르게 상승합니다. 그 결과는 포토트랜지스터의 이미터에서 아래에 표시된 모양의 신호가 됩니다. 분당 회전수는 주어진 시간 간격 동안 상승 펄스 수를 계산하여 결정할 수 있습니다.


분당 회전수 계산
Arduino는 RPM 값을 계산하고 이 값을 LCD에 표시하는 데 사용됩니다. 포토트랜지스터의 이미터는 Arduino의 인터럽트 0 핀(디지털 핀 2)에 연결됩니다. Arduino 인터럽트는 상승 에지에 의해 트리거되도록 구성됩니다. 결과적으로 이미터 파형의 상승 펄스마다 인터럽트가 처리됩니다. 주어진 시간에 수신된 인터럽트 수는 인터럽트 서비스 프로그램을 사용하여 변수를 증가시켜 계산됩니다. 계산 주기 동안 경과된 시간은 millis() 함수를 사용하여 결정됩니다. millis() 함수는 Arduino 보드가 켜진 후 경과한 밀리초 수를 반환합니다. 계산주기 전후에 millis() 함수를 호출하여 그 차이를 계산하면 계산주기 동안 경과된 시간을 알 수 있습니다. 값(인터럽트 수/밀리초당 횟수) * 60000에 따라 분당 회전 수(RPM)가 결정됩니다.

모터 속도 제어
전위차계를 사용하여 모터 속도를 제어하는 ​​장치도 회로에 포함되어 있습니다. 트랜지스터 Q1은 모터를 제어하는 ​​데 사용됩니다. 베이스는 전류 제한 저항 R1을 통해 Arduino의 PWM 핀 9에 연결됩니다. R4 속도 제어 전위차계 모터는 Arduino의 아날로그 핀 A0에 연결됩니다. 이 핀의 전압은 anlogRead 기능을 사용하여 0에서 1023 사이의 값으로 변환됩니다. 그런 다음 이 값을 4로 나누어 0~255 범위를 얻습니다. 주어진 값 anlogWrite 함수를 사용하여 PWM 핀 9에 기록됩니다. 결과는 핀 9의 구형파이며, 그 듀티 사이클은 AnalogWrite 함수를 사용하여 쓴 값에 비례합니다. 예를 들어, 값이 255이면 듀티 사이클은 100%가 되고, 값이 127이면 듀티 사이클은 약 50%가 됩니다. D1은 환류 다이오드이고 C1은 잡음 억제 커패시터(디커플러)입니다. RPM과 듀티 사이클은 표준 LiquidCrystal 라이브러리를 사용하여 LCD 화면에 표시됩니다. 이 문서를 읽어보세요: Arduino용 인터페이스 LCD 디스플레이. Arduino 기반 디지털 타코미터의 전체 코드는 다음과 같습니다.

프로그램 코드
#포함하다 LiquidCrystal LCD(12,11,6,5,4,3); int PWM=9; int 냄비=A0; 부동 소수점 값=0; 정수 퍼센트; 플로트 회전수=0; int rpm; int 옛날=0; 시간; void isr() //서비스 루틴 중단( rev++; ) void setup() ( lcd.begin(16,2); //LCD 초기화attachInterrupt(0,isr,RISING); //인터럽트 연결 ) void loop() ( Delay(1000); detachInterrupt(0); //인터럽트를 분리합니다 time=millis()-oldtime; //시간을 찾습니다 rpm=(rev/time)*60000; //rpm을 계산합니다 oldtime=millis(); / /현재 시간 저장 rev=0; value=analogRead(pot); //속도 제어 POT 값을 읽음 =value/4; //원하는 속도 백분율 설정=(value/255)* 100; //사용률 %를 찾습니다. lcd.print("___TACHOMETER___"); lcd.print(" ");
메모
~에 아두이노 보드외부 전원 소켓을 통해 9V 공급 전압을 공급할 수 있습니다.
일부 회로 구성요소에 필요한 5V 전압은 Arduino 보드의 5V 소스에서 공급될 수 있습니다.
사용되는 팬은 9V/100mA 전압을 사용합니다. 2N2222 트랜지스터는 최대 800mA의 전류만 견딜 수 있습니다. 로드를 선택할 때 이 점을 명심하십시오.
사용된 LCD는 JHD162A입니다.
전위차계 R5를 사용하여 LCD 디스플레이의 대비를 조정할 수 있습니다. 연결되면 디스플레이에 아무것도 표시되지 않습니다. 디스플레이에 이미지가 나타날 때까지 R5를 조정합니다. 전위차계 R5 슬라이더의 최적 전압 범위는 0.4~1V입니다.
LTH-1550 포토 인터럽트 모듈에서는 적외선 포토트랜지스터와 적외선 다이오드가 제거되었습니다.
포토트랜지스터의 측면은 전기 테이프로 덮어야 합니다.
센서 위치는 아래 그림과 같습니다.