Reading view
via Hackaday: 2024 Tiny Games Contest: Morse Quest Goes Where You Do
Fox flasher MkII update 9/2024
Fox Flasher MkII and several follow on articles described an animal deterrent based on a Chinese 8051 architecture microcontroller, the STC15F104E.
Fox flasher MkII update 7/2019 documented a rebuild of the enclosure etc.
This is an update after five more years operation outside.
Above is a pic of the device. The polycarbonate case has yellowed a little. Importantly the cheap PVA has not crazed, it is kept dry by the outer enclosure, and a hydrophobic vent helps keeps the interior dry.
The battery is a pouch LiPo single cell, it is in good condition. A previous trial with 18650 LiIon cells showed they were unsuitable for the environmentals.
Boxing an Arduino ADF4351 Signal Generator
After reading a Radcom article about a 10MHz locked ADF4351 Arduino controlled signal generator thanks to Alain Fort F1CJN described here, it seemed the perfect module for testing equipment locally as I didn’t have anything like this.
Once the pieces arrived from China it worked perfectly with a 10MHz GPSDO input using the instructions from Alain’s page above and the black ADF4351 board after disconnecting the on-board 25MHz clock.
When connected, the above worked fine and did okay on the desktop it wasn’t suitable for moving about or with the jumper cables for long term storage/use. A box was ordered large enough to place all of the bits in and to allow SMA & DC inputs as well as another shield that didn’t have the headers I’d put on the above one.
The Arduino LCD/Button shield works well but doesn’t lend itself at all well to being installed in a box. The LCD brightness adjustment trimmer is too big, there are some header pins sticking up to the LCD level and the buttons are too far recessed for access through a box. Some discussion on the ukmicrowaves mailing list gave pointers for getting around these problems.
Firstly the buttons were all removed and the trimmer was moved to the other side of the PCB.
I wasn’t sure of the size of buttons to replace the originals with to allow them to be pressed when mounted in the case so I had also ordered a mixed pack on eBay to allow picking the appropriate size. I also ordered some white caps for the tops which would eventually be glued on. I eventually settled on the combination lush with the LCD.
Now came the part I wasn’t looking forward to, drilling and cutting the case. The LCD shape along with the four mounting holes was drawn out based on measurements from the board and cut. I don’t have any nice tools for the LCD rectangle cut so cut two sides with with a hand hobby saw and others with a rotary tool to compare the finish as wasn’t sure of the best approach. The rotary tool was fast but gave a terrible finish, the hobby saw plus sanding gave by far the better result.
The more tricky bit was the button measurements and I couldn’t find a PCB diagram for the board. Putting some fabric tape on the inside of the case and ink on the top of some temporary placed buttons I pushed the LCD in to it’s fitting which after a couple of goes left an imprint on the inside.
This allowed me to drill an initial hole from the inside before turning over to drill an appropriate sized hole from the other side.
Once I had validated the holes were lined up, they were expanded to fit the white caps using a drill and a deburring tool. I then checked the button lengths for the best match, soldered the buttons to the board and glued the white button caps to them.
Three holes were drilled in the side for two SMA and a DC input and some stickers added to make it look better by hiding the messy top cut made by my bad effort with the rotary tool…
The inside has the LCD shield and Arduino attached to the lid using machine screws and some spacers to hold things in place. The Arduino needed it’s DC socket removed to fit flush with the LCD shield. Wires were soldered directly in to the Arduino for the output to the resistor divider and DC input.
In the picture above the DC input is going to the Arduino DC input. However the regulator in the cheap Arduino Uno copy I’d obtained from eBay turned out not to work with a 12v input in the same way as the genuine Uno I tested with had. To sort this I skipped the regulator by putting a small buck converter in the case to let it regulate the voltage to 5v and connected it directly to the 5v on the Arduino. As well as solving the problem, the converter gives better a 6-20v input range potentially at the expense of the converter introducing noise.
The harmonics produced are strong enough to provide an accurate marker at 10GHz and likely beyond.
Better accuracy for the Multi Face GPS Clock
10 bargraphs and progressbars for the LCD of the Arduino
There is a total of 10 different bars and here are the two which are used in the upcoming version of the Multi face GPS Clock.
The main design principle is that no more than 8 custom characters should be required per bar. That means that the custom character set is uploaded just once for each bar, giving much less probability for wearing out the LCD character memory with its presumed finite limit on the number of write cycles.This excludes some fancier bars that require more or less continuous updates of character sets during progression of the bar.
The code and images of the other eight bars can be found on Github.
Multi Face GPS Clock ver 2.0 setup
A brief press on the rotary encoder will enter the setup menu with these options:
< 0 Clock subset >, < 1 Backlight >, < 2 Date format >, < 3 Time zone >, < 4 Local language >, <5 Secondary menu>.
Submenus will lead the user to :
- Menu 0: Clock subset, gives a choice between Favorites (24 screens), All (40 screens), Calendar (13), Fancy clocks (22), Astronomy (16), Radio amateur (13)
- Menu 2, Date format, gives a choice between EU, US, ISO, French, British, Period format, Dot format
- Menu 3: 20 different time zones
- Menu 4: English (en), French (fr), German (de), Norwegian (no), Spanish (es) day names for local time
- Secondary menus will enable a choice of among others GPS baud rate
Chosen values will be stored in EEPROM so next time the clock is started it will start with the values used in the previous session.
A long press will reset the clock.
The code can be found on Github.
Clock cycles through chemical elements
This is screen number 39 for this clock, all of them selectable by rotating a rotary encoder. The project, with Arduino Mega hardware and software is documented on Github, where the current release is v.1.6.0 (2023-04-14).
The display also shows the full name for the element corresponding to the second, as shown above for element 3 which is Lithium. It is located in group (column) 1 and period (row) 2.
Planet positions for the Multi Face GPS Clock
- Azimuth and elevation for inner and outer planets relative to your present location. The inner planet screen shows Venus and Mercury and alternates also every 10 seconds between showing the position of the sun and the moon. The % illumination is also shown along with an estimate of apparent magnitude
- The combined local time and UTC display now has an option to show ISO week number, defined to start on Mondays. (It is my understanding that the week number in the US is different, as Sunday is the first day of the week)
- A new calendar screen now shows Gregorian (western), Julian (eastern) as well as Islamic and Jewish dates. The calculation of the Jewish calendar is tough for the Arduino Mega and takes some 5-6 seconds
- A screen showing GPS Info has also been included. This screen shows the number of satellites in view (line 0), the number of satellites in use for position fix and their average signal to noise ratio (line 1), the mode and status indicators (line 2), and the Horizontal Dilution of Precision, Hdop, and its characterization in plain text (line 3).
- Planet code is based on arduino_planet_ephi_positions.
- Calendars are based on code from Dershowitz and Rheingold adapted for the Arduino
French, Spanish, German, Icelandic, Swedish, ...
The multi-face Arduino GPS clock is inspired by the Clock Kit from QRPLabs. It is an open source project on GitHub, and it now has support for many more languages in the newly released versjon 1.4.0. As a language nerd myself, I love fiddling with multiple languages and character sets.
The local language option is for display of day name in case local time is shown. The default is English for local time. No matter the choice for local time, English is always used for UTC day name. Here are examples:
French:
Even more functions for the Arduino GPS Clock
- Demo mode, where all screens are cycled through, with 10-15 seconds per screen
- Astronomical clock
- Wordclock display
- Roman numbers
- Morse code clock
- A sideral year is one day shorter than a solar year, as noon is defined when the earth points in a particular direction relative to the stars rather than to the sun. Further explanation is here: sidereal time
- Apparent solar time has noon when the sun is exactly to the South. It takes into account the shift due to daylight saving time, the shift due to my longitude relative to the 15 degree zone per hour, as well as irregularities in the Earth's orbit around the sun. See solar time here.
Presentation at Hammeeting 2022
Main links for documentation
- Github: Multi Face GPS Clock
- Documentation on this blog: Arduino clock
Ham meeting 2022
The Norwegian Ham meeting 2022 will take place 11-13 March near Oslo Airport Gardermoen. Norwegian and some Swedish radio amateurs will meet and the program is here (Norwegian). It will be nice finally to meet again!
I will give a presentation on Saturday morning: "An easy-to-build GPS clock for the shack".
More functions for the Arduino GPS Clock
- Additions only
- Also subtraction
- Also multiplication
- and finally subtraction, multiplication, and division
There is a new simpler look for a screen showing rise and set times for the sun according to Actual Civil, and Nautical sunrise/set with definitions 0, -6, and -12 degrees below the horizon.
Updated Arduino Multi Face GPS Clock
The GPSClock from last month has now been updated and software version 1.10 1.1.0 is available on Github. The main upgrade is the possibility to use a rotary encoder for selecting display screen or clock face.
In addition a new screen showing Easter for the next three years, according to both the Gregorian (Western) and Julian (Eastern) calendars, has been added as number 22. The dates are shown in the Gregorian calendar:
Multi Face GPS Clock published
Version 1 of my Multi Face GPS Clock is here, as open source software for the Arduino Mega. It has some 22 19 different display screens showing time, location, solar and lunar positions and rise/set times. It shows UTC time as received from the GPS satellites and local time where it automatically adjust for summer time. The initial screen, no. 0, is this:
The display changes by pushing the right-hand pushbutton on the top, increasing the screen number by one. Similarly the number can be decreased by pushing the left-hand push-button. The potentiometer on the right side adjust the backlight. The clock is built on the same hardware as used for the K3NG Arduino CW keyer.
The date and time formats may be changed, and with US settings it looks like this:
- FEATURE_LCD_I2C - I2C interface to LCD
- FEATURE_LCD_4BIT - parallel interface to 20x4 LCD
- FEATURE_DAY_NAME_NATIVE - to use local language day names for local time
- SECONDS_CLOCK_HELP - to set the number of seconds per minute when time is shown in a normal format in the Binary, BCD, etc displays. Values from 0 (never) to 60 (always)
- DATEORDER = 'L': Little-endian: 22.04.2016 or 22.04 - EU
- DATEORDER = 'M': Middle-endian: 04/22/2016 or 04/22 - US
- DATEORDER = 'B': Big-endian: 2016-04-22 or 04-22 - ISO
- DATE_SEP = '.'; // Alternatives: '.', '/', '–', ' ', ...
- HOUR_SEP = ':'; // Alternatives: ':', '.', 'h', ...
- MIN_SEP = ':'; // Alternatives: ':', '.', 'm', ...
- TimeLib.h - timekeeping functionality
- Timezone_Generic.h - for time zones and automatic handling of daylight saving
- TinyGPS++.h - for GPS data interpretation
- Sunrise.h - for predicting sun rise/set times
- sunpos.h - solar position, taken from the K3NG rotator controller
- moon2.h - lunar position from K3NG rotator controller
- lunarcycle.c - has been adapted for Arduino and is included in the code
Finally figured out the moon
Finally, over the last few weeks I managed to adapt lunarCycle.c to Arduino and get it to work as shown in the display here. My ambition is now eventually to publish this project on GitHub as I’ve had several requests for it.
The display here shows local time and date, moon phase on line 2, present moon elevation and moon azimuth on line 3, and the next rise time of the moon and at which position on the final line. Follow label ‘Arduino clock’ below for more posts about this clock.
Arduino bootloader burner
I have some spare ATmega328 chips that are not programed and can be used in some projects specially now the prices Arduino boards got some inflation.
In order to upload the program to the IC's you will need to burn first the bootloader, at least so that later you then upload via de Arduino IDE.
Schematic and instruction are from here: https://docs.arduino.cc/built-in-examples/arduino-isp/ArduinoISP
End result:
Bottom Arduino is the programmer where you upload the ArduinoISP.ino code, it connects to the Arduino on top (target) that is going to have the chip to be programmed/burn.
The zif socket on the target Arduino just facilitates the insertion of the ATmega IC.
Another view:
For uploading: select the Arduino programmer USB port and then the programmer type "Arduino as ISP", in the end just "burn bootloader".
After bootloader burn:
Have a great day!
nanoBeacon: a simple personal CW beacon
There are times when you wonder if your receiver and antenna are really working as they should. The band is dead, or empty, it’s the middle of the day, the D-Layer is sponging up every radio frequency excitation. Perhaps you can hear a few signals, but they are fleeting — and you need a steady and predictable signal source for a proper test. An RF signal generator will give you a steady carrier, but there are times when you’d prefer to have a true CW beacon to tune onto. This simple, general purpose multiband CW beacon can be run up on the frequency (or frequencies) of your choice, is powered on a 9V transistor radio battery, and can moved to attenuate to the desired signal level, for radio receiver system testing purposes.
This beacon transmits a hard-coded message in morse code on any frequency supported by the si5351 (10kHz to 160MHz). The code targets an Arduino Nano, Uno or bare ATMega328P and an si5351 breakout board. No display is necessary. You can add one, and controls, if you like. The code includes a simple CW keyer for manual sending (not used, but left in place for this application).
Any number of frequencies in the HF and VHF range can be specified by adding them to an array of transmit frequencies. The beacon iterates over the array and transmits the message on each frequency in sequence. The beacon’s CW speed is configurable. Sidetone is available as a 5v square wave on the D7 output. There is no support for switched low pass filters but this would be easy to add.
The Github repository is here.