WSJT-X has a mode called wspr (weak signal propagation reporter) designed for probing potential radio propagation paths using low-power beacon-like transmissions.
WSPR beacon includes a callsign, Maidenhead grid locator, and power level using a compressed data format with strong forward error correction and narrow-band 4-FSK modulation. The protocol is effective at signal-to-noise ratios as low as –28 dB in a 2500 Hz bandwidth. Receiving stations with internet access may automatically upload reception reports to a central database.You can read more about it and see reports on the wsprnet website.
The receiving part of the WSPR station relies on a RTL-SDR Dongle V2. The V2 is the only version that will work on HF band because it allows the direct-sampling. On the web, you can find a lot of article for the modification of RTLSDR V1 for direct sampling, but it’s not very easy because it’s necessary to do very small solderings. Here there is one of these articles.
The software used for WSPR decoding is the simple an powerful daemon rtldsr-wsprd. If the receiving station has an internet connection, this software also allows automatic reporting of WSPR spots on WSPRnet.
You just have to follow author’s instuction to install and run it.
NOTE: as declared on the author’s github page, the daemon can crash on Jessie OS releases and later versions, whil it runs perfectly on wheezy. If you don’t want to downgrade the release, you can just run the daemon with the “-S” (single pass) option, and it’s ok.
If you want, you can add a simple web interface which I developed to have some statistics of the received spots. My web interface is available here . The interface needs php5 and a web server installed (I use the light and poweful lighttpd)
NOTE1: if you want to run my web interface, you must use a special version of rtlsdr-wsprd modified by me. The modified version shows date and time of received spots. This feature was not present in the original version but it’s necessary for doing statistics. The modified rtlsdr-wsprd version is available here.
NOTE2:By default, the daemon doesn’t write any log, so it’s necessary to do a redirect of the standard output on a log file which will be processed by web interface for statistics. Follow exactly the instructions written on my github page for correctly run the daemon and create the log file.
Here below, I reported the main characteristics of the web interface and some screenshots.
Show number of lines in log
Show RX Load in spot/min calculated on last 20 spots
Show system status table
Show WSPRd configuration parameters in a separate table
Show last spot list, grouped by call (pivot table)
For every call, shows distance in Km and bearings in degrees with reference to receiver locator
For every call, a complete list of received spots is available clicking on “show spot details”
Possibility to make ascending or descendig sort in every column of heard stations
Possibility to show custom info editing custom.php file
You can also schedule daemon restart ad different times during the day following the propagation apertures. In this article, the procedure for setting cron daemon is well explained.
TX PART and RX/TX Switch
After the Receiving part, I decided to implement also the TX part, sharing the same antenna with a RX/TX switch.
There are a lot of solutions for implementing a WSPR beacon. The Ultimate 3S by QRPLab is one of the most elegant, but I wanted to use the same Raspberry and have a compact solution, so I decided to use this nice application: Wsprrpi, which use a GP I/O pin of the raspberry as transmit line!
The output is a square wave with plenty of harmonics (unwanted frequencies above the desired generated radio frequencies) that pollute the spectrum if you connect the RPi output directly to the antenna. The solution is to use a low pass filter between the raspberry and the antenna. The maximum output using Wsprrpi is about 10dBm (about 10mWatts). A lot of OMs use wsprrpi with a filter and no amplifier with good results; anyway a little more power would be better, so I decided also to build a Power Amplifier.
Before starting with the PA, I had to find a solution for the RX/TX switch. The frequencies and the tx power are not too high and a normal electro-mechanic relay is enough for that scope, but the problem is to find a signal for the commutation. The Wsprrpi is an open-source application, so I studied the code and also the Broadcom BCM2837 datasheet for finding the proper registers to configure another GPIO as output at set it high only during transmission.
In few hours (I’m not a professional programmer) I found the solution and successfully tested !
The modified version of Wsprrpi is available on my github and uses GPIO5 as tx switch line (high during TX).
Here Below, there is the complete block diagram of the WSPR station:
There are a lot of QRP power amplifiers that can be used for this scope, but the most interesting for me is the VK3PE project, based on Power Mosfet RD16HHF1 , suitable for Ultimate 3S WSPR beacon.
I removed the input attenuator because the Ultimater 3S gives 180mWatt, while raspberry only 20.
I decided to build a first prototype of the RF part, omitting the 12V switch (later I will explain why), very quickly just to have test it with the raspberry output. See picture below 🙂
The first results were good although the very bad assembly, so I decided to go ahead with a more “engineered” and stable version.
Note: during this first test, I only monitored the output with the oscilloscope and a power meter. I ordered a TinySA spectrum analyzer, but I didn’t get it in time for the test.
Since I had to use an electro-mechanical for the RX/TX switch, I decided to use a Doble Pole – Double Throw switch with the +12V on one channel and RF on the other (see block diagram of previous paragraph).
As described in the schematic notes, the binocular transformer is winded with a couple of insulated wires because this solution gives more power respect to the coax winding.
Here below some pictures taken during the assembly of the PA inside the chassis (dissipator) of an old CB amplifier, reusing the existing PL female connectors.
Before starting to solder the component, I cut the prototype board support tobe fitted inside the PA box. Then I drilled M3 holes into through PCB and into the power dissipator, and threaded these ones with my threading kit.
The power mosfet is also fixed on the dissipator using a M3 screw and thermal paste.
Note: most of the holes were used for the old CB amplifier and not for my PA.
As front panel, I cut a small piece of copper PCB and drilled to holes for the 3mm TX led and the ON/OFF Switch:
On the rear, you can see the female SMA connector dedicated to the RX output. I used a small SMA-SMA pigtail for the connection to RTL-SDR input.
Here there are some pictures of the inside PCB.
The binocular ferrite is anchored to the PCB by a cable-tie wrap.
Shielded cables are all RG174 (it should be better to use teflon insulated coax).
I also added a ferrite choke on the input power cable and winded two turns of cable around it just to be sure to block possible conducted emissions.
This has been the most tricky part of the project, because the Raspberry output is a square wave and it’s not good to put a squarewave onto the air!
The VK3PE project has a Low-Pass filter on the output, but not on the input, because an LPF is already implemented in the Ultimate 3S board and the input is clean enough to be amplified.
If the input LPF filter is not used, the output is full of harmonics up to 200MHz and not usable. Then I built another LPF filter and put it on the input, and the output becomes more clean.
Here below, I took two measurements made with TinySA and a 40dB filter on its input:
The 2nd and 3rd armonic are still present but at about -55dBc so they are acceptable.
Since the RTL-SDR dongle doesn’t have a band pass filter on its input. It works in direct sampling and so aliasing will occur. The RTL-SDR ADC samples at 28.8 MHz, thus you may see mirrors of strong signals from 0 – 14.4 MHz while tuning to 14.4 – 28.8 MHz and the other way around as well. To remove these images you need to use a low pass filter for 0 – 14.4 MHz, and a high pass filter for 14.4 – 28.8 MHz, or simply filter your band of interest.
For this reason, I decide to share the LPF filter of the PA with the receiving path, so I put the LPF between the RX/TX switch and the antenna (see PA block diagram).
After some research on the internet, I decided to use G3RJV’s sheet from GQRP (Chebychev, 7th order) and selected the 30m filter.
The inductors are winded on T37-6 toroids. The characteristics can be found on www.toroids.info.
The filter is arranged on a separate small pcb with standard 2,54mm strip contact. In this way, I can easily change the proper filter if I want to change the operating band. An automatic filter bank commanded by GPIO pins of raspberry is already in my mind and I’ll try to build during some nights 🙂
Here below, the frequency response obtained by nanoVNA is reported below. Consider that with some additional tuning, the insertion loss can be better.
Before operate the PA, the bias trimmer must be adjusted for the minimum voltage. Then the PA can be powered and fed with a test signal (from a raspberry or other lab source, if you have), then the TX input pin can be driven high. At this point, the bias can be slowly adjusted for 650mA (600 is suggested for the Mosfet, but the other 50mA are sinked by the relay and the led).
The output power shall be about 1,5Watts (more than enough for WSPR operations) and the output spectrum shall be like the picture showed in the “Filtering” paragraph.
I left the PA continuously in TX for about 5 minutes to observe the stability and the mosfet temperature.
It should be considered that a WSPR beacon will take about 110 seconds to be transmitted, but the transmission rate should not exceed once every 10 minuts to avoid frequency saturation.
I monitored the temperature with an infrared meter directly on the mosfet body (which have a good IR emissivity) and it was about only 36 degrees, thanks to the oversized heat dissipator. You can also use a smaller dissipator.
Well, about 20 years ago, when I lived in a building with a small roof and I couldn’t install log wire antennas, I decided to build a coax trap dipole for HF bands, based on a project reported in a well known italiank book named “Costruiamo le Antenne Filari” (let’s build wire antenna) by Nerio Neri I4NE and Rinaldo Briatta I1UW.
I was attending high school and I was at the firs experience with my hamradio activity, so I didn’t have a grid dip meter, which was highly reccomended also by the authors to verfy the exact trap resonance.
I wanted to build this antenna anyway, so I tried to replicate exactly the project respecting every measure with millimetric precision, with the hope to do only little adjustment on the dipole arms lenght. But everyone who have worked with RF, knows that in practice it’s very difficult to do a trap dipole with a SWR meter only!
I built the antenna using 2,5mmq electric cable, a 1:1 balun, and built the traps using 40mm diameter plastic pipes for hydraulic systems and RG58 cable.
The coax traps were assembled in the classic configuration of the picture below:
The construction details of the trap were not published for copyright reasons.
Since the plastic pipe was not too strong, I decided to insert a small piece of 16mm pvc pipe inside the trap, and to fix the dipole to this pipe, avoiding the stress or break of the trap (see pictures later in the article).
I installed the dipole on top of a 10m pole and kept 120 degrees as arms aperture. As usual, with trap dipole the tuning should start from the higher band, which corresponds to the lenght between the traps closest to the feeding point, and then go on to the lower bands. I spent a lot of time searching for the first resonance, without any success. With much disappointment, I uninstalled the dipole and left it in a bag in my garage.
When I moved to my actual home, I went in the old garage and… I saw this old project and I remembered how much time I spent trying to let it work! But in the meantime I gained theoretical and practical experience. I don’t have a grid dip meter, but I have a NanoVNA, sto…I decided to begin another battle with this dipole!
I mad some serarch on the internet and I decided to try the following setup for searching the trap resonance frequency:
The coax trap act as parallel resonance circuit, so it looks like an open circuit at resonance frequency, while its impedance decreases at other frequencies. If the VNA channel is loaded on a 50 Ohm load and the trap is connected in parallel to this load, the return loss should show a minimum (optimal) at resonance frequency.
I did the setup as reported in the figure, with SMA to BNC transition, a BNC “T” connector and a BNC 50Ohm load. I soldered the trap terminal to a BNC male connector, and I put this connector to the free terminal of the “T” connector.
I measured all the trap resonance and I immediately understood why the dipole was not working. The 24MHz trap was resonating at about 28MHz!! All the other traps where resonating quite near the expected frequencies, but the 24MHz was completely wrong.
After different tests, I came to the conclusion that I misunderstood (or it was not clear in the book) how to wrap the trap. The plastic pipe lenght is actually too long compared to the coil, if it’s wrapped with no spacing between the turns. So I gradually started to add space between the turns and the resonance started to decrease rapidly. At the end, I reached 24MHz with all the turns spaced to the entire plastic tube, as shown below.
Then I slightly tuned all the other traps, adding some more spacing between turns and fixing the trap with plastic tape at the end. For the 24MHz trap, I decided to add some bi-component epossidic glue for fixing the turns, because the spacing was critical.
I was happy and almost sure to have found the reason the missing resonance when I was a pretty new OM, so I installed the new dipole and started to analize it with my VNA.
As soon as I did the first scan 0-30MHz with my VNA, I saw the first resonance at 24MHz! I just shortened some cm every arm, because I added some centimeters (it’s easy to cut, but not so easy to add lenght…). I was very happy for this first comfroting result which I never had during first experiments, and this told me that I was on the right way because the traps were really “isolating” the arms after the traps themselves.
Although I respected the lenght declared on my book, the resonance at 18MHz was too high, so I had to extend the wires between the 1st and the 2nd trap in order to move the resonance in the range 18.098-18.118MHz.
I had to spend a lot of time an patience to tune and optimize all the resonances, but at the end, I got good VSWR an all the bands except 40meters, on which I never get less than 1.8:1 . I tried to slightly change the spacing between the turns of the trap, but I never got values better than 1.8:1.
Here below, I attach all the measurements done with my NanoVNA on all the design bands.
In the center of the grpahs, there is a windows which shows the results of the bandwidth analysis.
Another behaviour that can be observed, is that the bandwidth drops with frequency. This probabily happens because at lower bands, the RF pass through more traps, and the “Q” factor of the traps affects the dipole bandwidth.
Here below, some picture attached.
In the picture below, I reported the original project lenghts and my experimental lenghts written by hand.
I also write some conclusions here below:
A 1:1 balun is always advisable. I used a commercial ferrite balun.
The project is quite “time-consuming” and need a lot of patience for the tuning. If you have not enough time and you need something “plug&play”, you should be better to buy a commercial trap dipole.
Considering the previuous point, I understand why the multiband trap dipole are quite expensive compared to the material costs 🙂
Always leave more wire length than the project. I suggest 30cm minimum. It’s easy to cut but difficult to add wire (I had to solder the wire and cover the soldering joint with heat-shrink tube)
During the tuning, always care about the simmetry between the lenght of the two arms
Last but not the least: the resonance of the traps shall be verified in lab before dipole installation!
This tiny device measures everything that an OM needs for his experiments and there is a ton of help on the NanoVNA forums and YouTube.
I got a lot of controversial feedbacks on the instrument, especially when used at frequency higher that UHF (theoretically the instrument reaches 3GHz..) so I decided to do a simple test with a 2 ports measurement.
Please note that the following tests don’t claim to be a complete characterization of NanoVNA. I simply write some results after some simple test.
I accurately calibrated the VNA with the calibration kit in bundle.
Important Note: As suggested by NanoVNASaver during the guided calibration procedure, it’s necessary to calibrate the instrument in “stand alone” mode and store the results in one internal memories (I used “Save 0”), for better results! If I skip this step, the S21 calibration becomes really bad at higher frequencies (about 3-4 dB instead of 0dB with the through connection)! I don’t understand very well why this happens, but at the end it’s mandatory to follow the suggestion of calibration assistant.
After the verification of the S21 calibration with the SMA through connector (flat line around 0dB), I started to measure the filter with NanoVNASaver.
With NanoVNASaver it’s possible to export the graph in S2P csv file. This file is in “touchstone” format and data are stored as Real and Imaginary part for every S parameter. I imported this file in excel and then calculated the S21 in dB with the well known formula 20*log[sqrt(Re^2+Im^2)] and I easily got a result comparable to the Nooelec files.
I set the NanoVNA for 1000 points sweep, while the Nooelec includes only 600 points, but Excel can plot different series on the same graph although the “X” axis are different.
The result from DC to 200MHz is here below:
Here below, the results from 0 to 1200MHz, plotted in the same way:
It’s not too bad, considering that the Nooelec measurement is not taken on my filter and one specimen can different from other due to component tolerances. Moreover, as previously explained , the frequency resolution is different between the plots and this could giustify the deeper “hole” in the plot.
In the second figure, a ripple is present in the NOOELEC plot at higher frequencies, so I don’t know if their VNA is properly calibrated.
I’m going to do some other tests up to 3GHz. For the moment, I hope these results could be helpful to those are going to buy ad NanoVNA or a NOOELEC Filter.
I wanted to build a lightweight yagi for portable operation with my SATNOGS Az/El rotator. I surfed on the web and I found the reference site for yagi builders: DK7ZB. In the 2m/70cm-Yagis ultralight session, I found a lot of pictures of very interesting home-made yagis. I discovered that some pieces like central dipole insulator and elements supports are available on Tino’s Funkshop online store (former NUXOCOM.de) and I also discovered that, besides single yagi parts, also complete antenna kits are available.
The material for lightweight yagis is very common, so I tried to compare the price of the Tino’s Kit for 2m/70cm 13 elements Lightweight Yagi kit with the price of the same parts available on my local or online shops. I made a Bill of Material in excel with prices and… the Kit wins! Moreover, I would spent much less time for collecting all the parts and I would have the custom central dipole insulator, which is the most difficult part in my opinion.
I ordered the kit for only 21,49€ (!), payed with PayPal and I got it in a week . The shipment expenses outside Germany are about 15€ and the courier is DHL. In case of small purchases, the shipment is not negligible. Anyway, The packaging was perfect and tha materials inside were unharmed. The kit content is shown below:
The kit is composed by the following parts:
PVC tubes for Boom, 20mm diameter
20mm PVC Clips, for elements support
3,2mm aluminum rods, for all elements except radiator
4mm aliminum rod, for radiator element
7.5 x 4.5 x 4 cm PVC box, for feeding point
N panel connector
Small piece of 16mm PVC tube for RF choke
Small Piece of RG188 cable for RF choke
2 metal lugs to be soldered to RG188
brass terminal strip with screws, 4mm inner diameter
All needed screws
Detailed instructions and datasheet
I’m going to describe main steps for building the antenna
Cut all the elements to the lenght indicated on the datasheet. Be precise at mm! After the cut, remove the aluminum burrs using a flat lime.
Since the VHF reflector is longer than 1meter and the aluminum rods are 1m long, it’s necessary to lengthen it with one rest of piece from other reflectors and using the mammut connector, as the image below:
2. Drill holes in the PVC clips using 3,2mm tip. You can also try to use a 3mm tip and enlarge the hole moving slighthly the drill back and forth. In any case, you can use some glue if the element will not stay in its position. I used a stand for the drill, in order to to perpendicular holes. Anyway, don’t care if you don’t have a stand and the holes are not perfectly parallel to the clip edge, you can do small rotation once the clip is mounted on the boom.
3. Let’s insert the elements in the clamps and mark the element name in order to make the positioning easier.
4. Now, let’s proceed to the most particular part, the feeding point of the dipole.
First of all, the central hole of the insulator shall be enlarged with a 4mm tip:
Then, 2 holes of 4mm diameter shall be made on the sides of the PVC box. The caliper helped me for calculating the exact position. The, the two half dipoles can be pushed inside the insulator, passing through the box walls:
4. Now, two holes of 2,5mm diameter shall be made in the aluminum, using the insulator as guide. Don’t push too much the drill, otherwise the insulator will be ruined!
Now, the two metal lugs can be fixed on the dipole halves by two 2,9x9mm screws:
5. Now le’ts install the N socket connector to the other short side of the box. The connector has two flat notches in the threaded part in order to avoid rotations, so I suggest to drill a 11mm hole first, than work with patience and files (flat and round) as long as the connector fits inside the hole.
6. Now it’s the time to build the RF choke. Let’s drill two 3mm holes in the 16mm PVC tube and do at least 5 windings of coax cable. In my case, I did 6 windings.
Now we have to solder the coax on the dipole lugs and to the N connector. Be patient, because there is not too space inside the box. Nose pliers help in this case. Keep the unshielded part of the cable as short as possible. No matter which conductor you solder on left and right side.
7. Now let’s mark the position of the elements on the boom
This is the final result. The antenna is laying on the table of my Lunchroom. Not too bad 🙂
Since the antenna has an insulating boom, also the supporting tube should be not conductive. I had a 40mm PVC pipe in my garage, so I built this simple 90 degrees support using a small piece of plexiglass, a couple of clips for 20mm tube and a couple of clips for 40mm tube:
Then I started the first tests of my antenna. I put the antenna in my garage (it would be better to work in open space..):
The first check, using default design dimensions, showed this situation for 2m and 70cm:
As you can see, it’s not too worth for the beginning, so it means that I did a good job.
For both bands, I placed three markers: red at the beginning of ham band, green at center and blue at the end. The span is greater than the usable bandwidth in order to have a better understanding of the antenna behaviour.
As suggested on the manual, I started to tune the VHF resonance, so I started to cut 2 or 3 mm at time on both ends of VHF radiator. The resonance vary quickly with the lenghts, so be patient and don’t exceed with the cut lenghts!
At the end of the tuning, I got 980mm. The starting design lenghts was 995, so I cut 15mm. The resonance is shown below. It’s not perfectly centered at 145, but the SWR is <1:1.3 across the whole 2m band, so it’s ok for me:
As suggested by Nuxocom, I started to move the Open Sleeve radiator of 70cm for UHF tuning. The open sleeve is the passive element which is very near to the 2m radiator, and it’s a passively coupled radiator excited by the 2m radiator. I didn’t lower the resonance as much as I wanted in this way, so I started to cut the open sleeve (it’s allowed by nuxocom). At the end of tuning, the open sleeve was 320mm. The desing length was 329mm. The final situation is shown below:
The VSWR response is very flat and it’s <1.3:1 anyway. Good!
Now I’m waiting for real tests/comparison in open air, but i have to wait for better weather condition to go on my roof.
Concluding, the kit is highly suggested for OMs that have a minimum of manual skills and like to build antennas, but at the same time don’t have too much time for collecting material and want to start from a well tested configuration in order to have guarantee of success!
The kit is very complete and nothing else is necessary to build the antenna. The quality of the materials is very high and the price is very cheap compared to local shops.
Building instrunctions are also very detailed and easy to understand.
Everyone can customize the antenna and follow different solutions, but the suggestions, in my opinion, are the best way for good and quick results.
The only modification that I would consider, is to replace the steel screw and nut at the center of the dipole insulator (not visible in the previous pictures) with a nylon equivalent, since the screw is very near to the radiator parts (the center gap is only 10mm).
I didn’t have a 4mm nylon screw during the assembly, otherwise I would have changed it.
I hope this could help next OMs that want to build a twinband yagi and would consider a kit.
In the early 2000’s I bought an F9FT 21 elements antenna. I used it during the golden age of packet radio and I enjoyed the beautiful performances of this yagi for establishing links across long distances. The datasheet and manual can be found here below.
When I moved out of my city for work, I uninstalled the antenna from the roof and I stored it without any maintenance. Recently, I needed this antenna for experimenting a link with New Packet Radio. I recovered the antenna from my garage and I found it in very bad conditions. Consider that the antenna was installed very near to the coast, so the sea salt increased the corrosion.
As you can see, the aluminum parts were full of oxide and the feeding point of the folded dipole was completely broken. I didn’t use more than 25Watts, so I think the plastic was broken due to atmospheric and thermal stress. The inox screws are still perfect, but the clamps are rusty.
I have been tempted to buy a new antenna, but the OM should be patient, should save money and love repairing so… let’s repair!
I started from the more boring job: cleaning the aluminum parts. I decided to avoid acids and use only WD-40 and an inox sponge.
It took about 2 hours but the results are good.
Then, I cleaned all the isolators with a brush and Chanteclair. I also cleaned the inox screws with WD-40:
Now it’s the turn of clamps. I used the circular metallic brush mounted on the drill, and a bench vise to hold the pieces during the operations and work in safety. Here below the pieces before the cleaning
And after the cure:
The final step is the painting with spray Zinc. I used the following, a good quality one:
The clamps looks like new after painting. I preferred to pur 2 coats of paint for a better results.
The last but very important operation is the restoration of the feeding point. I found the complete and original TONNA dipole as replacement part, but it’s not very cheap (about 30$ + shipment expenses). So I decided to build it by myself. I decided to use an ABS 10cmx10cm electric box, an SO-239 flange connector (I didn’t have N type in my drawers, but it would have been better…) and two brass electric terminals for contacting the aluminum elements, which are not weldable. The pictures below explains better my idea.
I installed and tested my antenna and it works perfectly. The ROS is 1.2:1 at 431 MHz. The resonance frequency is slightly shifted down compared to the design (432MHz), but the bandwidth is still good.
In this article I described how all the aprs stations of my region are monitored on a dashaboard and how all the sysops are informed about downtimes of the Igate/digipeaters.
Here below, I’m going to describe another step for the local aprs situation awareness. Sometimes the sysops see stations transmitting a lot of unuseful beacons with excessive rate, both fixed or mobile ones. Wrong beacon intervals can congest the monitor frequency and increase packet collisions, so this issue is something we’re contiuously fighting woth. When one or more TX I-gates are part of the network, particular care must be taken for the smartphone apps like aprsdroid which sends a lot of beacon on the internet (APRS-IS) and then transmitted in RF by I-gates. More and more popular platform like MMDVM, PI-Star, DMR and C4FM contribute to the 144.800 congestion if they are not properly managed or filtered.
Most of the times, if the abnormal beacons are permanent, local sysops shall get in touch with these operators and explain why they’re doing spam and how to fix it, because they normally don’know very well how the APRS works and they don’t know how their packets are transmitted.
In order to identify as soon as possible these situations, I started to think to an automatic message system, based on telegram and similar to the vitality messages described in this article.
The requisites of the oftware are:
Read logs of my aprx server
Periodically check for spam stations in the log
The spam rate shall be adjustable
The check period shall be adjustable
The notifications shall be sent by telegram
The solution was a simple python script based on telegram-send. The script is available on my github repository.
The script performs the following operations: 1) open aprx rf log file and takes the last ‘cycletime’ time interval; 2) for every stations heard, counts the number of beacons transmitted (excluding digipeated packets); 3) for every stations heard calculates the mean tx rate as: heard beacons / interval time; 4) if the rate is > ratelimit, the script sends telegram notification.
Note: the scripts calculates a mean beacon rate over the interval. Sometimes it can underestimates the rate, but I wanted to intercept only serious spam situations.
Installation and configuration
Dependencies: before using this script, intall and configure the library “telegram-send ( https://pypi.org/project/telegram-send/ ) and configure the destination of the notifications (single user, group or channel).
sudo pip3 install telegram-send
telegram-send –configure if you want to send to your account telegram-send –configure-group to send to a group telegram-send –configure-channel to send to a channel.
In the first part of the script, the following parameters shall be edited:
interface: radio interface (CALLSIGN) declared in aprx.conf logfile: aprx rf log file (typically ‘/var/log/aprx/aprx-rf.log’) telegram_conf_file: telegram_send config file (typically ‘/home/pi/.config/telegram-send.conf’) cycletime: cycletime in seconds ratelimit: max frames in a cycletime
The script should be executed every ‘cycletime’ by crontab. Here below, a typical crontab config for 10 minutes interval:
Viaggiando molto, mi son trovato spesso a operare in mobile, prevalentemente in V/UHF. Non volendo “violentare” la mia auto con la perforazione della cappotta e installazione di un’antenna fissa, ho sempre utilizzato antenne a base magnetica. Se da un lato questo tipo di antenna è pratico da installare e lascia la macchina esteticamente “pulita” quando non è montata, di contro presenta lo svantaggio del passaggio del cavo, che rimane pendente nell’abitacolo ed è di intralcio soprattutto quando non si è soli in auto. Volendo trovare una soluzione più gradevole e meno precaria, mi son messo a pensare come poter sistemare le cose in maniera un po’ più professionale. I requisiti della mia stazione mobile sono questi:
Utilizzo di antenna a base magnetica;
Passaggio dei cavi quanto meno possibile penzolante e a vista;
Utilizzo del FT2-D e posizionamento stabile sul cruscotto, con display a vista;
Installazione di un amplificatore lineare V/UHF attivabile tramite switch e installato non a vista;
Ascolto dell’audio in ricezione tramite impianto radio dell’auto;
Sistema “vivavoce” in trasmissione.
Di seguito faccio vedere punto per punto quali soluzione ho adottato.
1) La base magnetica è di diametro 20cm, quindi stabile e sicura anche oltre i 100Km/h. L’antenna che ho sempre utilizzato è la diamond NR770R:
Il cavo è stato tagliato a misura giusto per entrare nell’abitacolo e all’estremità è stato installato un connettore SMA maschio. Più avanti faccio vedere quale soluzione ho adottato per arrivare alla radio.
2) Come si vede in figura, per limitare il penzolamento dei cavi, un coassiale a bassa perdita è stato infilato nel percorso tratteggiato blu, dalla radio fino al montante lato guidatore. In quel punto un connettore SMA femmina rimane esposto, e questo purtroppo è inevitabile.
3) Per l’installazione stabile del FT2-D, ho usato una staffa metallica che si aggrappa alle alette delle bocchette di areazione dell’auto. E’una staffa un po’ particolare che acquistai online un po’ anni fa, ma di cui non riesco a trovare i riferimenti. Mi son sempre trovato molto bene e all’occorrenza si può togliere facilmente, perchè si regge con delle clips elastiche. Allo stesso tempo è stabile e ha sempre retto senza problemi un Kenwood TH-D72 e ora un FT-2D.
4) Il lineare che ho scelto è il seguente.
Ha il vantaggio di avere la selezione automatica della banda V/UHF tramite sensing a radiofrequeza, quindi l’ho installato lato passeggero come dalle immagini, già in posizione ON. L’accensione remota verrà fatta vedere successivamente
5) Per ascoltare l’audio tramite le casse della macchina, ho portato l’uscita audio del FT-2D all’ingresso ausiliario sul frontale della mia autoradio. La qualità ovviamente è ottima se comparata allo speaker della radio, che col rumore dell’auto diventa quasi inutilizzabile
6) Il sistema vivavoce è stata la parte più complessa del sistema. L’attivazione del PTT tramite VOX, sebbene sia disponibile sulla radio, non mi piace molto, anche perchè col rumore dell’auto è soggetta ad attivazioni non volute e la regolazione è delicata. Per avere le mani libere e non incorrere in sanzione (il codice della strada VIETA di guidare con microfoni in mano!) l’unica soluzione era uno switch a levetta di tipo “bistabile”, quindi senza ritorno automatico della posizione, installato quanto più possibile al volante, in modo da togliere la mano destra dal volante solo per un istante. La capsula microfonica ho pensato di installarla vicino al parasole lato guidatore, vicino al montante, in modo che la capsula fosse poco visibile ma allo stesso tempo riuscisse a raccogliere bene la voce. Nelle foto successive, ci sono i particolari della capsula.
Poi ho pensato che la capsula potesse essere utile anche per il vivavoce bluetooth che uso per il cellulare. Ho notato che la capsula microfonica dell’autoradio è di pessima qualità e raccoglie molto rumore e scricchiolii, e l’interlocutore sente molto male. Quindi ho pensato di condividere la stessa capsula microfonica tra vivavoce del FT-2D e vivavoce dell’autoradio, semplicemente aggiungendo uno switch che selezionasse l’uno o l’altro (l’utilizzo in contemporanea è praticamente impossibile). Di seguto trovate lo schema generale che chiarisce meglio le interconnessioni del sistema.
Per quanto riguarda gli switch di accensione del lineare, del PTT e della selezione del MIC IN, ho installato degli switch in delle scatoline di plastica nera all’interno di un portaoggetti alto 1DIN. La foto di sotto chiarisce i dettagli.
Per agevolare l’attacco e lo stacco dei connettori SMA, che sono molto scomodi da avvitare e anche fragili, ho acquistato questo adattatore: Spectrum 8001-SM21-02 (datasheet qui sotto)
che permette di far diventare l’SMA come un Jack, grazie alle sue alette elastiche interne. Non è proprio a buon mercato, ma è di una comodità incredibile. Lo uso da anni e non dà ancora segni di cedimento, si regge ancora stabilmente. Questo connettore l’ho utilizzato sia sulla radio che all’attacco del coassiale sul montante.
In questo video, si vede quanto è veloce l’attacco e lo stacco:
Di seguito, infine un video che evidenzia come basti meno di un minuto per montare antenna e radio e iniziare a trasmettere:
Sperando di aver dato qualche spunto utile a qualche altro OM, saluto tutti gli OM “mobili” come me 🙂
Chi non ha vissuto l’antipatico black-out dovuto al sovraccarico delle utenze elettriche domestiche? Con l’aumentare degli elettrodomestici di uso quotidiano, i 3Kilowatt del contratto standard sono sempre più insufficienti.
Nel mio caso, la posizione dell’interruttore magnetotermico del nostro distributore di energia non è interno al palazzo, ma è fuori in giardino, nel cortile interno del condominio, quindi in caso di intervento della protezione, anche se si è in ciabatte e tenuta domestica, anche se fuori piove o fa freddo…mi tocca scendere a riarmare l’interruttore, con tutte le maledizioni del caso.
Col ripetersi di questa incombenza, mi son messo a pensare a un possibile rimedio. I requisiti principali dovevano essere:
possibilità di monitorare la corrente assorbita a monte di tutto l’impianto domestico
possibilità di impostare la soglia d’allarme a 3KWatt
Quest’ultimo punto per me era fondamentale, perchè quasi sempre chi provoca il sovraccarico è ignaro di cosa sta accadendo nel resto della casa (tipico esempio, moglie che accende in forno in cucina, io che accendo il phon nel bagno), quindi era necessario un buzzer che suonasse per avvisare chi era in casa e quindi permettergli di spegnere l’utenza che aveva provocato il sovraccarico stesso.
Mi son messo alla ricerca di un allarme del genere, ma non ho trovato nulla che soddisfasse tutti e 3 i requisiti.
Tuttavia, sui vari Aliexpress, ebay, ecc.. , ho trovato un interessante monitor di tensione e corrente con soglia d’allarme a circa una decina di euro, con la limitazione che l’allarme era solo visivo, ossia la retroilluminazione del display inizia a lampeggiare. Poco utile, se chi è in casa non sta lì a guardare il display. Non disperando, ne ho comprato uno per provare ad aggiungere un allarme acustico.
Ho comprato il modello GSOT5600-100, con le seguenti caratteristiche:
monitor dei parametri elettrici: tensione istantanea, corrente istantanea, potenza istantanea, KWh totali consumati, )
Funzione di allarme di sovraccarico con soglia regolabile e retroilluminazione lampeggiante
Tensione di funzionamento: 80-260Vac
Max potenza: 100Ampere / 22KWatt
Frequenza di lavoro: 45-65Hz
Precisione di misura: Classe 1
LCD a cristalli liquidi con retroilluminazione
Questi dispositivi sono disponibili con due tipi di sensing di corrente:
sensore a “clamp” toroidale in cui va fatto passare uno dei due fili della monofase domestica.
shunt di corrente
Tra i due tipi, ho scelto primo, anche se leggermente più costoso, perchè non mi piaceva affatto l’idea di far passare 3Kwatt attraverso la mia “cineseria”. Dal punto di vista della sicurezza, è sicuramente meglio avere la clamp galvanicamente isolata.
Aspetto circa 3 settimane prima che l’accrocchio arrivi dalla Cina e subito lo provo, collegandolo alla rete e facendo qualche test con dei carichi. Dalle prime prove, la precisione non mi sembra male, e il display mi appare subito chiaro e intuitivo. Non male insomma.
Provo anche a impostare una soglia d’allarme a 1KW e a far scattare l’allarme accendendo una stufetta. Il display inizia a lampeggiare di blu come atteso. Perfetto!
Penso che se il display lampeggia, ci deve essere per forza un punto del circuito in cui prelevare questa tensione di comando dei led e riutilizzarla per far suonare un cicalino.
Quindi parto subito ad aprire la scatoletta di plastica e a ispezionare il circuito. noto che il PCB ha due lunghe strisce di contatti passanti che portano tensione al display, dalla faccia opposta del lato componenti.
Faccio scattare l’allarme e inizio a misurare con un multimetro tutti i pin e … in pochi minuti becco subito quello che porta la tensione ai led della retroilluminazione! Su tester vedo una simpatica 5Volts che va e viene allo stesso ritmo del display. OK, sento di essere già a metà dell’opera!
Ora devo solo capire se quella tensione può alimentare un buzzer. Con una lente d’ingrandimento seguo la pista del circuito stampato e vedo che va a finire su un transistor formato SOT23.
Potrebbe reggere l’assorbimento di un cicalino, ma non voglio rischiare e decido di usare quella tensione solo come comando e montare un transistor più robusto su una millefori. La tensione di comando del cicalino vorrei prenderla in un punto a monte dell’alimentazione del PCB, in modo da essere sufficientemente robusta. Con un po’ di intuito, mi metto a cercare le capacità più grosse del circuito, che di solito servono a “spianare” la tensione di alimentazione, e subito trovo una bella 12Volts su un condensatore. Decido che sarà lei ad alimentare il cicalino.
Su un pezzettino di millefori di circa 2cmx2cm monto un 2N222 con una resistenza di 6,8K sulla base. Collego il comando di base al punto del circuito individuato precedentemente e la tensione sul collettore alla 12Volts del condensatore. L’emettitore del transistor al cicalino, come da schema seguente:
Di seguito un’immagine della millefori adagiata sul retro del misuratore di corrente. I fili entrano nel misuratore dopo aver fatto una piccola feritoia nell’involucro di plastica, col taglierino.
Provo il tutto e funziona al primo colpo! Ora non mi resta che inscatolare tutto in una scatolina a tenuta stagna. Posso scegliere anche una soluzione non troppo elegante esteticamente, visto che il tutto sarà installato accanto al quadro elettrico di casa, nello sgabuzzino. Opto per una scatola Gewiss 10cmx10cm opportunamente sagomata. Prevedo anche uno switch per disattivare l’allarme acustico (meglio non svegliare i bimbi quando dormono! Preferisco scendere in giardino a riattivare l’interruttore piuttosto che svegliarli 😛 )
Con una punta da muro da 6mm, inclinando opportunamente il trapano, faccio un foro in modo da portare il toroide di misura nel quadro, come da figura sottostante:
I use Aprx from many years and I think it’s one of the most complete and flexible APRS Software available. Nevertheless, every time that a sysop wants to check his aprx node, he has to check the log and try to analyze it. Even simple operations, like check if a certain callsign has been heard by the node, could be cumbersome.
In case of monitoring or troubleshooting, I usually download the log file and then import it in excel and then analyze it by filters and other useful functions.
Before Aprx, I used for many years the aprsd daemon, and it implemented a simple but very useful web interface with simple reports. While I was remembering that interface, I thought that a web interface could be useful for aprx too, and I started to google for this kind of software, hoping to find a plug&play solution.
I was very surprised to find something. I tried just a pair of interfaces, then I choosed “aprx simple webstat“, written by Peter, SQ8VPS.
This is a simple statistics and information generator for APRX software, which allows to monitor load, frames, stations details, statistics from selected time window and more.
I quickly downloaded and installed it. I got it working after few minutes, because I already had lighttpd server installed on my raspberry, so just did a quick configurazion of the log file path and other few things.
I started to use it and I liked it very much. I contacted Peter by email, and I congrats with him for his nice work. Peter is a young OM from Poland, he still attends school but he’s very clever and has very good programming skills and know-how about aprs.
He was very surprised and happy that someone was using his interface!
We had a nice opinions exchange and he asked me for new ideas for improving the interface.
Thanks to this renewed enthusiasm, I started to propose the improvements and he started to implement my ideas and releasing new versions.
I always intend hamradio hobby like an opportunity to explore and learn new things, so I decided to take this occasion to learn php.
I already developed something in jsp, but php was a quite new language for me, and it was a challenging activity.
In the meantime, Peter became very busy with school, driving license and other things, so, in the last period, I developed some new features and bug fix by myself and Peter did the “merge” on github.
Hereafter, I breafly explain the main functions of the Software:
Polish and English language
Possibility to monitor multiple radio interfaces
Possibility to show cusom info and custom logo file on the bottom of the page (edit “custom.php” file, which can contain HTML and PHP code)
Management of SSn–N “State” abbreviations aliases;
– total frames in log
– frames received by radio
– frames transmitted on radio
– frames received from APRS-IS
– received frames/sec (calculated on last 20 frames)
– transmitted frames/sec (calculated on last 20 frames)
System status table (reads parameters directly from OS):
– OS version
– kernel version
– Aprx version
– System uptime
– CPU temperature
– CPU frequency
Aprx config table (read parameters directlty from aprx.conf):
– Beacon interval
– APRS-IS server
– Location coordinates
– Tx active/not-active
– Number of radio ports
– Digipeater active/not-active
Heard station list table (observation period selectable by the user in a drop-down list)
– Heard Callsign
– N. of packets heard for callsign
– Direct link for showing the station on aprs.fi
– Static/moving indicator
– Via indicator (digi/direct/digi+direct)
– Raw packet view for each callsign
Station details page:
– N. of frames totally heard
– Last position frame heard
– Station position (lat,long, distance and bearing from your location)
– Frame comment
– Frame type (normal/Mic-e)
– Station symbol
– Frame digipeating path
– Transmitting device (device list can be updated by dedicated file. Both new and legacy Mic-e devices are included)
– Last status frame heard
– Status field
RAW FRAMES page: log of raw frames received from a specific station
Possibility to sort the table in ascending or descending order on each colum.
Live monitor page: ajax page for watching ax25 traffic in realtime. Fields are coloured for better readings
When I built a telemetry system for DMR repeater, I observed high temperatures of the transmitting radio, especially during summer and hot periods of the year.
I realized that a cooling system could be helpful to dissipate the heat produced by Motorola radio.
The acquisition system was already done, so only the actuation system was needed.
I searched on the internet, and I found some scripts used to control a fan installed on the microprocessor of the raspberry Pi.
I took one python script and modified to acquire the temperature of the external sensor connected to the MCP3008.
The original script was here (reads the System CPU temperature) and the customized version is here.
Some notes for the correct script configuration:
Script Cycle time must be configured. Default value of 30sec is good for starting;
Log file name must be declared.
Output pin to be used for fan switch on;
Both upper and lower thresholds must be declared, as for every hysterical control;
The logging function can be useful during the first tuning period. Once the thresholds have been found, the function can be eliminated;
Value, beta and pull-up resistor of NTC must be declared inside the script for a correct temperature conversion. The NTC, in series with the pull-up resistor, must be connected to the the same 5V coming from the Raspberry and powering the MCP3008.
ADC channel connected to the NTC sensor must be specified.
A compensation variable is useful to align the temperature reading to a reference thermometer.
I used two small 12V PC fans, which fits well to the Motorola heatsink:
The Raspberry output pin cannot directly drive the fan, so a small BJT driver is needed. I built one with a 2N2222 NPN transistor and a 1KOhm resistor, 1/4W on the base.
Here below the schematic is reported:
This is the prototype board of the fan driver:
The general block diagram is the following:
Once the hardware is ready, we can try to manually switch on pin 25 and see if the fans start, using “GPIO” library from shell:
gpio mode 25 out
gpio write 25 1
The above commands set pin 25 as an output and then sets the pin to a logic 1.
If the fans starts, we can try to configure and launch the script. Remember to give the execution permission (sudo chmod +x MCP3008_raspy_thermostat.py).
In the logfile, we can read the temperature acquired by the NTC and eventually tune the “compensation” variable to align the temperature reading with a reference thermometer.
Then, we can tune the thresholds for best results.
I hope this project could be useful.