Skip navigation

Relés hangerőszabályozó

Jellemzők

Az alábbi hangerőszabályozó elektromágneses relékkel kivitelezett. Jellemzői:

  • logaritmikus karakterisztika;
  • csillapítás: 0 és 63 dB közötti, 64 lépésben, 1 dB-es felbontással;
  • Arduino Nano alapú (adatlapja, beszerzése):
    • Az Arduino A0-ás bemenetére van kötve a potenciométer csúszkája;
    • A csúszóérintkező feszültsége 0 és 5V közötti, az elfordulás függvényében;
    • A 10-bites feldolgozásnak köszönhetően ez 0 és 1023 közötti értékeket eredményez;
    • 6 relével valósítottam meg a hangerőszabályozást. A relék csillapításértékei (dB-ben): 1, 2, 4, 8, 16, 32.
    • Lényegében 6-bites szabályozás jön létre. 64 kapcsolt állapotot kapunk, mely 0 és 63dB közötti csillapítás, 1dB-enként;
    • A 10 bites számból 6 bitest kell "képezni", vagyis a 10-bites számot 6-bitesre kell redukálni. Mivel a 10-bit 4-gyel több, mint a 6, ezért a bejövő érkékeket el kell osztani 2^4-nel, vagyis 16-tal. Az így kapott szám már kiküldhető a portra;
    • A port kimenetei a reléket vezérlik;
    • Bekapcsoláskor a bemenet tiltva van (J2 relé), a hangerő mintegy 0 értékű (63 dB-es csillapítás). 5 másodperces szünet következik, melynek végén a J2 relé engedélyezi a jel továbbhaladását. Ezután a hangerő a potenciométer helyzetétől függő értékre felhangosodik, 4 másodperc alatt. Az 5 másodperces bekapcsolási késleltetési időt növelni is lehet, amennyiben pl.: elektroncsöves erősítőhöz használjuk (a fűtés idejére).


A hangerőszabályozó BreadBoard-os kivitele (itt még Reed-relékkel)


A hangerőszabályozó (elektromágneses relékkel)

1. ábra  A hangerőszabályozó fényképe

A relés áramkör

2. ábra  A relés áramkör kapcsolási rajza

3. ábra  A relés áramkör beültetési rajza

4. ábra  A relés áramkör nyomtatott áramköri rajza

A relés áramkör NYÁK-fájlja: relay.fcd és annak szoftvere: FidoCadJ

A vezérlő áramkör

5. ábra  A vezérlő áramkör kapcsolási rajza (az R2-R8 és R15 ellenállások méretezése alul)

6. ábra  A vezérlő beültetési rajza

7. ábra  A vezérlő áramkör NYÁK-rajza

A vezérlő áramkör NYÁK-fájlja


Az R2-R8 és R15 ellenállásokat a relék típusától függően kell méretezni. A példánkban egy RS-12 típusú relét említek, melynek adatai a következők:

A relé típusa: RS-12 (adatlap, beszerzés)

A tekercs névleges feszültsége: 12 V=

A tekercs ellenállása: 960 Ω

A tekercs árama: 12,5 mA

A tekercs teljesítménye: 150 mW

A kb. 12 V~ feszültség egyenirányítása után mintegy 17 V= feszültség keletkezik (Ut), mely feszültség a relének sok. A 8. ábrán látható, hogy a 17 V= három eszköz között osztódik el: Ut = Urelé + UR + Utr. Ha a nyitott kollektoros áramkör (ULN2803, adatlap, beszerzés) maradékfeszültségét elhanyagoljuk (ilyen kis áram mellett 100 mV nagyságrendű, hiszen 350 mA esetén is csak 1,1 V), akkor lényegében két eszköz között kell megosztani, melyek soros kapcsolásúak, tehát közös az áramuk: +Ut = Urelé + UR. Ebből következik az ellenállás méretezése:

UR = Ut - Urelé => R = UR / I = (Ut - Urelé) / I = (17 V - 12 V) / 12,5 mA = 5V / 12,5 mA = 400 Ω. A szabványsorban illeszkedő érték: 390 Ω

8. ábra


A relék elengedett helyzetben iktatják be a csillapítást. Ennek megfelelően az Arduino digitális kimenetei ekkor "0" szintűek. "1"-es kimeneti szint esetén a LED-ek világítanak, a relék meghúznak, a csillapítást kiiktatva. Mindez azért így lett kialakítva, hogy kikapcsolt állapotban maximális legyen a csillapítás. Ahhoz, hogy a tényleges csillapításértéket leolvassuk az indikátor-LED-ekről, az azok által kijelzett bitek értékeit negálnunk kell.

Relék (elengedve csillapítanak)
csillapítás [dB] 32 dB 16 dB 8 dB 4 dB 2 dB 1 dB
63 0 0 0 0 0 0
62 0 0 0 0 0 1
61 0 0 0 0 1 0
60 0 0 0 0 1 1
59 0 0 0 1 0 0
58 0 0 0 1 0 1
57 0 0 0 1 1 0
56 0 0 0 1 1 1
55 0 0 1 0 0 0
54 0 0 1 0 0 1
53 0 0 1 0 1 0
52 0 0 1 0 1 1
51 0 0 1 1 0 0
50 0 0 1 1 0 1
49 0 0 1 1 1 0
48 0 0 1 1 1 1
47 0 1 0 0 0 0
46 0 1 0 0 0 1
45 0 1 0 0 1 0
44 0 1 0 0 1 1
43 0 1 0 1 0 0
42 0 1 0 1 0 1
41 0 1 0 1 1 0
40 0 1 0 1 1 1
39 0 1 1 0 0 0
38 0 1 1 0 0 1
37 0 1 1 0 1 0
36 0 1 1 0 1 1
35 0 1 1 1 0 0
34 0 1 1 1 0 1
33 0 1 1 1 1 0
32 0 1 1 1 1 1
31 1 0 0 0 0 0
30 1 0 0 0 0 1
29 1 0 0 0 1 0
28 1 0 0 0 1 1
27 1 0 0 1 0 0
26 1 0 0 1 0 1
25 1 0 0 1 1 0
24 1 0 0 1 1 1
23 1 0 1 0 0 0
22 1 0 1 0 0 1
21 1 0 1 0 1 0
20 1 0 1 0 1 1
19 1 0 1 1 0 0
18 1 0 1 1 0 1
17 1 0 1 1 1 0
16 1 0 1 1 1 1
15 1 1 0 0 0 0
14 1 1 0 0 0 1
13 1 1 0 0 1 0
12 1 1 0 0 1 1
11 1 1 0 1 0 0
10 1 1 0 1 0 1
9 1 1 0 1 1 0
8 1 1 0 1 1 1
7 1 1 1 0 0 0
6 1 1 1 0 0 1
5 1 1 1 0 1 0
4 1 1 1 0 1 1
3 1 1 1 1 0 0
2 1 1 1 1 0 1
1 1 1 1 1 1 0
0 1 1 1 1 1 1

Az Arduino-kód

A kód innen tölthető le: Digitalis_hangeroszabalyzo.ino, és annak szoftvere: Arduino IDE


/*

Az Arduino A0-ás bemenetére van kötve a potenciométer csúszkája. A csúszka feszültsége 0 és 5V közötti. A 10-bites feldolgozásnak köszönhetően ez 0 és 1023 közötti értékeket eredményez. 6 relével valósítottam meg a hangerőszabályozást. A relék csillapításértékei (dB-ben): 1, 2, 4, 8, 16, 32. Ez lényegében 6-bites szabályozás. 64 kapcsolt állapotot kapunk, mely 0 - 64dB es csillapítás, 1dB-enként. Ehhez a 10 bites számból 6 bitest kell képezni. Mivel a 10-bit 4-gyel több, mint a 6, ezért a bejövő érkékeket el kell osztani 2^4-nel, vagyis 16-tal. Az így kapott szám már kiküldhető a portra. A PORTB a 8, 9, 10, 11, 12, 13 pinek, a 8-as pin a legkisebb helyiérték. A port 6-os és 7-es pinje nem használható. => irodalom: https://www.arduino.cc/en/Reference/PortManipulation

*/

int sensorPin = A0; // a potenciométer csúszkafeszültségét digitalizáló bemenet beállítása.

int sensorValue = 0; // változó az érzékelőtől érkező érték tárolásához (potenciométer).

int ledPin = 5; // bemenet-engedélyező relé kimenet inicializálása. int sleep = 0;

byte binaryValue= B00000000; // inicializálja a port értékét nullákként.

void setup() {

pinMode(ledPin, OUTPUT); // bemenet-engedélyező relé kimenet beállítása kimenetként.

digitalWrite(ledPin, LOW); // a bemenet engedélyezése, vagyis a bemenet-engedélyező relé legyen elengedett.

DDRB = DDRB | B00111111; // 6 pin beállítása kimenetként a B porton.

PORTB = 00000000; // a PORTB kimeneti értéke legyen 00000000.

delay(5000); // 5 s szünet.

digitalWrite(ledPin, HIGH); // a bemenet engedélyezése, vagyis a bemenet-engedélyező relé meghúzása.

sensorValue = analogRead(sensorPin); // az érték beolvasása.

binaryValue = byte(sensorValue/16); // az érték osztása 16-tal.

sleep = (4000/binaryValue); // a sleep változó értékének beállítása.

for(int i=0; i<binaryValue; i+=1){

PORTB = i; delay(sleep); // szünet (a sleep változó értékének megfelelő).

}

}

void loop() { // végtelen ciklus.

sensorValue = analogRead(sensorPin); // az érték beolvasása.

binaryValue= byte(sensorValue/16); // digitalValue= sensorValue.

PORTB = binaryValue; // a PORTB beállítása az osztóhoz.

delay(50); // 50 ms szünet, a következő beolvasásig.

}