
This new limited edition Mountain Dew is a “tropical citrus punch” and it quite good. The graphics on the bottle show sliced oranges and limes and I definitely get a lot of that. I’d drink this again and give it an 8/10.

This new limited edition Mountain Dew is a “tropical citrus punch” and it quite good. The graphics on the bottle show sliced oranges and limes and I definitely get a lot of that. I’d drink this again and give it an 8/10.
We noticed a robin trying to build a nest on top of our back patio’s security camera. I wasn’t going to let that fly, but after seeing how much is costs to by 20x the amount of bird spike I needed, I made my own. I cut a scrap piece of aluminum, drilled holes in it, added nails, and held them in place with double-sided tape. I wasn’t confident it would hold, so I used zip ties.


I tested out a DF3 earlier this year and absolutely loved the feel of the lie angle balanced putter. I feel like not having to fight the torque you get from other putters completely frees up my stroke. Of course I went with a custom order and got a blue one, which arrived today!





I went with the Press II 3° grip and alignment mark C.
I finished putting up the golf simulator at the end of December and I think three+ months is a pretty good period of time to have some thoughts about everything. In case you missed it, check out my serious on the build:
How much have I really been using it? Initially, not as much as I’d hoped. I’d say I was getting downstairs for 3-4 days a week. Over the last several weeks, especially after getting outside for a quick nine holes, I’ve gotten the itch to play, so I’ve been putting in more time to get ready for the 2025 season. I’ve been able to get on the golf sim 5-6 days a week.
The computer has been great and no complaints on that build. I can always upgrade memory if I need to. The mouse kind of sucks, so I may switch to a wired one. I do regret not getting a larger monitor, especially with the additions I mention later.
The enclosure is holding up well and all of the padding is great; I’ve only had a handful of bad ricochets. The screen does show ball marks (only noticeable if the projector is off), but that may be my fault for using balls too long and initially using some balls with logos or a little marker on them. The turf is holding up well and I don’t see any wear marks where we stand. The hitting strip is really good too and I haven’t felt any wrist or elbow pain at any point. I feel like I can tell when I hit a fat shot, so it doesn’t seem like the club is bouncing up in to the ball for a better shot.
The projector has been fine. There are better ones, but I’m not sure the extra cost is worth it yet, because prices will come down on the higher level 4K ones. I couldn’t be happier with the ProTee VX launch monitor paired up with the GSPro software. My yardages are consistent with what I’d expect on the golf course and I’ve had very few shots get missed. ProTee in frequently updating their software and there are so many new courses being updated and released for GSPro every week.
This review may sound like a broken record with everything being so great, but I think that’s due to how much research I did.
This week I added swing cameras for front and down the line views. Luckily I ordered this stuff from AliExpress before the tariffs kicked in:
They just came in, so I haven’t had a lot of time with them, but so far the cameras are a sweet addition. I need to do some cable management.

I’m working on some fixes and it’s great to be able to check my positions after each swing.
I may sign up for lessons on Skillest, but I’ll see how these fixes go first.
I started planning to build a cart for the sets of clubs we bought at an estate sale. Hopefully I’ll make progress soon, because I’m getting tired of looking at them lined up along the wall.
I also want to build a control box with a bunch of buttons I can press with a club so I don’t have to use the keyboard and mouse during a round. That’ll be a fun project combining electronics and woodworking.
In our basement we have a baby gate, which surprisingly keeps our cat out of the gym and golf sim areas.

Sometimes we forget to close the gate, so I needed a sensor to monitor its state. I still had the breadboard from the air quality monitor project, so it was quick to add a magnetic door switch and test things out with the D1 Mini clone.

I have extra sensors, so those were kept in the project and allowed me to get rid of the shitty DHT22 I added to the golf remote. Everything worked, but I want to save my last two D1 minis and use them for something with the screens I have for them. So I swapped in an Adafruit Feather HUZZAH ESP8266, which I got with AdaBox 3 or 4 in 2017 and made minor changes to the code.

Parts:
References:
ESPHome YAML code:
substitutions:
slug: gate
friendly: Gate
esphome:
name: ${slug}
friendly_name: ${friendly}
esp8266:
board: huzzah
logger:
level: WARN
api:
encryption:
key: 'xxx'
ota:
- platform: esphome
password: "xxx"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: x.x.x.x
gateway: x.x.x.x
subnet: 255.255.255.0
i2c:
binary_sensor:
- platform: gpio
pin:
number: GPIO14
mode:
input: true
pullup: true
name: ${friendly}
device_class: door
sensor:
- platform: htu21d
model: SI7021
temperature:
name: Temperature
id: ${slug}_temp
humidity:
name: Humidity
id: ${slug}_humid
- platform: aht10
variant: AHT20
temperature:
name: AHT21 Temperature
id: ${slug}_aht21_temp
humidity:
name: AHT21 Humidity
id: ${slug}_aht21_humid
- platform: ens160_i2c
address: 0x53
eco2:
name: CO²
tvoc:
name: VOC
aqi:
id: demo_aqi
name: AQI
compensation:
temperature: ${slug}_aht21_temp
humidity: ${slug}_aht21_humid
text_sensor:
- platform: template
name: AQI Rating
lambda: |-
switch ( (int) ( id( ${slug}_aqi ).state ) ) {
case 1: return {"Excellent"};
case 2: return {"Good"};
case 3: return {"Moderate"};
case 4: return {"Poor"};
case 5: return {"Unhealthy"};
default: return {"N/A"};
}
I also added this to my configuration.yaml because I wanted a gate icon instead of the door, due to the device class of the binary sensor:
template:
- binary_sensor:
- name: Gate
unique_id: gate_template
device_class: door
state: "{{ is_state( 'binary_sensor.basementgate_gate', 'on' ) }}"
icon: |
{% if is_state( 'binary_sensor.basementgate_gate', 'on' ) %}
mdi:gate-open
{% else %}
mdi:gate
{% endif %}
I figured I might as well use one of the fancy Adafruit Perma-Proto boards I had, which makes soldering all of the connections much easier. As a bonus it was nearly a perfect fit for the case.





The magnetic switch and Si7021 will live outside the box, so those couldn’t get soldered yet. After connecting power I checked the ESPHome logs to make sure everything was working.

I cut holes in a project box, finished soldering, and used hot glue to secure the board..




I reversed the swing of the gate, placed my device, and attached the two sides of the magnetic switch to the gate.

In Home Assistant an automation runs whenever the stairs light is turned off to check the state of the gate. If it’s open, a notification is sent to our phones.


I’m enjoying these little electronics projects, and it feels good to finally put various parts to use.
I’ve had this Rigid shop vacuum, from Home Depot, for about 20 years.

At some point in the last year, the switch started having issues. The vacuum would only turn on if the switch was actually pressed in, instead of toggled. I’ve never seen that happen, but I’m guessing it was from the accumulation of dirt and dust getting inside the switch body. Then the switch wouldn’t even push in, so the vacuum wouldn’t run.

I figured it would be an easy switch replacement, so I removed a bunch of screws to take off the cover. Sure enough, the switch had two wires clipped on to it, and was held in place by the case.

I had a perfect replacement, salvaged from some device I don’t remember, in my collection of electronics parts.


It fit like a glove and the vacuum turned on as if it was brand new. I screwed the case back together and called it done.

The upgraded IKEA air quality monitors I did work great, but the LED indication isn’t great for a bedroom and the fan noise was annoying in my office. So I wanted to create a couple of my own devices for those locations. I used:
The SEN50 is a big upgrade over the PM sensors used in the IKEA devices and I used the Si7021 in place of the BME280 I had used because I think they’re a bit better. I soldered 47µF electrolytic capacitors from a big kit I’ve had (similar on Amazon) to the ENS150 modules to improve their power.

Then I attached 5 of the crimped wires to a 6P JST connector, which is what the SEN50 modules require. I’m note sure why buying the actual cable for these SEN50s are so expensive, but I got the entire JST kit for cheaper than a couple of the special cables.

All three sensors communicate with the microcontroller over I²C, so a breadboard test was easy to wire up. The SEN50 does require 5 volts instead of 3.3, so I’m glad I checked.

The ESPHome YAML code is very similar to the code used for the modified IKEA air quality monitors.
substitutions:
slug: demo
friendly: Demo
esphome:
name: ${slug}-wemos-d1
friendly_name: ${friendly} Wemos D1
esp8266:
board: d1_mini
logger:
#level: WARN
api:
encryption:
key: 'xxx'
ota:
- platform: esphome
password: "xxx"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: xxx
gateway: xxx
subnet: 255.255.255.0
i2c:
frequency: 50kHz
sensor:
- platform: sen5x
pm_1_0:
name: PM 1µm
accuracy_decimals: 0
pm_2_5:
name: PM 2.5µm
accuracy_decimals: 0
pm_4_0:
name: PM 4µm
accuracy_decimals: 0
pm_10_0:
name: PM 10µm
accuracy_decimals: 0
- platform: htu21d
model: SI7021
temperature:
name: Temperature
id: ${slug}_temp
humidity:
name: Humidity
id: ${slug}_humid
- platform: aht10
variant: AHT20
temperature:
name: AHT21 Temperature
id: ${slug}_aht21_temp
humidity:
name: AHT21 Humidity
id: ${slug}_aht21_humid
- platform: ens160_i2c
address: 0x53
eco2:
name: CO²
tvoc:
name: VOC
aqi:
id: demo_aqi
name: AQI
compensation:
temperature: ${slug}_aht21_temp
humidity: ${slug}_aht21_humid
text_sensor:
- platform: template
name: AQI Rating
lambda: |-
switch ( (int) ( id( ${slug}_aqi ).state ) ) {
case 1: return {"Excellent"};
case 2: return {"Good"};
case 3: return {"Moderate"};
case 4: return {"Poor"};
case 5: return {"Unhealthy"};
default: return {"N/A"};
}
These resources helped out:
The project boxes had some standoffs on the bottom, which I snipped off and then sanded with a rotary tool. I pulled out my box of proto boards and found a size almost exactly double what I needed, so I cut out a sliver and ended up with a piece for each box. I also cut vent holes for the SEN50 sensors.








In order to get everything to fit I decided to put the microcontroller on the bottom of the board. After mocking things up I did all of the soldering. I was hoping to be able to mount everything with connectors so it could easily be taken apart, but there wasn’t enough room and I didn’t want bigger boxes.












I did some continuity testing along the way and everything worked when I connected power. With the boards ready I cut more access and ventilation holes in the boxes.



I soldered the Si7021 on to its wires outside of the enclosure so it wouldn’t be exposed to unnecessary heat and used hot gun to secure everything.







I’m really happy with how these turned out. Here’s a view of the office data on my Home Assistant dashboard.

This was definitely a project where I wished I had a 3D printer to design custom boxes. Some day, when I’m caught up on my project list and can give it proper attention. I know if I get one now I’ll spend a ton of time with it and neglect other projects in my pipeline.
IKEA recently discontinued Vindriktning, their older air quality monitor.

Inside the device, they put a cubic PM1006K particle sensor. I bought three for $16.95 each last year, because I’d seen people hack them by adding sensors and a Wi-Fi microcontroller to send all of the data to Home Assistant. For my modding I bought:
The YouTube video linked above is a great guide to follow. I didn’t connect wires to the fan or the light sensor since I had no use for them. I also didn’t stack my sensors because I wanted the BME280 to be outside of the enclosure, where it would be less affected by the heat produced by the ENS160 and D1.
















Even with the sensor outside of the case, the BME280 still reads high, because it heats itself up. I actually tested different lengths of wires and placements of the sensor before realizing I was still going to have to adjust the data. An ESPHome filter made the adjustment easy, which I did individually for each unit after comparing to a mobile Ecobee thermostat sensor. This is the code from the unit for my shop.
substitutions:
slug: shop
friendly: Shop
esphome:
name: ${slug}-air-quality
friendly_name: ${friendly} Air Quality
esp8266:
board: d1_mini
logger:
level: WARN
api:
encryption:
key: 'xxx'
ota:
- platform: esphome
password: 'xxx'
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: xxx
gateway: xxx
subnet: 255.255.255.0
i2c:
frequency: 100kHz
uart:
- rx_pin: D7
baud_rate: 9600
sensor:
- platform: pm1006
pm_2_5:
name: PM 2.5µm
- platform: bme280_i2c
address: 0x76
temperature:
name: Temperature
id: ${slug}_temp
filters:
- offset: -3.38
humidity:
name: Humidity
id: ${slug}_humid
filters:
- offset: 7.63
iir_filter: 16x
- platform: aht10
variant: AHT20
temperature:
name: AHT21 Temperature
id: ${slug}_aht21_temp
humidity:
name: AHT21 Humidity
id: ${slug}_aht21_humid
- platform: ens160_i2c
address: 0x53
eco2:
name: CO²
tvoc:
name: VOC
aqi:
id: ${slug}_aqi
name: AQI
compensation:
temperature: ${slug}_aht21_temp
humidity: ${slug}_aht21_humid
text_sensor:
- platform: template
name: AQI Rating
lambda: |-
switch ( (int) ( id( ${slug}_aqi ).state ) ) {
case 1: return {"Excellent"};
case 2: return {"Good"};
case 3: return {"Moderate"};
case 4: return {"Poor"};
case 5: return {"Unhealthy"};
default: return {"N/A"};
}
These resources were a huge help when I wired everything up and made changes to the YAML code:
Here is how I’m displaying the data on one of my Home Assistant dashboards.

As I was working on this project I knew I wanted a couple more air quality monitors around the house, which will be finished soon.
Update: I’ve had to make a small update by adding a 47uF capacitor to each ENS160 board, because they have power issues, causing the reading to stop for periods of time. My boards matched up with the right ones in the picture at that link. Here’s a picture of another ENS160 I modified, since it was a tight squeeze to made the modification on the devices I posted about here with everything already wired up. I also realized I was powering these through the 3V3 pin instead of VIN, so I fixed that.

I’ve also improved the display of the data on my dashboard by using mini-graph-card.

Several years ago I bought this sign from T.J.Maxx.

When I plugged it in, I was disappointed. By default it was off with a button on the side to toggle between bright, dim, and off.

I put the sign in a display cabinet with all of the LEGO and I had wanted it to automatically turn on with the rest of the LEDs in the cabinet. I never got to it, so it sat on the shelf for years. Fast forward to setting up home automations at the new house and it was time to fix the problem. The only screw on the back was for opening a battery compartment, so I figured the front had to be snapped in. With a little careful persuasion I gained entry.




I figured the electronics were pretty basic and I was right. The quick fix was to connect the sides of the button/switch.


That worked, but I noticed how flimsy all the wiring was. I replaced the wires going from the USB connector to the board, which had been causing some flickering when bumped.

I was sad at the lack of LEDs though. I could do better, with minimal effort. I took out the circuit boards and found an old five volt LED strip.


With the help of some double-sided tape, I wrapped the strip throughout the case and then also used hot glue.


Much better!

In order to automate the processes of getting the golf sim ready to play and shutting it all down when finished I needed to create a remote control device. I’m using Home Assistant (HA) to run my home smart system (more posts to come), but two things involved with the golf sim aren’t connected to the network:
The projector has an infrared (IR) remote and the light has a radio frequency (RF) remote. I’ve done some things with IR and still had a stash of IR LEDs (for transmitting) and receivers. I’ve never attempted any RF stuff, so I ordered a 5 pack of 433mhz wireless RF transmitter and receiver pairs.
Since I’m using HA, I let ESPHome handle all of the main programming. All I had to do was wire everything properly and get the configuration correct. I made use of an old ESP8266 NodeMCU microcontroller and worked on the IR aspect of the project first.

When I took the picture I was using a 470Ω resistor, which I eventually switched to 100Ω, to increase the strength of the IR signal. The transistor is a PN2222A. Here’s the ESPHome configuration:
esphome:
name: golf-remote
friendly_name: Golf Remote
esp8266:
board: nodemcuv2
logger:
api:
encryption:
key: "xxxxxxxxxx"
ota:
- platform: esphome
password: "xxxxxxxxxx"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: x.x.x.x
gateway: x.x.x.x
subnet: 255.255.255.0
remote_receiver:
- id: GOLF_IR_RX
pin:
number: D1
inverted: True
mode:
input: True
pullup: True
dump: all
remote_transmitter:
- id: GOLF_IR_TX
pin: D2
carrier_duty_percent: 50%
I used the receiver to intercept the codes sent by the projector’s actual remote when pressing the Power, Input, and OK buttons. Then I created some buttons.
button:
- platform: template
name: Projector Power
on_press:
- remote_transmitter.transmit_nec:
transmitter_id: GOLF_IR_TX
address: 0x3000
command: 0xFD02
- platform: template
name: Projector Input
on_press:
- remote_transmitter.transmit_nec:
transmitter_id: GOLF_IR_TX
address: 0x3000
command: 0xFB04
- platform: template
name: Projector OK
on_press:
- remote_transmitter.transmit_nec:
transmitter_id: GOLF_IR_TX
address: 0x7788
command: 0xE619
It all went very smooth. Next I connected the circuits for the RF components, which was straightforward. Here are the pinouts from the Amazon product page.


I soldered on the antennas (smaller one to the transmitter) and connected everything on the breadboard.

By using examples from the documentation I was able to intercept RF codes.

When I tried to recreate those codes through the transmitter the results weren’t matching up and the spotlight wasn’t responding. It took some trial and error to configure the various parameters of the receiver. Here’s the end result, with the combined configuration for IR and RF.
esphome:
name: golf-remote
friendly_name: Golf Remote
esp8266:
board: nodemcuv2
logger:
api:
encryption:
key: "xxxxxxxxxx"
ota:
- platform: esphome
password: "xxxxxxxxxx"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: x.x.x.x
gateway: x.x.x.x
subnet: 255.255.255.0
remote_receiver:
- id: GOLF_IR_RX
pin:
number: D1
inverted: True
mode:
input: True
pullup: True
dump: all
- id: GOLF_RF_RX
pin:
number: D6
mode:
input: True
pullup: True
dump:
- rc_switch
tolerance: 50%
filter: 250us
idle: 4ms
buffer_size: 2kb # only for ESP8266
remote_transmitter:
- id: GOLF_IR_TX
pin: D2
carrier_duty_percent: 50%
- id: GOLF_RF_TX
pin: D6
carrier_duty_percent: 100%
After using the remote_receiver instances to get the button press codes I needed, I commented out that section of the code. If I ever need to add more functionality to my remote, I can enable the receivers at that point. Here are the button codes for the spotlight.
- platform: template
name: Spotlight On
on_press:
- remote_transmitter.transmit_rc_switch_raw:
transmitter_id: GOLF_RF_TX
code: '111001000000100100000011'
protocol: 1
repeat:
times: 10
wait_time: 0s
- platform: template
name: Spotlight Off
on_press:
- remote_transmitter.transmit_rc_switch_raw:
transmitter_id: GOLF_RF_TX
code: '111001000000100100000001'
protocol: 1
repeat:
times: 10
wait_time: 0s
- platform: template
name: Spotlight Green
on_press:
- remote_transmitter.transmit_rc_switch_raw:
transmitter_id: GOLF_RF_TX
code: '111001000000100100000111'
protocol: 1
repeat:
times: 10
wait_time: 0s
Then I was able to use both sets of buttons in scripts, which can feed to Alexa for voice commands.

Once everything was tested I wired and soldered a more permanent circuitboard. I included a folded dollar bill for scale.




I was planning to mount it in the ceiling, but the IR was having trouble, because the projector’s receiver faces the ground. Mounting it to the side of the PC cart worked great.

This was a lot of fun!
Update: Less than a week later I’ve already modified it, by adding a DHT22, which reports temperature and humidity. Might as well use that empty D7 pin on the microcontroller.