This is only a preview of the February 2024 issue of Silicon Chip.
You can view 36 of the 112 pages in the full issue, including the advertisments.
Items relevant to "Microphone Preamplifier":
Items relevant to "Mains Power-Up Sequencer, Pt1":
Items relevant to "ESP32-CAM WiFi Camera Module":
Items relevant to "Raspberry Pi Clock Radio, Pt2":
Items relevant to "Model Railway Points Controller":
Purchase a printed copy of this issue for $12.50.
Raspberry Pi Clock Radio As described last month, this new Clock Radio can also act as a media player and has many alarm options to ensure you wake up at the right time and in the manner you prefer. You can even synchronise the alarms on multiple Clock Radios. Since we’ve already explained how it works, this article will cover construction and how to use it. Part 2 by Stefan Keller-Tuberg T he major functions of the Clock Radio are handled by a Raspberry Pi (model 2, 3, 4, Zero W or Zero 2W). However, we need to add some extra hardware for the time LED display, buttons, switches, audio amplifier to drive the speakers and so on. This additional hardware is hosted on two custom PCBs that mount at right angles to each other, with a series of soldered fillets between them. The construction process will therefore be to mount the components on these two boards, join them together, wire them up to the Raspberry Pi (via a ribbon cable with IDC connectors) and then mount that assembly in the case. Once it’s in the case, it can be wired to all the external switches, connectors etc. The software will function regardless of which bits of additional hardware are connected, so any parts you 72 Silicon Chip don’t need can be left off the PCB without needing to modify the software. For example, if you don’t want the seconds digits, you don’t need to fit that two-digit LED display. Construction We suggest you start by fitting the SMD components to the Display board. This is built on a 150 × 44mm PCB coded 19101242; its overlay diagram is shown in Fig.4. Fit the 48 current-limiting resistors; if you are unsure how well the brightness will match between the larger and smaller displays, you can start by fitting just the 32 resistors associated with the 0.8-inch displays. Either way, it’s easier to solder them in groups. If you’re using different 3mm LEDs than the two options in the parts list, leave the two 1.3kW colon LED series Australia's electronics magazine resistors out for now; otherwise, add them at this stage. It’s easier to solder surface mount components by applying flux to the PCB before positioning the component. When all SMD resistors are soldered, you can clean off the residual flux with isopropyl alcohol, methylated spirits or a specific flux residue cleaner. Stubborn areas can be cleaned with a toothbrush or lint-free cloth. Do this before installing the other components, as you don’t want flux residue to be transferred onto the optical surfaces. Cleaning the board once through-hole parts have been fitted is also much harder. Move on to the 7-segment displays. Make sure you have a clean work surface, as it’s easiest to do this with the front of the displays resting on it. Mount the two 0.8-inch displays on the opposite side of the PCB than the resistors, with their decimal points towards the edge connections. Solder two opposite corner pins first, so you can adjust the displays to be tight against the PCB and nicely horizontal. When you are satisfied with that, solder the remaining two corner pins before completing the others. The 0.56-inch display has a lower profile than the others, so mount it proud of the PCB by a few millimetres to keep its front face in the same plane as the others. Insert the smaller display into its holes, check that it is correctly oriented with the decimal points towards the edge connector and then turn the whole assembly face down onto a flat surface. Press down on the assembly to ensure that the two larger displays are hard against the bench, and you will see that the legs of the 0.56-inch display barely protrude through the PCB. Solder two of its opposite corners as before, then inspect. You can use a straight edge, such as a ruler, to ensure that the front faces of all three displays are aligned in the same plane, adjusting the small one if required until you are satisfied. Then solder the remaining pins as before. Insert the 3mm LEDs into the gap between the larger displays. The cathodes (the shorter leg) are towards the edge connector. Again, place the assembly face-down onto a flat surface and solder one leg only on each 3mm LED. Adjust their angles and heights until you are happy before soldering the other leads. siliconchip.com.au Fig.4: the display board has three 7-segment displays, two colon LEDs and an LDR on the front, while the currentlimiting SMD resistors are on the back. It’s easiest to fit the resistors first, but see the comments in the text about possibly needing to change some of their values depending on which LED displays you use. The two resistors marked with a red arrow can be changed to test the colon LED and the brightness of the small 7-segment display. Fit the LDR next. The procedure is similar to the 3mm LEDs, but the LDR orientation doesn’t matter. Main board assembly The main board is coded 19101241 and measures 150 × 83mm. Fig.5 is its overlay diagram. Before fitting the components, it is worthwhile to verify that the supply rails have not been inadvertently shorted during the PCB fabrication process. Using a multimeter, check for an open circuit between pins 10 and 20 of the 74HCT374 (the diagonally opposite pins) and between pins 8 and 16 of the 74HC139 next to it (also diagonally opposite). It is rare, but if either is shorted, you just saved yourself a headache trying to find an almost impossible-to-find problem after the board is assembled! Start with the surface-mounting amplifier IC (IC13), carefully installing it with the correct orientation. Pin 1 on the chip is marked with a dot or divot and on the PCB silkscreen. Apply flux to the PCB and then position the chip. Solder just one corner pin first and then check that all of the pins align with their pads and the chip is moreor-less centred over the pad area. If not, soften the solder and nudge the chip until it’s properly aligned. When you’re happy, dab solder on the opposite corner and recheck the orientation. Solder the remaining two corner pins before completing the rest. siliconchip.com.au Clean up any bridges with solder wick, then remove any residual flux as you did with the display board. Continue by fitting the throughhole components, beginning with the lowest profile devices. Install the three diodes (watching their cathode stripe polarity) and the resistors, then the IC sockets (notched ends towards the bottom or right), followed by the ceramic or MKT capacitors, except the 100nF capacitor near the top edge of the board. Mount the electrolytic capacitors next, with their longer (positive) lead towards the + symbols. The striped side of the can is negative. Solder the relay next, followed by the transistors from shortest to tallest, except Q2, ensuring they face as shown in Fig.5. Don’t install chips into their sockets just yet, we will do that once the two boards have been joined. You can fit CON5 and the 40-pin header that will go to the Raspberry Pi now, but leave off the polarised headers around the board’s edge. That will give you reasonable access so you can join the two boards. Joining the boards If you’ve never assembled two boards using solder joints at right angles, a little planning will simplify the task. Ideally, the two boards should be aligned close to a right angle, but an error of a degree or two either way will not make much difference. I found that the easiest way to join the boards was to raise the main board above the bench using four PCB standoffs. Using a plastic right angle or similar, carefully tape the main and display boards individually to the right angle, as shown in the photo shown overleaf. Overvoltage protection can trip with poorly regulated supplies One of the 5V plugpacks I pulled from my box of spares measured 5.45V with no load. I figured this plugpack would be OK because the Clock’s protection circuit kicks in at around 5.65V – well above the supply’s no-load output. However, when I actually connected the plugpack, nine times out of ten, I could see the Pi LEDs flash briefly before turning off, a sign that the clock’s protection circuit had kicked in. An oscilloscope revealed that this dodgy plugpack was not very well regulated; at the moment a load was applied, the plugpack’s voltage would fluctuate enough to trigger the protection. I found a simple workaround with a spare 10,000μF electrolytic screwed into the terminals of the clock’s power connector, which smoothed that dodgy plugpack’s ripple enough not to reach the protection-tripping threshold. I have not had this happen with any of my other 5V plugpacks, so we recommend not using a dodgy plugpack in the first place. Australia's electronics magazine February 2024 73 Fig.5: the components on the main board are nearly all throughhole parts. The solder pads along the top of this board will connect to those along the bottom of the display board later. When assembling this PCB, watch the orientations of the ICs, transistors (including Mosfets and the SCR), diodes and electrolytic capacitors. Ensure that the display board evenly overhangs the solder side edge of the main PCB by about one millimetre for the entire length of the mating edge. The slight overhang is so you can add solder beads to the pads on either side of the main board, as there are electrical connections on both sides. That also provides extra mechanical strength. Solder the first joint on the left end of the mating edge, then the one at the right end. For these first two joints, only solder the top side of the main board. This will be fragile, but it allows you to check and easily adjust the alignment of the display board with the main board. If the alignment is imperfect, soften one joint at a time, alternating from one to the other, and make a sequence of minor adjustments until you’re happy. When satisfied, add another three or four solder joints spaced out along the top side to secure it, then flip the assembly over and work on the other side. Solder the opposite ends to shore up the mechanical strength, then solder all the remaining connections. Finally, flip it back over and finalise the original side. The boards will now be very firmly bonded, and you can remove the right angle. Complete the electronics by adding Mosfet Q2, the 100nF capacitor in the top-right corner of the main board and all the polarised headers. clock board can be made from scratch, or you can use an old IDE hard drive cable if you have one. To make it from scratch, carefully position an IDC crimp connector within a vice’s jaws and protect it using small timber offcuts. When you slide the 40-conductor cable into the connector, be careful to align it at right angles. It is easy to accidentally crimp the connector at an angle, in which case the cable probably won’t work. As you tighten the vice, you’ll hear the two ends of the crimp connector click into place, at which point you should ease off the pressure. Old IDE cables can be used for this application, but if the old cable supports two IDE drives, cut off one end of the cable using a Stanley knife. Before you do, double-check that the two crimp connectors have all 40 holes open; some IDE cables have one blocked hole, and those won’t be any good for this project. Next, you need a cable with a 3.5mm stereo plug on one end and a 3-pin polarised header plug on the other. I cut the end off an old 3.5mm headphone cable, stripped back the insulation and crimped the wires to the header pins. I then applied some flux paste, dab-soldered the signal wires and shield, then inserted the pins into their housing. Final assembly The 40-conductor ribbon cable for connecting the Raspberry Pi to the 74 Silicon Chip I found that raising the display board was helpful when joining it to the main PCB. The boards can then be taped together and soldered on both sides. Australia's electronics magazine siliconchip.com.au Because headphone conductors are fragile, I used a sparing amount of hot glue to neatly encapsulate the top of the housing, the loose conductors and the end of the headphone cable. This provides some strain relief; you could also use neutral-cure silicone sealant. Double-check the orientation of the transistors, diodes and electrolytic capacitors on the main board. When happy, carefully install the socketed ICs, noting their orientations & types, and ensuring all pins have correctly entered the sockets. The three chassis-mounting momentary pushbuttons (S2-S4) connect to the main PCB via two-way cables terminated in polarised header plugs, so solder the wires to them and crimp/ solder the plugs on the other end. Similarly, prepare three centre-off momentary toggle switches with three-way cables (that could be stripped from ribbon cable) terminated in three-way polarised header plugs. The banana sockets/binding posts for the speakers (two positive and two negative) are wired to another two polarised header plugs, this time with slightly heavier-duty wire. However, it can’t be too thick, or you won’t be able to get it into the plugs. Medium-duty hookup wire should work. Wire one red and one black terminal to each plug. The polarity doesn’t matter as long as it’s the same for both. For the external 5V supply, solder wires to the chassis socket and then screw them into the pluggable terminal. The positive input should be on the right when plugged into the PCB. If adding a radio receiver input, its audio output goes to a three-way polarised header plug that follows the same arrangement as for the Pi audio input. The GND connection is closest to the relay and the left and right channels sequentially on the other two pins. If your audio source is mono, short the left and right inputs and feed them from the mono source. Connect its power supply to CON5 as per one of the options in Fig.3 last month. Testing the Clock We recommend installing the clock software onto the Raspberry Pi (if you haven’t already) and ensuring the software works before testing the hardware, as explained last month. Commence hardware testing by repeating the earlier multimeter test to verify that the power supply rails are not shorted. The rails will not be completely open-circuit now because there are capacitors and ICs on board, but the rails should not be dead shorted either. You can test the overvoltage protection circuit if you have a current- limited bench supply. If you don’t, we recommend you don’t test it and assume it works because if you apply a high voltage and it doesn’t work, you will fry everything. If you have the bench supply, the test procedure is as follows. Use a voltmeter to accurately measure the applied voltage directly at the variable power supply (if it has an onboard meter, you can use that). Tenths of a When connecting the Raspberry Pi to the Clock Radio, take extra care that the polarity is correct on the ribbon cable, it should be connected as shown. siliconchip.com.au Australia's electronics magazine volt make a difference, so it is important that the voltmeter is accurate and measures to at least 100mV resolution! Use another voltmeter to monitor the voltage between the 0V power input on the board and the tab of Mosfet Q1. Starting low, ramp up the variable power supply to around 4.5V, then slow down. As the input approaches 5V, minimal voltage should be registered on the second voltmeter at the tab of Q1, indicating that the Mosfet is switched on, its default during regular operation. Continue slowly increasing the variable power supply so that its output rises just above 5V. The protection threshold voltage will depend upon the ambient temperature and idiosyncratic characteristics of the 5.1V zener diode and the SCR. When the variable input voltage reaches 5.6-5.8V (certainly below 6.0V), a voltage should develop on the Mosfet’s tab, indicating that Q1 has switched off. Don’t wind the variable power supply past 5.85V! If the SCR has not fired by 5.85V, switch off and look for a problem in the protection components above and to the right of RLY1. When satisfied that Q1 is switching off as expected around 5.6-5.8V and before powering down the variable supply, verify that the voltage across the 2.7kW resistor is about the same as the variable supply output, confirming that the SCR has fired. Finishing the wiring Now you can plug everything into the main board. That includes the buttons, switches, the audio cable from the Pi’s output jack socket to the threepin polarised header on our board, the external 5V supply, the speaker terminals and the optional radio board. Also connect the Raspberry Pi via the ribbon cable, being very careful to get its polarity right. Refer to the adjacent photo and Fig.6 to see how it’s done. Pin 1 of the Pi must be wired to the bottom-left pin of the header on the main board; use a DMM set on continuity mode to verify that before applying power. When you apply power to the assembly now, do it via the clock board only and don’t connect a separate power supply to the Pi. The Pi will receive its power via the clock assembly through the ribbon cable. When power is first applied to the February 2024 75 whole assembly, the display will start blank, and the Pi will go through its booting process. You should see the Pi’s power LED turn on as the Pi boots, but the clock display will remain blank for around half a minute. When the display eventually illuminates, it will show an incorrect time. The Raspberry Pi will be trying to connect to your home network, and when it does, it will grab the current time from the internet. The display will then jump to the correct time and will be time-locked from that moment onward. If the 7-segment displays remain blank, double-check the LED brightness and threshold settings on the web setup page. It’s possible that they have been dimmed very low and just need to be brightened. Otherwise, use ssh (eg, via PuTTY) to connect to the Pi and use the alarm clock debugging modes described in the software installation documentation to check the software’s health. The Pi installation script should have been run to completion without errors. If not, that might be a clue as to why it isn’t working. If the display is still not illuminated, but the software appears to be running, use a logic probe, oscilloscope or frequency counter to check that there is activity on the data and address bus GPIO lines between the two boards and on the PWM GPIO line to the gate of Mosfet Q2. Also check that you have used the correct Mosfet types (they must handle logic-level drive). Matching display LED brightnesses If you have not yet installed current- limiting resistors for the two colon (“:”) LEDs or the small display, you can start to experiment. Turn off the clock and tack-solder candidate resistors for just one each. Segments within an individual display will have the same brightness, so once you’ve matched one to the rest, that resistor value should work throughout. It is easier to use axial leaded resistors rather than SMDs for these experiments unless you have a sample book of suitable SMD resistors. Start with the default values of 430W for the display and 1.3kW for the colon or 470W/1.2kW if you don’t have those other values. A convenient resistor to choose for the small display is the top one closest to the larger digits because it illuminates a segment alongside the larger displays, making it easier to compare. Both colon resistors are convenient to access. Refer to the two resistors marked with a red arrow in Fig.4. Power on the Pi, go to the web setup page and put the clock hardware into a darkened room. Adjust the minimum brightness slider down to a level where the illuminated LED segments are just visible, then set the maximum brightness slider to midrange. Remember to save the setting using the web save button, or the next step won’t work as expected. Choose the “Start the LED brightness test” web button to turn every LED on (displaying all 8s) and force the display to the minimum brightness setting for a moment. You’ll have to judge whether the test segment and the test colon LED are the same, brighter or dimmer than the large numeric digits. The test will also go to maximum brightness for a moment for comparison. If the brightnesses aren’t even, increase the test resistance to reduce Given the height of the enclosure we recommend, it’s best to mount the Raspberry Pi as shown, so there’s enough clearance. Note that the slim radio board I added down the left-hand side, with its antenna passing through a small hole in the rear panel. Fig.6 (right): the wiring diagram for the Raspberry Pi Clock Radio. 76 siliconchip.com.au the LED brightness or decrease the resistance to make it brighter. Always power down the clock before changing resistor values, as accidentally shorting out the current limiting resistor pads can cook your 7-segment display. As you try different valued resistors, make step changes of about 25% in value, as you won’t notice too much difference when trying smaller steps. For example, change from 430W to 560W to reduce the brightness or from 430W to 360W to increase it. After determining the optimal resistances, you can source and install components for all the missing current limiting resistors, and your clock will be complete. If you don’t want to wait, you could order 16 each of the values 360W, 430W, 560W, 750W and 1kW, as it’s likely one of those will give a good match. Don’t go lower than 360W to avoid exceeding the 74HCT4511 package current limit. Testing The proper functioning of each switch is most easily tested by enabling one of the software debug modes to generate a debug log. Do this siliconchip.com.au A close-up showing the headphone cable connection to the Raspberry Pi. in an SSH session; as described in the software installation documentation, the command is “sudo alarm-clock -B”. As you press each button in the switch debug mode, a message will be logged, making it obvious that it is working. Assuming the LED displays are illuminated, if you cup your hand over the LDR (shielding its sides and the front surface) to reduce the light intake, you should see the display dim after a few seconds. LDRs can be rather sensitive to light, and the actual dimming behaviour will depend on what you’ve configured in the Clock settings. You can use the command “sudo Australia's electronics magazine alarm-clock -X” to watch as the software measures the light level. You can verify that the numbers are smaller when the LDR is dark and become larger as the LDR is illuminated more. Suppose you see this behaviour in the debug log, and there is a reasonable variation in the range between light and dark (for example, 500 counts or more). In that case, the circuit is working sufficiently well for you to be able to adjust the web sliders to achieve your desired dimming behaviour. Use the “Start the display test” button on the web setup page to exercise each seven-segment display and February 2024 77 dots. If some LED segments never illuminate, check that the series current- limiting resistors are adequately soldered and that the legs of the 74HCT4511 chips are all correctly inserted into their sockets. If just one of the six digits doesn’t count in the correct sequence, the problem is likely with the associated 74HCT4511. If several of the six digits count incorrectly in the same way, check for problems with the GPIOs used for the data and address bus or potentially with the 40-conductor ribbon cable. The last functions to test are the amplifier and audio inputs. Turn on the amplifier using the media player to stream local media or an internet radio site and verify that you’re getting sound from the Raspberry Pi. If your speakers are dead, plug headphones directly into the Pi to confirm that it is generating audio; if so, you’ll need to debug the amplifier section of the clock. Back on the media player web page, if you type “radio” (without the quotes) rather than entering a path to a media file or URL, you should hear the relay click, and the audio will be taken from the radio input connector. The middle pin of CON5 will be pulled to ground via Q3 when the relay is energised so the radio module will be powered. Putting it into a case You will probably want to mount the clock into an instrument case, as I did with mine. You probably shouldn’t use a metal case for this project because it will interfere too much with the Raspberry Pi’s WiFi and Bluetooth reception. If you’re capable of doing woodwork, I once saw a very cool clock idea that would turn this project into a talking piece. Timber veneer can be translucent if you shine a bright light through it from directly behind. The brightness of the clock’s LEDs can be set quite high, especially the Lumex components, and they should shine clearly through a sheet of 0.4mm or thinner light-toned veneer. You’d want to make yourself an MDF template for the front panel, possibly routing the top edge to round it off and drilling and filing out tightly fitting holes for the seven-segment displays. Mounting the front plane of the seven-segment displays immediately behind the veneer will provide mechanical backing to protect the veneer. You would also need to drill a window for the LDR or mount the LDR elsewhere in the box. I’d love to see photos of this idea if it works as well as I expect. If you choose the more conventional approach and use the plastic instrument case, I used a table saw and the finest toothed blade to cut a 3mm green Perspex sheet to the correct size to replace the front panel. Because the front panel mounting slot is 2mm wide, I firmly taped and then routed the edges of the Perspex so they fitted snugly. 2mm Perspex/acrylic is available, but I’m unsure if you can get the translucent green colour in that thickness. If you feel it’s necessary, you could mask and spray the inside of the Perspex bezel black so that only the displays show through, but I have not done this for my clocks and think they look fine. I mounted my snooze button on the top of the case and all other buttons and switches, speaker posts and the power socket onto the rear panel that came with the case. If you use the recommended While we used a Raspberry Pi model 4 to run our Clock Radio, you can also a model 2, 3, Zero W or Zero 2W. 78 Silicon Chip Australia's electronics magazine instrument case which is 160mm deep, note that the clock board assembly with mounted LEDs amounts to just under 100mm of depth, and the shorter dimension of a Raspberry Pi is 56mm, not accounting for the 3.5mm audio plug and cable which protrude further. That means there isn’t enough room to mount the Pi in the base behind the main board. I mounted the Pi partially overhanging the main board, as shown in the photo on page 76. To raise it above the main board, you can use two long M3 screws through the base of the case, secured with a nut, and M3 standoffs fitted onto the tops of the long screws secured with weak Loctite (eg, 222). Two short M3 screws will hold the Pi onto the M3 standoffs, while the two remaining Pi screw holes overhang the main board and are left vacant. It provides quite a solid mounting, provided you don’t try to insert or remove the Pi’s 40-pin expansion cable while the Pi is screwed down at only two points. I found it sturdier to elevate the Pi using the moulded standoffs in the base of the instrument case, but the hole spacing wasn’t quite right. I elongated one mounting hole to align with the Pi holes and secured the long screws with washers, nuts and Loctite 222. Then with four standoffs attached to the main board and the perspex bezel in position, I carefully positioned the PCB and epoxied the standoffs to the instrument case, saving me the hassle of precisely measuring hole locations and drilling. With the specified instrument case, there is still just enough room to squeeze a small radio board down one side if you’d like to include that option (as I did). To fit larger radio boards, you might need a larger case. The case configuration I adopted has no external access to the USB or Ethernet ports. That wasn’t a significant consideration for me, but if your case is sufficiently deep, you can rotate the Pi so that its network and USB ports are accessible through the back panel. In that case, you’ll need to fold the 40 conductor ribbon into an L-shape to facilitate the connection between the main board and the Pi. I specified a 150mm ribbon cable length and have successfully used that length with some of my prototypes. Shorter ribbons will be OK, but if you need to use a longer ribbon in yours, siliconchip.com.au be watchful for any problems when the LED display gets updated. Suppose you see digit update errors when using a longer ribbon. In that case, you can slow down the settling and latching delay from its current default of 5μs by editing the “alarm_ clock.c” source code file and changing the #defined symbol called WRITE_ BYTE_DELAY to something larger than 5000 (nanoseconds). The microprocessor on the Raspberry Pi consumes 1W, so expect the outside surface of the case in the vicinity of the Pi to be warmer than the room’s ambient temperature. That should not be a concern, but you could add some ventilation to the case if you want to keep it cooler. Using the software The Clock Radio is designed to be intuitive once you’ve logged into the web interface, with plenty of help links to guide you. Still, if you want to tinker with it ‘under the bonnet’ or fully understand how it works, you’ll want more details on how the software works. We’ll start with some of the more common features that most constructors will be interested in, then move on to the nitty-gritty of how the software works. Configuring the Clock via the web interface To reach the web interface, open a browser and go to http://clock.local or whatever system name or IP address you used to SSH into the Clock. You will be greeted by the Clock’s home page, which contains links to the various configuration and media player functions, a summary of the configured alarms, the playlist if media is currently playing, and a list of any other clocks found on the local network if any exist – see Screen 1. Screen 1 shows other clocks that have been discovered on the network. If you only have one Clock, that boxed section will not be displayed. Navigation should be reasonably intuitive. Use the Clock Setup page to configure your preferences. When you hover the pointer over some options, the browser will display hints and a description. Creating alarms is a matter of filling in details from top to bottom on the Alarm Configuration page (Screen 2): what time, how long do you want it siliconchip.com.au Using the Clock as a Bluetooth speaker Raspberry Pi models after the Pi 2 allow the Clock Radio to emulate Bluetooth speakers. Computers, phones and tablets can be paired with the Clock to play audio through its speakers. After ‘pairing’, devices only need to be ‘connected’ whenever you’d like to stream audio via the Clock’s speakers. A “Pair Bluetooth Device” icon on the Clock’s web page allows devices to ‘discover’ it for pairing; you can also enable this mode by simultaneously pressing two of the clock’s physical alarm selection switches. When activated, you’ll have three minutes to complete pairing. You can pair as many devices with the Clock as you’d like. The devices to be paired need to be in pairing/discovery mode at the same time, or they won’t see each other; you’ll need to carefully follow the documented pairing and connection process for your device. If you have difficulties pairing with the clock and are new to this process, confirm the procedure by pairing with something else. When your device is connected, audio will be played through the Clock’s speakers. Set the volume using either the physical volume up/down switch on the Clock or a slider on its web page. Bluetooth audio stutters The clock’s Bluetooth streaming has been tested with Windows, macOS, Android phones and iPhones, and it has worked well using either the Pi 3 or the Pi 4. However, there are certain circumstances where you might notice occasional audio stutter and Bluetooth disconnections. The most obvious situation is when connected Bluetooth devices move beyond their working range. A less obvious reason for Bluetooth stuttering is WiFi interference, as explained in the panel last month. Therefore, you could experience audio stuttering if you access a Pi 3 based Clock’s web interface at the same time as you’re streaming Bluetooth audio to it. Bluetooth channel assignment is typically statically allocated during the pairing process. If your Bluetooth channel experiences interference, you can try resetting pairing and starting over. There is a button on the web interface to reset all paired devices. Suppose you are streaming Bluetooth audio when you start a media player stream on the clock, including when an alarm plays a media source other than the radio. In that case, the clock will disconnect the Bluetooth devices to play the media stream correctly. You will need to reconnect your Bluetooth device afterwards if you wish to continue streaming Bluetooth audio. The finished Clock Radio connected to an iPad via Bluetooth. Australia's electronics magazine February 2024 79 adjustment is applied when the alarm first trips. Each minute after that, the digital volume control will make one step towards the target volume until it is reached (or the next chained alarm trips). So, to gently increase volume when an alarm is tripped, you could set the volume adjustment to -15 and the target adjustment to +0. The alarm will start quietly and gradually get louder until it reaches the normal (system) level. The volume adjustments are added to the current system-wide volume setting! Adjusting the alarm(s) Screen 1: the main web page shows the list of alarms and other Clock Radios on the network (if present). The buttons at the top are hopefully self-explanatory. Clicking on the link outlined in red provides information on what the six buttons/switches on the Clock Radio do. They can be used in combination, so quite a few functions are available. to run, on what days of the week and should it recur indefinitely. The alarm volume adjustment is relative to the current master volume, which is useful when chaining a sequence of alarms from different sources (where each source could have different audio levels). It can also be used to slowly increase or decrease volume with a succession of alarms. Anywhere you see a text box for entering media, you can specify a streaming radio site URL, the full Linux path to a media file or playlist, or the word “radio” (without quotes) to use the external audio input. The path to media files on USB storage devices will normally start with “/media/”. Finding internet streaming sources is easy; any internet radio station that is accessible in your country and that can be listened to with a web browser will work with the Clock. However, determining the correct URL to use with the Clock can be tricky. Instructions on how to use a browser to discover the syntax for a streaming URL are included on the Clock’s in-built web pages (also see Screen 2). Chaining alarms As I live in regional Australia, the national radio network I usually listen to inserts news bulletins from the nearest capital city. Sometimes, your ISP can allocate an IP address from 80 Silicon Chip further afield or the internet’s routing changes, resulting in you hearing news bulletins from a completely different part of the country. I realised I could use ‘chained alarms’ to work around this. When the hour ticks over and the local news commences, I configure a new alarm with its streaming media source being a local news radio station. I configured a new alarm to switch back to the original national stream after the news. The chaining trick works well, and I’ve been enjoying local news by flipping streaming sources for several months. When you chain alarms into a sequence, and a subsequent alarm trips before the timer for the earlier alarm has expired, the earlier alarm is replaced by the subsequent alarm. It will not come back even if the subsequent alarm completes. To return the first streaming source, you must chain a third alarm. Waking up gently You can use alarm chaining to be woken ‘gently’ by setting the volume adjustment low on the initial alarm, then chaining a series of subsequent alarms with progressively increasing volume. But there’s a better way to achieve the same thing. Each alarm includes a “target adjustment” setting as well as the “volume adjustment” setting. The volume Australia's electronics magazine Whenever you adjust the system- wide volume, the volume of all future alarms will adjust accordingly, as if you rotated the volume control knob on your traditional alarm clock and waited for the next alarm to trip. If you’ve specified any non-zero volume adjustments for any alarm, those adjustments will be applied to the current system-wide volume to maintain the volume relativity. The Clock Setup page has a “minimum alarm volume” setting. That ensures your alarms will still be loud enough to wake you if you’ve set a low system-wide volume. Alarm-specific adjustments still apply to the minimum alarm volume to maintain relativity between different alarm levels and to ensure that adjustments continue to work as you expect. However, you won’t be able to accidentally set the system-wide volume low and then sleep through an alarm. I therefore strongly recommend you check and adjust this setting during setup. Using the buttons Although there are only six buttons, they can be used in combination with each other, so you can do more with the buttons than you might think. The full description of button operation is provided in a link you will find on the Clock’s internal web page, in Screen 1. Because all functions can be reached via the web interface, it is not strictly necessary to build any or all of the buttons into the Clock. The choice is yours! 12/24 hour time display The setup web page includes a configuration option for choosing between 12-hour and 24-hour displays. This siliconchip.com.au refers to the LED display on the Clock itself, not how times are shown on the web pages. Times displayed in most web browsers are formatted according to the locale setting on the device running the web browser. That means that although you may have configured one particular format on the web settings screen, your browser might steadfastly show a different format. Automatically resuming playlists If internet streaming is not your thing, you can use a playlist of MP3 files from your own media library for your alarm. You can even chain alarms between your local playlist, the radio and internet streams. When you initially create an alarm and specify a directory as an alarm source, the Clock’s web server will build a playlist file of the underlying directory tree. Similarly, a playlist is created if you use the media player function and specify a directory. When playing a playlist, the Clock remembers the last track and will commence from the following track when it uses the same playlist again. You can therefore chain from the playlist to the news and back again, and the playlist will continue from the track after where it left off. Testing the hardware When testing the hardware to ensure the switches are being recognised and ambient light levels are correctly measured, you’ll need to use the Clock’s software debugging mode to view the debugging log. This means you’ll need to temporarily stop the operating system from managing the Clock. By default, the “alarm-clock” program runs automatically at boot time. If it ever crashes, the operating system will restart it. Usually, its text output is hidden. To reveal and watch the log, you can run the alarm-clock program from within an SSH session and enable debugging. To do this, within an SSH session, temporarily stop the alarm-clock program by issuing the command: stop-alarm-clock The Pi will revert to automatic clock management the next time you reboot. Once the program has been stopped, you can run it manually with the command “sudo alarm-clock”, or use “alarm-clock -h” to display the help options for the program. The command “sudo alarm-clock -V” will run the software with full logging. As it runs, messages and time stamps from different threads will intermix. There’s also a setting that enables logging to a file, for catching issues when you’re not around to look. The Clock’s setup file is located in “/etc/ alarm-clock/setup.conf” and you can edit it to enable file logging using the following command, which will launch a text editor: sudo nano /etc/alarm-clock/setup.conf Look for the two following lines and remove the # symbols in the first column: #VERBOSE=0x090 #LOG_FILE = “/var/log/alarm-clock.log” Screen 2: when configuring an alarm, you can choose the time, duration, which days it’s active, whether it recurs, the volume adjustments and the audio source. February 2024 81 Once you’ve made those changes, press CTRL+O to save them and CTRL+X to return to the command prompt. For more information about the configuration, compiling and playing with the code, consult the readme files in the alarm-clock directory tree you extracted from the .tgz file. Checking that the software is running To check that the alarm-clock program is running, issue the following command: ps -A | grep alarm If it is running, you’ll see a response showing how much CPU time it has used so far. If you see nothing, it is not running. Similarly, you can check for a running pigpio daemon (which must be running for us to control the Pi’s digital I/O pins): ps -A | grep pigpiod We need a Bluetooth control process and its daemon to allow us to play Bluetooth audio, so there should be two items displayed when you run this command: ps -A | grep bluetooth The web server and its workers are usually waiting to receive connections, so there should be several items displayed with the command: ps -A | grep apache To see the complete list of all the running processes along with their memory consumption, type “top” and press Enter to start a self-refreshing display (type the letter q to exit). The top command shows lots of helpful information, including how much CPU time each process is currently consuming, expressed as a percentage of a single CPU core. As there are four CPU cores on most Pis, the Pi will be fully maxed out when the sum of all current CPU utilisation reaches 400%. The largest CPU hog is the pigpio daemon [It isn’t surprising that the biggest hog starts with “pig”! – Editor]. ‘Watchdog’ reboot During the testing and running of the four prototype clocks over the past six months, I saw two of the clocks lock up after a prolonged mains power brownout. 82 Silicon Chip So, the software now incorporates several ways to determine that something has gone wrong and trigger a system reboot when it notices. A hardware watchdog will reboot the Pi if the operating system fully locks up. If just one operating system task locks up, the Clock runs a half-hourly health check, triggering a reboot if something seems amiss. The web server also triggers software checks when somebody accesses a web page. If you run “stop-alarm-clock” for debugging or testing, the health checks will eventually fail, and the automatic rebooting processes will reboot the Clock. You can prevent these automatic reboots after you’ve issued the “stopalarm-clock” command by restarting the alarm-clock program from the command line using the debugging flags you need. The health-check features will not trigger a reboot if they see the alarmclock program running. Internet stream audio delays You might notice something strange when using streaming internet radio stations for alarms. Suppose you set your alarm to trip precisely on the hour and expect the hourly news to wake you, as it would with a regular clock radio. In that case, you’ll discover that streaming radio stations can be anything from a few seconds to a few minutes behind the free-to-air version of the same radio station. The news will never start exactly on the hour with an internet stream; it will always start just a little after! A brief delay with internet streaming is to be expected, but I cannot explain why different radio stations stream with delays that change from day to day and month to month. If you notice this happening with your preferred streams, there’s nothing wrong with the Clock. It is just another artefact of the digital world we live in. If you built a traditional radio into your Clock, over-the-air broadcasts will always arrive precisely on time through that medium. That is probably the only way to guarantee your news service commences with precision. Enjoy your new clock, and if you build a couple, enjoy the liberation of both you and your partner being able to control them from either side SC of the bed! Software updates The Install_Clock script downloads and installs an automatic update client program called “unattended_upgrade” and configures it to check for updates at 3:30am every three days. If an update to any of the installed packages is released, such as a Linux security patch, the automatic updater will download and apply the change automatically. If a reboot is required because of a security patch, that will be scheduled also without human intervention. I have been running automatic updates on several Pis for years and have not struck trouble. However, if you prefer to run updates manually and at your own discretion, you can issue the following command over SSH to stop the automatic updates from occurring: sudo systemctl disable unattended-upgrades You can then manually look for and install updates using the command: sudo apt-get upgrade New versions of the Clock Radio software After installing the clock software, there are two methods you could use to install an update, if one becomes available. 1. Open up the clock, remove the Pi’s SD card, and plug it into your computer. Copy the new software .tgz file onto the SD card, put the SD card back into the Pi, exact the file contents and then rerun the Install_Clock.sh script. 2. Copy the new file into the root of your home account on the Pi over the network, using the Pi’s Samba file server. The following commands can be used to install the new software, assuming you copied the .tgz file into your Pi’s home directory (assuming the update is v02): tar zxf alarm-clock_v02.tgz cd alarm-clock make make install Australia's electronics magazine siliconchip.com.au