Страница 1 из 1

Частотомер на Ардуино

СообщениеДобавлено: 12 май 2015, 23:04
-=dp=-
Всем Здравствуйте!

Представляем Вашему вниманию очередной мой проект - Частотомер на Ардуино.
Для изготовления частотомера на Ардуино нам понадобятся следующие детали:

1. Плата Ардуино УНО
2. Текстовый LCD дисплей 1602А.
3. Переменный резистор 10КОм
4. Библиотеки FreqMeasure и LiquidCrystal

Библиотеки проверены и работоспособны на 100% скачиваем в этой теме.
После того как библиотеки скачены, распаковываем их и копируем в папку C:\Program Files\Arduino\libraries.
Далее включаем паяльник и готовимся к распайке схемы:

Re: Частотомер на Ардуино

СообщениеДобавлено: 12 май 2015, 23:14
-=dp=-
И тааааак...., если схема спаяна, проверяем ее внимательно, ошибки устраняем, иначе рискуем сжечь Ардуину или дисплей :D
Но, а если все ОК, то двигаемся дальше.

Запускаем среду разработки Ардуино ИДЕ, создаем новый проект и копируем туда вот этот код:

Код: выделить все

/*
ArduinoFreqMetr v 1.0
 */
#include <FreqMeasure.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 2);
  lcd.print("ArduinoFreqMeter");
  FreqMeasure.begin();
}

double sum=0;
int count=0;

void loop() {
  if (FreqMeasure.available()) {
    // average several reading together
    sum = sum + FreqMeasure.read();
    count = count + 1;
    if (count > 30) {
      float frequency = FreqMeasure.countToFrequency(sum / count);
      lcd.setCursor(0, 1);
      lcd.print(frequency);
      lcd.print(" Hz");
      sum = 0;
      count = 0;
    }
  }
}




Код минимален, поэтому я думаю пояснений и комментариев он не требует.
Все предельно просто.
Подключаем Ардуину к USB порту и прошиваем данный скетч.
После прошивки настраиваем переменным резистором контрастность дисплея (иначе можете ничего не увидеть :D ) подаем на 8 цифровой вход частоту с генератора , уровень до 5 В, и радуемся работе частотомера ;)

Вот как это должно выглядеть:

Re: Частотомер на Ардуино

СообщениеДобавлено: 12 май 2015, 23:30
-=dp=-
Да, и не забываем про корпус, который я сделать еще не успел :D

Для усовершенствования скетча можно добавить перевод частоты из Гц в КГц, МГц.

Делается это так:

Код: выделить все

/*
ArduinoFreqMetr v 1.1
 */
#include <FreqMeasure.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

void setup() {
  Serial.begin(57600);
  lcd.begin(16, 2);
  lcd.print("ArduinoFreqMeter");
  FreqMeasure.begin();
}

double sum=0;
int count=0;

void loop() {
  if (FreqMeasure.available()) {
    // average several reading together
    sum = sum + FreqMeasure.read();
    count = count + 1;
    if (count > 30) {
      float frequency = FreqMeasure.countToFrequency(sum / count);
      lcd.setCursor(0, 1);
      //--------Блок вычисления частоты в ГЦ---------------------
      if (frequency < 1000){
      lcd.print(frequency);
      lcd.println("   Hz");
      };
       //--------Блок вычисления частоты в КГЦ---------------------
     
      if (frequency > 1000){
      float freq = frequency / 1000;
      lcd.print(freq);
      lcd.println("  KHz");
      };
     
      sum = 0;
      count = 0;
    }
  }
}



Re: Частотомер на Ардуино

СообщениеДобавлено: 13 авг 2015, 11:23
-=dp=-
Внешний вид всех комплектующих

Re: Частотомер на Ардуино

СообщениеДобавлено: 27 фев 2016, 15:47
-=dp=-
perhan писал(а):спасибо собрал работает !!!!


Схема рабочая 100% ;)

LCD дисплеи для Ардуино можно найти на Aлиэкспреcc

Re: Частотомер на Ардуино

СообщениеДобавлено: 14 апр 2016, 19:55
-=dp=-
Komakirill писал(а):Добрый день! А с генератора второй контакт - на Gnd? У меня расходомер ТПР, думаю с него частоту считывать и обрабатывать...


Здравствуйте!

Да, второй контакт на общий - GND

Re: Частотомер на Ардуино

СообщениеДобавлено: 12 май 2016, 21:40
-=dp=-
Частотомер предназначен для измерения TTL частоты, но можно измерять и синус если добавить усилитель на одном транзисторе и после него пару инверторов шотки.
Кстати, максимальная измеряемая частота может достигать даже нескольких десятков мегагерц, если использовать делители типа 155ИЕ1 (делит на 10), 3 шт последовательно будут делить на 1000.

Re: Частотомер на Ардуино

СообщениеДобавлено: 09 окт 2016, 16:25
IROBOT
Fedot писал(а):Добрый день. есть дисплей 1602 I2C, но вот мозгов не хватает переписать скетч под него. Заранее благодарен если кто то поможет.

Берите пример с библиотеки liquid cristal 12c и поменяйте настройки дисплея и инициализацию.остальное заработает

Re: Частотомер на Ардуино

СообщениеДобавлено: 09 окт 2016, 16:33
IROBOT
Fedot писал(а):Добрый день. есть дисплей 1602 I2C, но вот мозгов не хватает переписать скетч под него. Заранее благодарен если кто то поможет.

Вот перекомпилил,проверяйте.Библиотеки можно через менеджер библиотек доустановить
Код: выделить все
/*
ArduinoFreqMetr v 1.1
 */
#include <FreqMeasure.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display
#include <Wire.h>


void setup() {
  Serial.begin(57600);
  lcd.init();
  lcd.print("ArduinoFreqMeter");
  FreqMeasure.begin();
}

double sum=0;
int count=0;

void loop() {
  if (FreqMeasure.available()) {
    // average several reading together
    sum = sum + FreqMeasure.read();
    count = count + 1;
    if (count > 30) {
      float frequency = FreqMeasure.countToFrequency(sum / count);
      lcd.setCursor(0, 1);
      //--------Блок вычисления частоты в ГЦ---------------------
      if (frequency < 1000){
      lcd.print(frequency);
      lcd.println("   Hz");
      };
       //--------Блок вычисления частоты в КГЦ---------------------
     
      if (frequency > 1000){
      float freq = frequency / 1000;
      lcd.print(freq);
      lcd.println("  KHz");
      };
     
      sum = 0;
      count = 0;
    }
  }
}



Re: Частотомер на Ардуино

СообщениеДобавлено: 06 июн 2019, 08:21
Серега
ykamerton писал(а):Да что за напасть, не идет ни один твой скетч у меня.... Не светится дисплей 12c

Куда это вставить.. тут работает.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C _lcd1(0x27, 16, 2);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;

int _disp3oldLength = 0;
void setup()
{
Wire.begin();
delay(10);
_lcd1.init();
_lcd1.backlight();
}
void loop()
{if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}



if (1) {
_dispTempLength1 = ((String("0"))).length();
if (_disp3oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp3oldLength = _dispTempLength1;
_lcd1.setCursor(int((16 - _dispTempLength1)/2), 0);
_lcd1.print((String("0")));
} else {
if (_disp3oldLength > 0) {_isNeedClearDisp1 = 1; _disp3oldLength = 0;}
}
}

:lol:

Припаяйте светодиод подсветки через резистор к +5 в и не надо никаких правок в скетче Димона :!:
Все работает, лично проверял ;)