Translate

Showing posts with label Raspberry Pi. Show all posts
Showing posts with label Raspberry Pi. Show all posts

Tuesday 28 March 2023

Making an attic antenna for LoRa APRS & TinyGS

Recently I changed my job. 

Sadly this led to the loss of use of the wideband Discone antenna mounted for test purposes on the side of the old building, which I'd used for my TinyGS and LORA APRS igate. 

I have got an iGate at my home, however I'm disappointed by it's woeful performance on the co-linear antenna I fitted in November last year, it requires further investigation when the weather improves!


The plan is to mount a simple quarter wave ground-plane antenna in the attic. 

First things first, an antenna is made up around an SMA connector, and given a tune-up using the Nano VNA. You can get rough dimensions from this great on-line calculator. 

Next, I need to come up with a method to mount the antenna. 

The plan is to mount the antenna on the top of a piece of 20mm electrical conduit, as a simple mast. 



A slotted cylinder and locking ring is 3D printed. It's a bit on the thick side, as the first one I made was a bit thin, and split...




The slotted cylinder fits over the antenna radials, and secures it to the 20mm PVC conduit. As the cylinder is now so thick, it's a really snug fit, and the locking ring is not required. 

The 3D model for the cylinder can be found here :


As I want to feed two receivers (one APRS, one TinyGS) I've fitted an LNA and a splitter (both procured from AliExpress). The LNA will overcome the losses in the splitter (especially as I ordered a 4 output splitter by mistake!). You can just see in this photo, that I coiled the coax around the PVC conduit. This type of thing is usually used as a choke balun. It's not really needed here, but was just a convenient way to tidy up the coax! 

TinyGS
 
LORA APRS

















I also connected a third receiver to the output, just as an experiment. This feeds a Raspberry Pi running ionosphere, which as an APRS decoder. This one's tuned to 144.8 MHz, and yes, this antenna isn't going to be much use at that frequency, but let's see how it fares...
Ionosphere can be found at https://github.com/cceremuga/ionosphere
It supports linux, mac os, windows, freebsd, and, of course,  our Raspberry Pi. There's a handy script on the page for installing the software on a pi automatically. 

There's some config to set, but it's quite straightforward.

The Raspberry Pi and SDR are zip tied to the mast...
A supply distribution is made up, consisting of a redundant USB hub & a buck converter. There's a clip-on ferrite between the buck converter and the hub, in an attempt to keep any noise out. This will be fed from a 12v plug in supply once mounted. 











Off to the attic! 
A collegue of mine tells me there's a russian phrase for this kind of construction ... "Проводной с соплями" - "Wired with snot" Yep, it's not tidy!

The Base of the antenna can just been seen, sticking out of a redundant water tank. 







Thankfully, my wifi reaches the attic, and all devices log on to their respective servers...

The two APRS iGates appear on the map ...



and TinyGS is working very well.... This picture was taken after a few days, you can see the increase in the numbers of packets received...
... including some well out of footprint! (Tropospheric ducting, perhaps?) 







Sadly, neither my VHF or UHF APRS stations have captured anything yet, as there's not much traffic here... I'll update you on those as it goes ...




Friday 17 March 2023

PiCow - the Raspberry Pi Computer Originated World

There I was, minding my own business, when the lovely owner of Radios-TV.co.uk commented on my PiPatGen thread.....


Dammit! I was supposed to be tidying the workshop (in all fairness, some tidying occurred!)

A PiCow ... why not ?!?? (if you don't know what C.O.W. is ... look here.)

So I did a spot of research into video playback, and found a brilliant video playback program called hello_video designed for continuously looping video for use on advertising hoardings and art installations.

Excellent.

Some footage was conjured up, and exported from my video editing software (Kdenlive) as an .mp4

hello_video needs a .h264 fileformat to work, so I used ffmpeg to create a raw stream. 

ffmpeg -i input_file.avi -vcodec copy -an -bsf:v h264_mp4toannexb output_file.h264

Brilliant.

I created a COW directory and placed the .h264 file in the directory using scp from my main linux PC.

Issuing the command

hello_video.bin --loop  ~/COW/cow.h264

created a wonderful display! It looped seamlessly!

The command was written into the .bashrc file, so it would start up on boot.

The shutdown scripts were added, in a manner identical to the PiPatGen.

I wanted something a little better to shut down the Pi, rather than having to push a toggle button. 

A small timer was conjured up
5V comes into our circuit, and is used to power up a 4049 inverter IC. There's also a feed to a relay coil, and it's normally open contact. SW1 is a normal DPDT ON-ON toggle. On one switch, the normally closed switch is connected to pins 6 & 12 of the raspberry pi's IO's. The NO contacts on the other pole, are connected to +5V via D1 (actually, D1 is a throwback to an earlier iteration, you can just couple the switch straight to +5V!). This is the power switch. When it's operated, pins 6 & 12 are disconnected, and C1 is rapidly charged up to 5V, which switches on U1A, taking the output of U1A low, this in turn feeds U1B, inverting the signal again, and turns on Q1, which energises the relay and supplies power to the raspberry pi.

When the power switch is turned off, pins 6 & 12 are connected, which initiates the pi shutdown script. C1 is still charged up, and starts to slowly discharge through R2. When it gets to about 50% of it's voltage level, the logic does it's thing, and switches off Q1, removing power from the pi. 

R1 is made adjustable, as the time to shutdown a pi varies on which version of the pi you have and the speed of the SD card. When building the device, manually shut down the pi by shorting pins 6 & 12, and set a timer to see how long the pi takes to completely shut down (you can tell as the SD card access LED stops flashing), then set R1 to allow the relay to switch off in a little longer than the Pi takes to shut down, to allow for a bit of a safety margin. My Pi Zero W takes about 9 seconds to shut down, so I set my timer to keep power connected for ~15 seconds. I used a 10-turn pot to make setting a little easier. (Incidentally, the Pi model B takes about 15 seconds, with the same image)

The 4049 is there just as a buffer. I could have used a FET to switch the relay, as that has a very high impedance gate, and eliminated the logic all together, but I didn't!

If your Pi takes longer than the maximum time, make the value of C1 bigger. 

The circuit was built up on a piece of perf-board.
This hardware also works great on PiPatGen, which would eliminate the shutdown pushbutton.

I did try the image on my PiPatGen's hardware, and even on my resource-shy Pi B, the output was smooth. 

Onto making another case!

The PiPatGen's front panel was modified, and despite my Pi Zero having no audio output, I left the audio jack in place, as I can feed some audio into the front panel if required. 

Clearly no shutdown button is now required. 

Another PlayStation modulator was procured from eBay, another case from eBay seller seemoreitems, and a simplified 3D printed front panel was made.

If you're not using an earlier Pi with a video output socket, you'll need to add a couple of header pins, and connect to that... this is the location of the port on my Pi Zero W. The port is marked up "TV" on this Pi Zero W. Check your Pi is capable of a video output before buying, as the newest models seem to have lost this (certainly the 400) 
The image file for the project can be downloaded from 

Here's the obligatory YouTube video ...







Monday 27 February 2023

PiPatGen - The Raspberry Pi Television Pattern Generator.

Recently I came by an old Model B Raspberry Pi, whilst once the cutting edge of single board computing, is now showing it's age a bit.

So what projects can we create today with it?

How about a pattern generator for our vintage analogue TV sets?

It's got suitable composite video output (I *think* even the current Pi's (although sadly not the 400) have this (if you can find one)), so this project *may* work fine on something newer.

Here's the plan:

Have a set of test patterns available, that we can select, say Test Card F, Test Card C, a PM5544 type, maybe the "Native American" pattern, a grey scale, colour bars, SMPTE, cross hatch for setting up convergence... all running straight at boot, selected by switches on the front panel, and a button to safely shut it down.

The latest version of Raspberry Pi OS lite is downloaded and written to an SD card, we don't want (or need) the additional hassle of running a resource hungry desktop GUI.

The system is booted, with a keyboard and monitor attached.

Using raspi-config, the system was set up with SSH enabled, auto-login at boot, composite output enabled etc etc ... 

I installed the FBI (Frame buffer imageviewer), and wrote a bit of python to act conditionally on the position of a 10-way rotary switch in an attempt to display 10 different pictures. 

Whilst FBI does a wonderful job of displaying the images in the console, no way could I persuade it to act on the position of my switch, unless I issued an ESC or CTRL-C between changes on the keyboard. Even using the signals library and attempting to send a killall would work. Once FBI is running, it grabs hold of the keyboard interface and refuses to allow any changes until ESC or CTRL-C is issued on the physical keyboard. Googling the problem shows I'm not alone in my quest.

So, what else can I do? I tried a package called FIM (FBI improved), which performed no differently. 

I could get FBI to scroll through all the images one at a time, by pressing J to step back and K to step forward in the image sequence. This would work, except I didn't want a keyboard attached. I needed a method of generating a "J" and a "K" and getting it into the USB interface as if it were a keyboard. I did contemplate using an Arduino as an HDI (human device interface, that's a keyboard (or mouse) to you and I!) , there's code that I could implement to do this freely available.
Instead I asked on our street's whatsapp group to see if anyone had an old USB keyboard that they were going to get rid of, and someone did!

Excellent. A Dell keyboard duly showed up at the front door, an ideal candidate. The keyboard was quickly disassembled and the keyboard driver PCB extracted... 

Keyboards are generally wired in a matrix, each key connecting an X and a Y (or rows and columns if you like) , and each switch closes one of the X and one of the Y, giving a unique coordinate for each switch, a bit like this...
In this fictitious example above, we can see that J (SW15) puts a short between X7 and Y2, and K (SW16) puts a short between X8 and Y2. All we need to do if discover what connections are made for J and K on our scrap keyboard, and make connections to the encoder board to a couple of push buttons, to make a keyboard with just J & K on it... simple...

The keyboard matrix consists of three layers of plastic film, the top one contains all our "Y" traces, there's an insulating layer with no traces (just some holes that allow the keys to press through and complete the circuit) and a third bottom layer that contains the "X" traces. 
Identifying the two J & K keys, and their contacts is easy enough, and the traces are discovered by testing with a multimeter for continuity. 

Once these are discovered, it's just a matter if wiring up out two push buttons to the appropriate contacts on the USB encoder PCB. My PCB had a layer of black conductive material deposited on the contacts, to facilitate a reliable connection with the plastic traces on the original matrix. This was removed with a fibreglass abrasive pencil, to reveal the copper traces underneath, so they would take solder. 

Now I had a method of skipping forward and backwards through patterns as required.

Next a shutdown button was implemented using a python script in an identical manner to the hospital radio streaming  codec and monitor. Thankfully FBI didn't interfere with the operation of this. The shutdown button connects between pins 6 & 12 on the Pi's GPIO header.

Now, what about some audio. I created a stereo 44.1KHz wav file in audacity and placed some music on one channel (left), and a continuous 1KHz tone on the other (right), this is set to play using the aplay function on boot. I tried using an MP3 player, but it's glitchy with this resource-shy pi.

Next, everything is set to run on boot, and it all works nicely.


As most of my TVs don't have a video input, I'll need to create a UHF output. This is achieved using a redundant PlayStation modulator, purchased for little money on eBay. The modulator case is opened up to save space, and the small RF metal enclosure mounted inside a clamshell case, along with the Pi. Note the european modulator has a setting for I & G, this is for 6 MHz (I) or 5.5 MHz (G) sound carrier settings. Sadly the PI won't output SECAM. American users wishing NTSC output may wish to use a VHF modulator. 

Note on PlayStation modulator wiring:-

White is video in
Yellow is +5V
Red is audio in
Black is Ground. 

The audio is switched between left and right channels of the Pi's 3.5mm audio jack to select tone or music with a simple SPDT toggle switch. 

A front panel was 3D Printed with the holes in it to accommodate all the required functions. The RF is leaving on the rear of the case, via the coax already attached to the modulator. Power is supplied from a USB lead, via a switch, to the Pi and the modulator. Audio from the Pi is switched between L & R channels, and sent to the modulator, and a front panel RCA socket. Composite video is also made available to the front panel.

A front panel legend is created in inkscape, and printed out and laminated. This is then stuck to the front panel. 

I've made an image of the OS etc, which you're free to download and modify here:


Note the username is doz , and the password is DTW.

Unzip this with 7Zip or similar. Don't use the windows native unzipper. Write the image to a card using Raspberry Pi Imager or Belena Etcher etc ..

CTRL-C or escape will quit FBI (although the music will still be playing in the background!) ...

It may be wise to change the default password (DTW) at this stage, if you're connecting your Pi to the outside world. 

sudo raspi-config 

whilst you're in there , press 1 , and expand the filesystem to make use of all the space on your card.

sudo reboot

If you need to change the overscan settings or change to NTSC, you'll need to edit the boot config file

sudo nano /boot/config.txt

and edit the overscan lines. Note this is in pixels. 

overscan_left=10
overscan_right=10
overscan_top=15
overscan_bottom=15

and then reboot

sudo reboot

For NTSC change:

sdtv_mode=2

to 

sdtv_mode=0

There's 3 images and a 1K/ Music file loaded, you can change these to suit. Images are found in ~/doz/TestPatterns/ and images should be PNG or JPG format. These are cycled through in alphabetical order. To display correctly, images should be 720*576 for PAL, or 720*480 for NTSC.

The music file can be found in ~/doz/Music/ and must be called TCM.wav 

You can use WinSCP on windows to change these via the network, or copy them straight to the card if you run a linux distro (or use the SCP command in a terminal)



Friday 2 July 2021

Yet even more Raspberry Pi NOAA (& METEOR) fun

Well, it had to happen. The Pi Zero reeiver at Evesham promptly refused to talk to our old server a while ago, and the Cheltenham receiver had been disconnected for some time whilst a workshop re-organisation went on.

This morning, the Evesham receiver, rebuilt with a Raspberry Pi 4, and now sporting Raspberry-NOAA-V2


It's comprehensive files can be found here : https://github.com/jekhokie/raspberry-noaa-v2

It's really easy to install, with a couple of caveats. 

When you run install_and_upgrade , it takes a long while to run, even on a Pi4. I thought it had hung up. It hadn't... ! If a setting is altered, it runs much quicker on subsequent occasions!

It failed to install the correct blacklist file. I simply copied the file from the old receiver, and all is well.

It's got a fabulous in-built web console, and it's currently configured to drop it's pictures automatically to a new web page at https://doznoaa.blogspot.com/

- UPDATE - I appear to have upset google, and had posting limited for both the noaa blog, and this one ... another solution is required! I've removed doznoaa... pity it worked well.




The Evesham antenna hasn't changed, and still produces noisy pictures, I doubt it'll ever decode METEOR M-2. I'm planning a QFH in Cheltenham one day !

I'll get the Cheltenham receiver up and running soon... 

Tuesday 26 January 2021

What is this?? The Amazon 2TB External SSD.

"You buy cheap, you buy twice"

An SSD was required for a Raspberry Pi project.  One was ordered from Amazon, 2TB. It was stupid cheap. 

It turns up...








It's plugged into the Pi, ready to clone the OS onto it... nope, not having it. Nothing detected... weird.

It's plugged in to a Windows PC... bing... a 2TB drive... there's a file on it, it's a word document. mustsee.doc. It's written in't fluent Yorkshire... 

What foolery is this??

Rat duly smelt. 

Let's investigate... 

Running Hard Disk Sentinel gives us some info... It's apparently a "Samsung HM201HI" ... except for a quick Google shows no such thing exists. Or is it 2 Samsung HM201HI's? It's also got some duff sectors on it. 

OK, let's run H2testw on it and see if it's really as big as it makes out... 


We may be here some time... 
As it turns out, we didn't have to wait as log as we thought... 
It had fallen over after 320 GB... 





So I sprung it apart ...
... and (no surprise) , it's a 320GB mechanical drive. 
It is, of course, a scam... 

Friday 11 December 2020

Ham radio digital modes interface.

Many moons ago I built an interface to connect my computer to my IC-706IIG transceiver so I could operate a digital mode, PSK31.
I don't do much operating really, but quite fancy coupling my new Raspberry Pi400 up to a radio and having a go with another digital mode, FT8 (I know, I'm a bit late to the party.)

So, the plan is to re-jig my interface and up-grade it a bit. 

First things first, is to work out what I did originally !

It's all a bit of a lash up of parts. 

There's a stipped out USB hub, which has 2 USB to serial adaptors plugged in, and a really cheap USB sound card connected. 

The sound card mic and headphone sockets feed two pots on the front panel to control RX and TX level..



... and onto this PCB, where the audio is isolated by two transformers and connected to the transceiver via a 9-Pin D.










One of the USB to serial converters is just gunged to the back panel. It's the socket on the right. This was originally interfaced to the transceiver to control it's frequency. It's redundant now, as I have USB CAT control leads. 





The other USB to serial converter feeds two optoisolators on the PCB, which are used as KEY or PTT to tell the transmitter to go into transmit. Why two lines to do the same task? Practically speaking, there's no difference between KEY and PTT, except KEY is traditionally meant to mean a morse code or telegraph key, and PTT or "Push to talk" for voice modes. Software generally requires one or the other, rarely (if ever) both, and is generally configurable in your chosen software package anyway, so the RTS or DTR of the serial port can be specified to trigger transmit, as either PTT or KEY. 

A decision is made to rebuild. I want to upgrade the little USB soundcard in there, as it's not a great performer. After doing a bit of research, it seems the Sabrant USB soundcard rates well, and is only £9.99 from Amazon. As pointed out above, there's little point in having two PTT and or KEY isolators, so I'll make one, and make it switchable between a DTR and RTS, and output as either PTT or KEY to two separate jacks.

Both the serial converters in the box can go. I will use an FTDI board to control the PTT, which has the added benefit of only having a 5v output, rather than +/-15V (although I somehow doubt the original RS232 converters actually did this, I may be wrong!). Also it will provide convenient access to a +5V supply to run a level monitoring circuit.

The FTDI board is wired up to give a 5V supply, GND, RTS and DTR outputs.

After a couple of false starts, it turns out that the RTS and DTR signals are inverted, active low, but this was resolved by re-wiring the opto isolator, using the FTDI to sink the current. Whilst this seemed like a good idea at the time, something rang alarm bells with me... a check of the datasheet shows I can only sink 6mA, so I use a couple of BC547 transistors to invert the output and drive the optocoupler. 

More false starts... lord only knows what the isolation transformers I have are, but they're not the right thing at all  (did the original box ever work at all? I'm damned if I can remember!). 


I order some small 1:1 600 ohm isolation transformers from eBay








and conjure up a schematic in Kicad ...
I've changed the BC547 transistors to their smd brothers, to maximise the available space. It actually turned out a bit smaller than needed, but that's no bad thing...



Because (this time) our transformers are 1:1, we may well need to add a bit of attenuation into the signal. This is provided by the four SIT (suit in test) resistors R1, R5 ( transmit audio) and R11, R12 for received audio. RV2 is going to be mounted on the front panel, so it connects via a three pin header. I also plan to connect another front panel pot before the input at J1, it's the same deal as RV2. You may notice the RTS and DTR lines are coupled together. I'll feed one or the other from a change over switch. 

May as well design a board ...















I do love Kicad's 3d modelling. It's not just pretty, its great for polishing the layout of labels etc..






The gerbers are sent to JLC PCB for manufacture, and after a little wait for delivery, arrive. 


















A little while is spent mounting the components. 
The four SIT resistors are set for no attenuation to start with. (R11 & R1 S/C, R12 & R5 O/C)









... and as usual, an error is spotted... thankfully it's just on the legend for the FTDI, the 5V and GND are reversed! 








It's all wired up into the enclosure... I'll tidy it up later, after we're happy with the performance...










WSJT-X is loaded up onto the Raspberry Pi400, and set up, the interface connected to my FT-817, and we're decoding!







The two trimmers are adjusted on the PCB, to give an indication of level on the LED indicators...

Incidentally, my friend Pyers 3D printed the front and rear panels for me.













There's an issue though... the FT-817 won't transmit :( 

The PTT is working just fine, but there's no modulation.




A fair amount of time went into checking and re-checking cables, and audio levels, then caution was thrown to the wind, and the FT-817 gets it's first ever factory reset in the many years I've owned it... after resetting menu 26 to USER-U , it bursts into life and transmits. 

A few minutes later and our first QSO on 2m (144MHz) is complete, with Stuart, G0LGS a few miles down the road in Cheltenham.  

PSK reporter also reports my tiny signal is being heard just outside of Cork, in Ireland, and, although I can't hear him, that's not bad for 5W into a discone antenna!

I've got a number of boards left over... if you'd be interested in one, drop me a line.