Frekvenciamérő, induktivitásmérő


Ez a cikk két arduino alapokon nyugvó mérőeszköz elkészítését is bemutatja

Dávid jóvoltából.

Nézzük a frekvenciamérőt:

A frekvencia mérőhöz szükséges alkatrészek:

  • 1db valamilyen arduino alappanel.

  • 1db 16x2 lcd kijelző.

  • 1db 220ohmos ellenállás.

  • 1db 10kohmos potenciométer.

  • maréknyi vezeték.

  • próbapanel.

  • 1db cd4017b

  • 1db 100nF kondenzátor.


Először is állítsuk össze a kapcsolást:

LCD: GND - (VSS)GND

LCD: VDD - 5V

LCD: VO - potenciométer középső lába (az egyik szélső GND, a másik 5V)

LCD: RS - arduinoD12

LCD: RW - GND

LCD: E - arduinoD11

LCD:D4 - arduinoD5

LCD:D5 - arduinoD4

LCD:D6 - arduinoD3

LCD:D7 - arduinoD2

LCD:A - 220 ohmos ellenálláson keresztül 5V ra

LCD:K - GND

CD4017b:8 - GND

CD4017b:12 - arduinoD10

CD4017b:13 - GND

CD4017b:14 - mérendő frekvencia

CD4017b:15 - GND

CD4017b:16 - 5V + a 100nFos kondi egyik lába (lehető legközelebb az ic hez) a kondi másik

lába GND


A CD4017b-t frekvencia osztás céljából használjuk valamint ha szinuszos jel kerül a bemenetre

négyszögesíti, mivel csak alacsony(LOW) illetve magas(HIGH) értéket kerülhet az a mikro

vezérlő bemenetére .Az LCD kijelzőn kiíratjuk az mért frekvenciát valamint ha négyszögjele

mérünk a kitöltési tényezőt. A potenciométerrel pedig a kijelző kontrasztját állítjuk be.


A program pedig Így néz ki:


#include <LiquidCrystal.h>

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

int input=10;// bemeneti láb megadása


float high_time;

float low_time;

float time_period;

float frequency;

float szazalek;

float pwm;

void setup()

{

lcd.begin(16, 2);

pinMode(input,INPUT);

}

void loop()

{

high_time=pulseIn(input,HIGH); //magasszint idejének mérése.

low_time=pulseIn(input,LOW); //alacsonyszint idejének mérése


time_period=high_time+low_time; // teljes periódusidő (magas+alacsony).

time_period=time_period/1000;

frequency=1000/time_period;

szazalek=time_period*10; //1%-nyi periódus idő megadása (teljes peródus/100), de 2 sorral

fentebb osztottuk 1000 el így vissza szorozzuk 10 el.

pwm=high_time/szazalek; //kitöltéstitényező %-ban magas szint ideje osztva az 1% nyi

peródus idővel.

lcd.print(frequency/100); // a mért frekvencia kiírása kHz-be átváltva (a bemenet előtt van 1

10 es osztó így csak 100 kel osztani.

lcd.print("kHz"); //prefixum és mértékegység kiírása.

lcd.setCursor(10,0); // lcd pozíció kiválasztása.

lcd.print(pwm); //kitöltésitényező kiírása.

lcd.print("%"); // % jel kiírása.

delay(1000); //várakozás 1mp et.

lcd.clear(); // lcd törlése.

}


Induktivitásmérő:

Ha pedig induktivitás mérőt szeretnénk készíteni szükségünk lesz további alkatrészekre:

Ehhez az előző kapcsolásunkat nem kell módosítani csak az alábbi kapcsolást megépíteni és a

kimenetét az előző bemenetére kötni valamit a következő programot feltölteni:

a kapcsolás:

Működéséről röviden : ez a kapcsolás egy oszcillátor aminek ismerjük C kondenzátor értékét

valamint megmérjük a frekvenciáját és a Thomson képlet segítségével kiszámoljuk az L

induktivitás értékét .Az alapképlet: ebből kell kifejezni az L értékét.(erre a programban kerül

sor).



és a program :

#include <LiquidCrystal.h>

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

int input=10;


float high_time;

float low_time;

float time_period;

float frequency;

float h;

float fullfreq;

float pi=9.869604401;// pi a négyzeten aThomson képlethez szükséges.

float c=0.001; // kondenzátor értéke fix rezgők

float fr;

float oszto;

float a;

float b;



void setup()

{

lcd.begin(16, 2);

pinMode(input,INPUT);

}

void loop()

{

high_time=pulseIn(input,HIGH); //magasszint idejének mérése.

low_time=pulseIn(input,LOW); //alacsonyszint idejének mérése

time_period=high_time+low_time; // teljes periódusidő (magas+alacsony).

time_period=time_period/1000;

frequency=1000/time_period;

lcd.print(frequency/100); // a mért frekvencia kiírása kHz-be átváltva (a bemenet előtt van 1

10 es osztó így csak 100 kel osztani.

//idkutivitás mérése

fullfreq=frequency*10;//a teljes frekvencia kiszámolása mivel 10 osztó van a bemenet előtt így

csak pl. 10kHz helyett csak 1kHz kerül a bemenetre.

fr=fullfreq*fullfreq; // a Thomsonképlet segítségével kiszámoljuk L értékét.

oszto=fr/100000; // kapott értéket elosztom 100000-el így a 10 nF os kondenzátort 0.001nek

vehetem (nem kell a sok 0-át kiírni).

a=oszto*4*pi*c; //folyt.

b=1/a; //folyt.

h=b*1000000; // átváltás uH-ba.

lcd.setCursor(0,1);// lcd pozíció kiválasztása.

lcd.print(h); //induktivitás értékének kiírása.

lcd.print("uH"); //prefixum és mértékegység kiírása.

delay(1000); //várakozás 1mp et.

lcd.clear(); // lcd törlése.

}


Kopasz Dávid