Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кубов Курсова.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
472.06 Кб
Скачать

2.3 Програмна частина

#include <LiquidCrystal.h>

LiquidCrystal lcd(3, 5, 9, 10, 11, 12);

volatile float time = 0;

volatile float time_last = 0;

volatile int rpm_array[5] = {0,0,0,0,0};

void setup()

{

//Digital Pin 2 Set As An Interrupt

attachInterrupt(0, fan_interrupt, FALLING);

// set up the LCD's number of columns and rows:

lcd.begin(16, 2);

// Print a message to the LCD.

lcd.print("Current RPM:");

}

void loop()

{

int rpm = 0;

while(1){

//Slow Down The LCD Display Updates

delay(400);

//Clear The Bottom Row

lcd.setCursor(0, 1);

lcd.print(" ");

//Update The Rpm Count

lcd.setCursor(0, 1);

lcd.print(rpm);

////lcd.setCursor(4, 1);

////lcd.print(time);

//Update The RPM

if(time > 0)

{

//5 Sample Moving Average To Smooth Out The Data

rpm_array[0] = rpm_array[1];

rpm_array[1] = rpm_array[2];

rpm_array[2] = rpm_array[3];

rpm_array[3] = rpm_array[4];

rpm_array[4] = 60*(1000000/(time*7));

//Last 5 Average RPM Counts Eqauls....

rpm = (rpm_array[0] + rpm_array[1] + rpm_array[2] + rpm_array[3] + rpm_array[4]) / 5;

}

}

}

void fan_interrupt()

{

time = (micros() - time_last);

time_last = micros();

}

В основному циклі підраховуються обороти та поновлення РК-дисплея. Оскільки основний цикл це гігантський while (1) цикл, то він працюватиме завжди, RPM підраховується, а РК-дисплей оновлюється кілька разів на секунду. Функція у перериванні підраховує час між перериваннями ІК, тому рахувати RPM можна в основному циклі.

Пам'ятаємо, що комп'ютерний вентилятор має 7 лопатей, так що це тахометр призначений для роботи тільки з такими вентиляторами. Якщо ваш вентилятор або інший пристрій дає тільки 4 імпульси за одне обертання, змініть в коді "(time * 4)".

Висновок

Системи на основі обриву променя корисні не тільки при вимірі RPM, але і в якості інших датчиків. Наприклад якщо хочеться знати відкриті двері а бо закриті. Можливо, ви захочете дізнатись, чи не проходив хто повз. Є багато застосувань обриву променя, а схема використана тут настільки проста, що є багато шляхів для поліпшення і збірки інших дивних пристроїв.

Вентилятор працює нашвидкості приблизно 3000 оборотів в хвилину, з похибкою близько + / -100 оборотів в хвилину.

Вентилятор генерує імпульси переривання, а на виході бачимо RPM. Хоча точність не 100%, а приблизно 95%, при вартості елементів всього у10 $ є сенс побудови такого тахометра на Arduino.

Перелік літератури:

1. Рюмик С.М. Микроконтроллеры Duino. Цикл статей. Журнал "Радiоаматор", 2010 г., №2-6.

2. Рюмик С. Микроконтроллерный модуль InterDuino. Журнал "Радио", 2010 г., №10.

Інтернет джерела 1 http://cxem.net/

2 http://mk-duino.narod.ru/

24