Sizlerin de bildiği gibi 0-30 mhz bir swr watt metre almaya kalksak ödeyeceğimiz tutar minimum 1000 lira. İlk başta aklınızda sorular dolaşıp duracağından adım gibi eminim ama hiç şüpheniz olmasın çünkü en kaliteli swr metre dahi olsa elinizde kalibrasyonunu yapmalısınız. Bence bir tane swr köprüsü ve bir tane ibre ile kalibrasyonunu başarılı bir şekilde yaparsak en iyi swr metre olur. Kendi kanaatimce.
Bu proje de ise yapacağımız şey swr köprüsünden giden ve dönen sinyali arduino ile okuyup bir 4 satır 20 karakter ekrana aktarmak. Burada en önemli kısım ise swr köprüsü ben çok uğraştım farklı denemeler yaptım, çeşit çeşit köprüler yaptım hepsi güzel çalıştı ama bir de şöyle bakmak gerekir troidlere diyotlara ödeyeceğiniz ücret 70 tl civarı iken ben aşağıda resmini gördüğünüz swr köprüsünü Çin’den aldım 82 tl nakliye falan 100 tl diyelim. Hani kendin yapmak en güzeli bence yine de siz bilirsiniz.
Bildiğiniz gibi swr köprülerde ihtiyacımız olan FWD (Giden), REF (Dönen) GND(Şase). Sistem olarak kısaca anlatmak gerekirse (bilmeyenler için) cihazımızdan çıkan gücü ve bu gücün antene gidip oluşan kayıpları (bunlar mesela, gevşek konnektör, ıslanmış konnektör, frekansa uygun olmayan anten, su almış anten kablosu) bize göstermesini istediğimiz ölçü aleti diyebiliriz.
Şunu da söylemek isterim ki proje bana ait değil. Yine bizim gibi radyo amatörü olan yabancı bir arkadaş. Kendisi ile epeyce maille iletişim kurdum yardımlarını esirgemedi ve bu yazısını kendimce paylaşma izni aldım.
Devre Şeması Bu Şekilde
şemayı incelediğinizde kendisi swr köprüsü ile arduino nano arasında 3.5 mm stero jak ile iletimi sağlamış. ben o arada 3’lü mike konnektörü kullandım.
Bu konnektöre kaliteli bir kablo takarak iletimi sağladım. hazır stero jak kablolarına güvenmeyin çok kalitesiz ve enterfere alıyor.
Bu devreyi inşa etmeden önce karar vermeniz gereken bazı unsurlar var.
Troid için FT-50 43 veya 61 malzemeyi HF’de sorunsuzca kullanabilirsiniz. Troiddeki güç seviyeleri küçük olduğu için boyut kritik değildir.
Diyotlar, 1N270 düşük güç olduğundan kullanılması idealdir. 1-25 Watt arasında 80M, 40M, 30M, 20M, 17M, 21M testlerinde +/-0.5w arasında doğru sonuçlar elde edildi.
Dirençler, RF devrelerinde her zaman karbon film direnç kullanımını tavsiye ederim. Karbon film dirençler HF çok kararlıdır. 50 ohm bir referans elde etmek için paralel olarak iki adet 100 ohm dienç kullanmak doğru olur. watt güç aralığına bağlıdır. örneğin 25 Watt için 1/4 yani çeyrek watt gerekli. hesabınızı buna göre yapabilirsiniz.
swr köprüsünü çok iyi bir şekilde muhafaza etmemiz gerekli. ben altınkaya kutu firmasından aldığım alüminyum kutulardan kullanıyorum. detaylı anlatmaktansa kısa bir örnekle açıklayacak olursam, swr köprüsü kutusuz kullandığımda boşta duran bilgisayar hoparlöründen uğultu geliyor ama kutulu iken hiç bir problem yok.
Gelelim ekrana
- Metin tabanlı LCD’lerin çoğunda bulunan Hitachi HD44780 yonga setini temel alan Arduino Liquid Crystal ekranlar için 20 Karakter X 4 Sıralı LCD Sürücü .
- Seri Arayüz: I2C Adresi: 0x26 Pinler: GND? VCC? SDA? SCL
- Arka ışık (Beyaz karakter rengine sahip Mavi)
- Besleme gerilimi: 5V
- Ölçüleri: 60mm×99mm
- Kontrast: Potansiyometre Ayarı
fotoğrafta da gördüğünüz gibi TX bitirdiğinizde ortalama tepe noktasını göstermekte. TX yaptığınızda ekrana milisaniyeler sonra veriler görünmeye başlıyor bunun nedeni ise, dinamik modülasyona izin vermek için tipik SSB değerler ortalama periyotlar ve gecikmeler ile yüklenir. Bu devre de illaki 4 satır ekran kullanmanıza gerek yok. istediğiniz ekranı kullanıp kod üzerinde değişikliği yaparak kullanabilirsiniz.
Arduino
ATmega328 tabanlı arduino nano’yu kullanın, başka bir arduino kullanacaksanız kodda bazı satırlarda değişiklik yapmamız gerek, bu konuda yardımcı olabilirim isteyene.
Arduino için bir güç devresi
böyle bir devre yapabilirsiniz veya LM2596 ayarlı voltaj regülatörü kullanabilirsiniz. Maliyet olarak ikisi de aynı fiyata denk gelir 🙂
KOD
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include <Wire.h> // #include <Wire.h> default to Wiring for Uno; SCL = A5, SDA = A4, VCC = 5V+, GND = GND #include <LiquidCrystal_I2C.h> // The Arduino I2C is hard coded SDA = pin A4) & SCL = pin A5 LiquidCrystal_I2C lcd(0x26, 20, 4); // serial 20 X 4 LCD Display // Address A2 A1 A0 // 0x26 Hi Hi Lo // Pinouts for NANO I/O // Analog VDC signals from Stockton VSWR Bridge Circiut #define Vfwdpin_Anlg 6 // Forward Voltage Vfwd VDC A6 #define Vrevpin_Anlg 7 // Reverse Voltage Vrev VDC A7 /////////////////////////////////////////////////////// // Varibles float Vfwd; float Vrev; float last_Vfwd; float last_Vrev; float Afwd; float Arev; float Pfwd; float MaxFwd; float AvrFwd; float Prev; float MaxRev; float AvrRev; float SWR; float MaxSwr; float AvrSwr; int RFoff; void setup() { lcd.init(); // this clears display for new data lcd.backlight(); // Turn on the blacklight lcd.clear(); // clear all lcd.setCursor (0, 0); // go to Column, Row lcd.print("TA9UNL PWR/SWR MTR"); // displays text lcd.setCursor (0, 1); // go to Column, Row lcd.print(" 30W Max Operating "); // displays text lcd.setCursor (0, 2); // go to Column, Row lcd.print("--------Ready-------"); // displays text lcd.print("my example text here"); // displays text lcd.setCursor (0, 3); // go to Column, Row lcd.print("more example text "); // displays text delay(8000); // delay 8 second } void loop() { // start of main loop // start of main loop // start of main loop // start of main loop // start of main loop // reads inputs before actions can be taken Vfwd = analogRead(Vfwdpin_Anlg); // read forward voltage from RF remote directional detector Vfwd = constrain(Vfwd, 1, 1023); // Vfwd values must be greater than zero to prevent divide by zero in SWR Calc Vrev = analogRead(Vrevpin_Anlg); // read forward voltage from RF remote directional detector ///////////////////////////////////////////////////////////////////////////////////////////// // RF Forward / Reverse Power and VSWR Calculations ///////////////////////////////////////////////////////////////////////////////////////////// /* Step 1 = Convert Arduino A/D steps to current Arduino Voltage = Steps X 5 Volts / 1023 Add Arduino V corrections for diode drop of 0.3 V Arduino Voltage = Arduino Voltage + 0.30 Arduino V corrections for Vpeak to Vrms is factor of 0.707 Tx Line V = Arduino V X 0.707 X 13 turns ratio Amps = Tx Line V / 50 Ohm Termination Resistor Amps = [ Steps X 5 ) / 1023 ) + 0.30 ] X [ 13 X 0.707 / 50 ] = ( ( (Steps X 5) / 1023 ) + 0.30 ) * 0.18382 Step 2 = Convert Line current to power Power = 50 Ohm Line X current squared Power = 50 X Amps X Amps Step 3 = Convert forward and reverse power to VSWR VSWR = (1+SQRT(Prev/Pfwd)) / (1-SQRT(Prev/Pfwd)) */ ///////////////////////////////////////////////////////////////////////////////////////////// float Vdiode = ( Vfwd / 1000 ); // gradual diode drop // Gradual diode drop factor was tested for 40M, 30M, 20M, 17M, 21M // Fowards Watts 0 to 25 W valid +/- 0.5 W // 12M and 10M valid + 0 to - 1.5 W Vdiode = constrain(Vdiode, 0, 0.3); // limit drop to 0.3 V Afwd = ( (Vfwd * 5) / 1023 ) + Vdiode; // split up calculation Afwd = Afwd * 0.18382; // split up calculation Pfwd = 50 * Afwd * Afwd; Vdiode = ( Vrev / 1000 ); // gradual diode drop Vdiode = constrain(Vdiode, 0, 0.3); // limit drop to 0.3 V Arev = ( (Vrev * 5) / 1023 ) + Vdiode; // split up calculation Arev = Arev * 0.18382; // split up calculation Prev = 50 * Arev * Arev; float fp = sqrt ( Prev / Pfwd ); SWR = ( 1 + fp ) / ( 1 - fp ); SWR = constrain(SWR, 1, 99.9); // some more than 100 if ( Pfwd > 0.2 ) // peak sample timer and no RF time out timer { if ( RFoff > 10000 ) // average and peak timer see text (10000 long for SSB, 2000 short for QSK) { lcd.init(); // this extra init clears and cleans up trash when on battery operation lcd.clear(); // clear all MaxFwd = 0; // clears past peaks and averages AvrFwd = 0; MaxRev = 0; AvrRev = 0; MaxSwr = 1; AvrSwr = 1; } RFoff = 1000; } else { RFoff = RFoff + 1; // Countdown timer } if ((( Vfwd - last_Vfwd ) > 3) || (( Vfwd - last_Vfwd ) < -3) || (( Vrev - last_Vrev ) > 3) || (( Vrev - last_Vrev ) < -3) ) // previous reads are checked to reduce display flicker // +/- 3 to filter A/D noise { //////////// Peak Hold /////////// if ( Pfwd > MaxFwd ) { MaxFwd = Pfwd; } if ( Prev > MaxRev ) { MaxRev = Prev; } if ( SWR > MaxSwr ) { MaxSwr = SWR; } ////////////////////////////////// average value integrator Select % values to add up to 100% // 10 / 90 is fast, 5 / 95 is medium, 2 / 98 is slow AvrFwd = ( AvrFwd * 0.95 ) + ( Pfwd * 0.05 ); // average value integrator AvrRev = ( AvrRev * 0.95 ) + ( Prev * 0.05 ); // average value integrator AvrSwr = ( AvrSwr * 0.95 ) + ( SWR * 0.05 ); // average value integrator //////////////////////////////// lcd.setCursor (0, 0); // go to Column, Row lcd.print("=== Transmitting ==="); lcd.setCursor (0,1); lcd.print("FWD "); lcd.setCursor (5,1); // go to Column, Row lcd.print(Pfwd, 1); // displays forward power as xx.x value // ",1" means one decimal place lcd.print(" "); // to clear trailing digits // FWD bargraph lcd.setCursor (10,1); // go to Column, Row lcd.print(" "); // to clear last bar lcd.setCursor (10,1); // go to Column, Row float bar = 12 - ( Pfwd / 2 ); bar = constrain(bar, 0, 10); // limit max bar for (bar; bar < 11; bar = bar + 1) { lcd.print(">"); } // bargraph // end bargraph lcd.setCursor (0,2); // go to Column, Row lcd.print("REV "); // displays menu selected // Clearing not required always 16 Char lcd.setCursor (5,2); // go to Column, Row lcd.print(Prev, 1); // displays forward power as xx.x value // ",1" means one decimal place lcd.print(" "); // to clear trailing digits // REV bargraph lcd.setCursor (10,2); // go to Column, Row lcd.print(" "); // to clear last bar lcd.setCursor (10,2); // go to Column, Row bar = 12 - Prev; bar = constrain(bar, 0, 10); // limit max bar for (bar; bar < 11; bar = bar + 1) { lcd.print("<"); } // bargraph // end bargraph lcd.setCursor (0,3); // go to Column, Row lcd.print("SWR "); // displays menu selected // Clearing not required always 16 Char lcd.setCursor (5,3); // go to Column, Row lcd.print(SWR, 1); // displays forward power as xx.x value // ",1" means one decimal place lcd.print(" "); // to clear trailing digits // SWR bargraph lcd.setCursor (10,3); // go to Column, Row lcd.print(" "); // to clear last bar lcd.setCursor (10,3); // go to Column, Row bar = 12 - SWR; bar = constrain(bar, 0, 10); // limit max bar for (bar; bar < 11; bar = bar + 1) { lcd.print("#"); } // bargraph // end bargraph last_Vfwd = Vfwd; last_Vrev = Vrev; } ///////////////////////////////////////////////////////////////////////////////////////////// if ( RFoff > 10000 ) // no RF time out { delay (200); // delay lcd.setCursor (0, 0); // go to Column, Row lcd.print("No RF, Average/Peak "); lcd.setCursor (0, 1); // go to Column, Row lcd.print("FWD "); lcd.setCursor (5, 1); // go to Column, Row lcd.print(AvrFwd, 1); // displays forward power as xx.x value // ",1" means one decimal place lcd.print(" "); // one space to clear last if > 10 (x.x vs xx.x) lcd.setCursor (10, 1); // go to Column, Row lcd.print(" / "); lcd.setCursor (14, 1); // go to Column, Row lcd.print(MaxFwd, 1); // displays forward power as xx.x value // ",1" means one decimal place lcd.print(" "); // one space to clear last if > 10 (x.x vs xx.x) lcd.setCursor (0, 2); // go to Column, Row lcd.print("REV "); lcd.setCursor (5, 2); // go to Column, Row lcd.print(AvrRev, 1); // displays forward power as xx.x value // ",1" means one decimal place lcd.print(" "); // one space to clear last if > 10 (x.x vs xx.x) lcd.setCursor (10, 2); // go to Column, Row lcd.print(" / "); lcd.setCursor (14, 2); // go to Column, Row lcd.print(MaxRev, 1); // displays forward power as xx.x value // ",1" means one decimal place lcd.print(" "); // one space to clear last if > 10 (x.x vs xx.x) lcd.setCursor (0, 3); // go to Column, Row lcd.print("SWR "); lcd.setCursor (5, 3); // go to Column, Row lcd.print(AvrSwr, 1); // displays forward power as xx.x value // ",1" means one decimal place lcd.print(" "); // one space to clear last if > 10 (x.x vs xx.x) lcd.setCursor (10, 3); // go to Column, Row lcd.print(" / "); lcd.setCursor (14, 3); // go to Column, Row lcd.print(MaxSwr, 1); // displays forward power as xx.x value // ",1" means one decimal place lcd.print(" "); // one space to clear last if > 10 (x.x vs xx.x) RFoff = 12000; // prevents overflow at 32000 and flags average, peak and display clean up on next transmit } } |
Güvenin ama doğrulamayı her zaman yapın!
bu yazı burada bitmedi devamı gelecek