{"id":202,"date":"2026-04-02T16:36:40","date_gmt":"2026-04-02T15:36:40","guid":{"rendered":"https:\/\/pelnet.co.uk\/pablog\/?p=202"},"modified":"2026-04-02T16:36:41","modified_gmt":"2026-04-02T15:36:41","slug":"3d-printed-neopixel-clock","status":"publish","type":"post","link":"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/","title":{"rendered":"3D Printed NeoPixel Clock"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"473\" src=\"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/01\/IMG_1833-1024x473.jpg\" alt=\"\" class=\"wp-image-204\" srcset=\"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/01\/IMG_1833-1024x473.jpg 1024w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/01\/IMG_1833-300x139.jpg 300w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/01\/IMG_1833-768x355.jpg 768w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/01\/IMG_1833-1536x709.jpg 1536w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/01\/IMG_1833-2048x946.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>This project is for a digital clock based on NeoPixels driven by an Arduino microcontroller. One thing to note is the clock is huge! The dimensions are 43.5cm x 16cm.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p>The 3D design is not mine but can be downloaded from thingyverse: <a href=\"https:\/\/www.thingiverse.com\/thing:2968056\" target=\"_blank\" rel=\"noreferrer noopener\">7 Segment IOT Smart Clock<\/a><\/p>\n\n\n\n<p>The original project was based on an IOT clock controlled by an online dashboard. I didn&#8217;t need that level of sophistication so I opted to use an Arduino R4 with its internal real time clock (RTC) to keep time. This was not a great idea as it turns out, more of that later.<\/p>\n\n\n\n<p>The project is not complete but is a working in-progress. For instance, I have not included a way to set the time without using the computer. I also want to add a method to change the colour of the digits and a way to dim the digits in dark ambient light.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Design<\/h2>\n\n\n\n<p>As already mentioned the 3D design is available on Thingyverse.<\/p>\n\n\n\n<p>For the electronics I decided to use an Arduino microcontroller as I had experience driving NeoPixels for my model railway layout. A library is used for the NeoPixels and is available from Adafruit.<\/p>\n\n\n\n<p>My idea was to use the Arduino R4 Nano as it has an internal RTC which can be kept active using a small 3v battery for when power is removed from the clock. This was easy to program and works as expected. That was until I noticed the clock was not very accurate. It was gaining time meaning the clock was out by minutes at the end of the day. It is well documented and not easy to fix. I could automatically reset the time each day to keep it more accurate but in the end I decided to use an external RTC. The RTC of choice was the DS3231 which I got preassembled from eBay.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Construction<\/h2>\n\n\n\n<p>Start by printing the 3D case. I used Black PLA+ for the surrounds and backs, and I used white PLA+ for the individual segments. Before assembly, I created a paper template of the segments so I could assemble the NeoPixels.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1783-768x1024.jpg\" alt=\"\" class=\"wp-image-215\" srcset=\"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1783-768x1024.jpg 768w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1783-225x300.jpg 225w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1783-1152x1536.jpg 1152w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1783-1536x2048.jpg 1536w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1783-scaled.jpg 1920w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<p>I stuck the NeoPixels to the template and soldered connections between keeping mind of the flow (NeoPixels have an input and output) connecting the output of one pair of pixels to the input of the next. I labelled the segments using the traditional 7 segment labels, a-g. On the first and last connection I had longer wires with connectors to connect to the next digit.<\/p>\n\n\n\n<p>The digits need to be screwed together with 3mm screws and nuts. They are hidden inside. The NeoPixel digits can then be glued in place and connected to the next digit. The first digit will have connections for the Arduino and then connect to the second digit through the centre hole.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"414\" src=\"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1825-1024x414.jpg\" alt=\"\" class=\"wp-image-216\" srcset=\"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1825-1024x414.jpg 1024w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1825-300x121.jpg 300w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1825-768x310.jpg 768w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1825-1536x621.jpg 1536w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1825-2048x827.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>At this point I prototyped the Arduino hardware on a plug in breadboard and connected to the NeoPixels assembled in the enclosure.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"618\" src=\"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1834-1024x618.jpg\" alt=\"\" class=\"wp-image-222\" srcset=\"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1834-1024x618.jpg 1024w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1834-300x181.jpg 300w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1834-768x463.jpg 768w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1834-1536x927.jpg 1536w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1834-2048x1236.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Now you can assemble the Arduino on a piece of veroboard with connections for the NeoPixels and a second veroboard with the RTC. I also used a small DC-DC converter to step down the 12v adaptor I had to 5v for the Arduino.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1840-768x1024.jpg\" alt=\"\" class=\"wp-image-217\" srcset=\"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1840-768x1024.jpg 768w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1840-225x300.jpg 225w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1840-1152x1536.jpg 1152w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1840-1536x2048.jpg 1536w, https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/04\/IMG_1840-scaled.jpg 1920w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<p>There should be enough room to connect the Arduino to the computer for programming without removing it. When connecting to the computer I removed the connection to the NeoPixels to avoid drawing too much current from the computer. <\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Code<\/h2>\n\n\n\n<p>The code is split in a number of parts. First is the declaration of libraries and global variables.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/*\n*\n*   Copyright (c) 2026, Perry Andrews \n*   https:\/\/www.pelnet.co.uk\n*   All rights reserved.\n*\n*   Title: NeoPixel Clock\n*\/\n\n#include &lt;Adafruit_NeoPixel.h>\n#include &lt;Wire.h>\n#include &lt;DS3231-RTC.h>\n\n\/\/ Define the NeoPixels Arduino pin  \n#define LED_PIN     6\n\n\/\/ How many NeoPixels are attached to the Arduino\n#define LED_COUNT  58\n\n\/\/ NeoPixel brightness, 0 (min) to 255 (max)\n#define BRIGHTNESS 128\n\n\/\/ Declare our NeoPixel strip object:\nAdafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB);\n\nDS3231 myRTC;\n\n\/\/ Set these values for the RTC\nbyte year = 26;\nbyte month = 1;\nbyte date = 11;\nbyte dOW = 1;\nbyte hour = 21;\nbyte minute = 35;\nbyte second = 0;\nbyte oldhour = 24;\nbyte oldminute = 60;<\/code><\/pre>\n\n\n\n<p>The values assigned to the time variables is only used during the first programming. At normal startup after the RTC has been set the values are overwritten by the RTC.<\/p>\n\n\n\n<p>Next is the setup code:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void setup() {\n  \n  \/\/ Start the I2C interface\n  Wire.begin();\n\n  \/\/ Set Up DS3231 RTC\n  bool mode12 = false; \/\/ use 24-hour clock mode\n  myRTC.setClockMode(mode12); \/\/ uploads 'true' (1) to bit 6 of register 0x02\n\n  \/\/ Set Time - One off, comment out after first run.\n  \/*\n  myRTC.setYear(year); \/\/ uploads 22 to register 0x06\n  myRTC.setMonth(month); \/\/ uploads 1 to register 0x05\n  myRTC.setDate(date); \/\/ uploads 5 to register 0x04\n  myRTC.setDoW(dOW); \/\/ uploads 1 to register 0x03 (Sunday)\n  myRTC.setHour(hour); \/\/ uploads 19 to register 0x02\n  myRTC.setMinute(minute); \/\/ uploads 17 to register 0x01\n  myRTC.setSecond(second); \/\/ uploads 42 to register 0x00\n  *\/\n    \n  \/\/ Initialise LEDR, LEDG and LEDB as outputs\n  pinMode(LEDR, OUTPUT);\n  pinMode(LEDG, OUTPUT);\n  pinMode(LEDB, OUTPUT);\n  \n  \/\/ Turn off all LEDs initially\n  digitalWrite(LEDR, HIGH);\n  digitalWrite(LEDG, HIGH);\n  digitalWrite(LEDB, HIGH);\n\n  strip.begin();           \/\/ Initialise NeoPixel\n  strip.show();            \/\/ Turn OFF all pixels ASAP\n  strip.setBrightness(BRIGHTNESS); \/\/ Set BRIGHTNESS\n\n  display_digit(0,0,0);\n  \n  \/\/ Turn on the built-in red LED and turn off the rest\n  digitalWrite(LEDR, LOW);\n  digitalWrite(LEDG, HIGH);\n  digitalWrite(LEDB, HIGH);\n  \n}<\/code><\/pre>\n\n\n\n<p>The serial interface was used for debugging but I removed from the final code.<\/p>\n\n\n\n<p>The loop code:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void loop() {\n  \/\/ put your main code here, to run repeatedly:\n  bool h12;\n  bool hPM;\n  bool CenturyBit;\n  char digitcol = 7; \/\/ White Digits\n\n  byte date = myRTC.getDate();\n  byte month = myRTC.getMonth(CenturyBit);\n  byte year = myRTC.getYear();\n  byte dOW = myRTC.getDoW();\n  byte hour = myRTC.getHour(h12, hPM);  \n  byte minute = myRTC.getMinute();\n  byte second = myRTC.getSecond();\n\n  \/\/ Display Time on NeoPixel Display\n  if (hour != oldhour){\n    oldhour = hour;\n    display_digit(hour % 10,2,digitcol);\n    hour = hour \/ 10;\n    display_digit(hour,3,digitcol);\n    \/\/oldminute = 60;\n  }\n  if(minute != oldminute){\n    oldminute = minute;\n    display_digit(minute % 10,0,digitcol);\n    minute = minute \/ 10;\n    display_digit(minute,1,digitcol);\n    display_colon(digitcol);\n  }\n}<\/code><\/pre>\n\n\n\n<p>Additionally there are some subroutines called in loop:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void display_colon(char col){\n  uint32_t colour;\n  switch(col){\n    case 0:\n      colour = strip.Color(0, 0, 0);  \/\/Off\n      break;\n    case 1:\n      colour = strip.Color(255, 0, 0);  \/\/Red\n      break;\n    case 2:\n      colour = strip.Color(0, 255, 0);  \/\/Green\n      break;\n    case 3:\n      colour = strip.Color(0, 0, 255);  \/\/Blue\n      break;\n    case 4:\n      colour = strip.Color(255, 255, 0);  \/\/Yellow\n      break;\n    case 5:\n      colour = strip.Color(255, 0, 255);  \/\/Magenta\n      break;\n    case 6:\n      colour = strip.Color(0, 255, 255);  \/\/Cyan\n      break;\n    case 7:\n      colour = strip.Color(255, 255, 255);  \/\/White\n      break;\n    default:\n      colour = strip.Color(0, 0, 0);  \/\/Off\n  }\n  strip.setPixelColor(28, colour);\n  strip.setPixelColor(29, colour);\n}\n\nvoid display_digit(char num, char digit, char col){\n  char offset = 0;\n  uint32_t colour;\n\n  switch(digit){\n    case 0:\n      offset = 0;\n      break;\n    case 1:\n      offset = 14;\n      break;\n    case 2:\n      offset = 30;\n      break;\n    case 3:\n      offset = 44;\n      break;\n    default:\n      offset = 0;\n      break;\n  }\n  switch(col){\n    case 0:\n      colour = strip.Color(0, 0, 0);  \/\/Off\n      break;\n    case 1:\n      colour = strip.Color(255, 0, 0);  \/\/Red\n      break;\n    case 2:\n      colour = strip.Color(0, 255, 0);  \/\/Green\n      break;\n    case 3:\n      colour = strip.Color(0, 0, 255);  \/\/Blue\n      break;\n    case 4:\n      colour = strip.Color(255, 255, 0);  \/\/Yellow\n      break;\n    case 5:\n      colour = strip.Color(255, 0, 255);  \/\/Magenta\n      break;\n    case 6:\n      colour = strip.Color(0, 255, 255);  \/\/Cyan\n      break;\n    case 7:\n      colour = strip.Color(255, 255, 255);  \/\/White\n      break;\n    default:\n      colour = strip.Color(255, 0, 0);  \/\/Red\n  }\n  switch(num){\n    case 0:\n      strip.setPixelColor(0 + offset, colour); \/\/a\n      strip.setPixelColor(1 + offset, colour); \/\/a\n      strip.setPixelColor(2 + offset, colour); \/\/b\n      strip.setPixelColor(3 + offset, colour); \/\/b\n      strip.setPixelColor(4 + offset, colour); \/\/c\n      strip.setPixelColor(5 + offset, colour); \/\/c\n      strip.setPixelColor(6 + offset, colour); \/\/d\n      strip.setPixelColor(7 + offset, colour); \/\/d\n      strip.setPixelColor(8 + offset, colour); \/\/e\n      strip.setPixelColor(9 + offset, colour); \/\/e\n      strip.setPixelColor(10 + offset, colour); \/\/f\n      strip.setPixelColor(11 + offset, colour); \/\/f\n      strip.setPixelColor(12 + offset, strip.Color(0, 0, 0)); \/\/g\n      strip.setPixelColor(13 + offset, strip.Color(0, 0, 0)); \/\/g\n      strip.show();\n      break;\n    case 1:\n      strip.setPixelColor(0 + offset, colour); \/\/a\n      strip.setPixelColor(1 + offset, colour); \/\/a\n      strip.setPixelColor(2 + offset, colour); \/\/b\n      strip.setPixelColor(3 + offset, colour); \/\/b\n      strip.setPixelColor(4 + offset, strip.Color(0, 0, 0)); \/\/c\n      strip.setPixelColor(5 + offset, strip.Color(0, 0, 0)); \/\/c\n      strip.setPixelColor(6 + offset, strip.Color(0, 0, 0)); \/\/d\n      strip.setPixelColor(7 + offset, strip.Color(0, 0, 0)); \/\/d\n      strip.setPixelColor(8 + offset, strip.Color(0, 0, 0)); \/\/e\n      strip.setPixelColor(9 + offset, strip.Color(0, 0, 0)); \/\/e\n      strip.setPixelColor(10 + offset, strip.Color(0, 0, 0)); \/\/f\n      strip.setPixelColor(11 + offset, strip.Color(0, 0, 0)); \/\/f\n      strip.setPixelColor(12 + offset, strip.Color(0, 0, 0)); \/\/g\n      strip.setPixelColor(13 + offset, strip.Color(0, 0, 0)); \/\/g\n      strip.show();\n      break;\n    case 2:\n      strip.setPixelColor(0 + offset, strip.Color(0, 0, 0)); \/\/a\n      strip.setPixelColor(1 + offset, strip.Color(0, 0, 0)); \/\/a\n      strip.setPixelColor(2 + offset, colour);  \/\/b\n      strip.setPixelColor(3 + offset, colour);  \/\/b\n      strip.setPixelColor(4 + offset, colour);  \/\/c\n      strip.setPixelColor(5 + offset, colour);  \/\/c\n      strip.setPixelColor(6 + offset, strip.Color(0, 0, 0));  \/\/d\n      strip.setPixelColor(7 + offset, strip.Color(0, 0, 0));  \/\/d\n      strip.setPixelColor(8 + offset, colour);  \/\/e\n      strip.setPixelColor(9 + offset, colour);  \/\/e\n      strip.setPixelColor(10 + offset, colour); \/\/f\n      strip.setPixelColor(11 + offset, colour); \/\/f\n      strip.setPixelColor(12 + offset, colour); \/\/g\n      strip.setPixelColor(13 + offset, colour); \/\/g\n      strip.show();\n      break;\n    case 3:\n      strip.setPixelColor(0 + offset, colour);  \/\/a\n      strip.setPixelColor(1 + offset, colour);  \/\/a\n      strip.setPixelColor(2 + offset, colour);  \/\/b\n      strip.setPixelColor(3 + offset, colour);  \/\/b\n      strip.setPixelColor(4 + offset, colour);  \/\/c\n      strip.setPixelColor(5 + offset, colour);  \/\/c\n      strip.setPixelColor(6 + offset, strip.Color(0, 0, 0));  \/\/d\n      strip.setPixelColor(7 + offset, strip.Color(0, 0, 0));  \/\/d\n      strip.setPixelColor(8 + offset, strip.Color(0, 0, 0));  \/\/e\n      strip.setPixelColor(9 + offset, strip.Color(0, 0, 0));  \/\/e\n      strip.setPixelColor(10 + offset, colour);  \/\/f\n      strip.setPixelColor(11 + offset, colour);  \/\/f\n      strip.setPixelColor(12 + offset, colour);  \/\/g\n      strip.setPixelColor(13 + offset, colour);  \/\/g\n      strip.show();\n      break;\n    case 4:\n      strip.setPixelColor(0 + offset, colour);   \/\/a\n      strip.setPixelColor(1 + offset, colour);   \/\/a\n      strip.setPixelColor(2 + offset, colour);   \/\/b\n      strip.setPixelColor(3 + offset, colour);   \/\/b\n      strip.setPixelColor(4 + offset, strip.Color(0, 0, 0));  \/\/c\n      strip.setPixelColor(5 + offset, strip.Color(0, 0, 0));  \/\/c\n      strip.setPixelColor(6 + offset, colour);   \/\/d\n      strip.setPixelColor(7 + offset, colour);   \/\/d\n      strip.setPixelColor(8 + offset, strip.Color(0, 0, 0));  \/\/e\n      strip.setPixelColor(9 + offset, strip.Color(0, 0, 0));  \/\/e\n      strip.setPixelColor(10 + offset, strip.Color(0, 0, 0));  \/\/f\n      strip.setPixelColor(11 + offset, strip.Color(0, 0, 0));  \/\/f\n      strip.setPixelColor(12 + offset, colour);  \/\/g\n      strip.setPixelColor(13 + offset, colour);  \/\/g\n      strip.show();\n      break;\n    case 5:\n      strip.setPixelColor(0 + offset, colour);   \/\/a\n      strip.setPixelColor(1 + offset, colour);   \/\/a\n      strip.setPixelColor(2 + offset, strip.Color(0, 0, 0));  \/\/b\n      strip.setPixelColor(3 + offset, strip.Color(0, 0, 0));  \/\/b\n      strip.setPixelColor(4 + offset, colour);   \/\/c\n      strip.setPixelColor(5 + offset, colour);   \/\/c\n      strip.setPixelColor(6 + offset, colour);   \/\/d\n      strip.setPixelColor(7 + offset, colour);   \/\/d\n      strip.setPixelColor(8 + offset, strip.Color(0, 0, 0));  \/\/e\n      strip.setPixelColor(9 + offset, strip.Color(0, 0, 0));  \/\/e\n      strip.setPixelColor(10 + offset, colour);  \/\/f\n      strip.setPixelColor(11 + offset, colour);  \/\/f\n      strip.setPixelColor(12 + offset, colour);  \/\/g\n      strip.setPixelColor(13 + offset, colour);  \/\/g\n      strip.show();\n      break;\n    case 6:\n      strip.setPixelColor(0 + offset, colour);   \/\/a\n      strip.setPixelColor(1 + offset, colour);   \/\/a\n      strip.setPixelColor(2 + offset, strip.Color(0, 0, 0));  \/\/b\n      strip.setPixelColor(3 + offset, strip.Color(0, 0, 0));  \/\/b\n      strip.setPixelColor(4 + offset, colour);   \/\/c\n      strip.setPixelColor(5 + offset, colour);   \/\/c\n      strip.setPixelColor(6 + offset, colour);   \/\/d\n      strip.setPixelColor(7 + offset, colour);   \/\/d\n      strip.setPixelColor(8 + offset, colour);   \/\/e\n      strip.setPixelColor(9 + offset, colour);   \/\/e\n      strip.setPixelColor(10 + offset, colour);  \/\/f\n      strip.setPixelColor(11 + offset, colour);  \/\/f\n      strip.setPixelColor(12 + offset, colour);  \/\/g\n      strip.setPixelColor(13 + offset, colour);  \/\/g\n      strip.show();\n      break;\n    case 7:\n      strip.setPixelColor(0 + offset, colour);   \/\/a\n      strip.setPixelColor(1 + offset, colour);   \/\/a\n      strip.setPixelColor(2 + offset, colour);   \/\/b\n      strip.setPixelColor(3 + offset, colour);   \/\/b\n      strip.setPixelColor(4 + offset, colour);   \/\/c\n      strip.setPixelColor(5 + offset, colour);   \/\/c\n      strip.setPixelColor(6 + offset, strip.Color(0, 0, 0));  \/\/d\n      strip.setPixelColor(7 + offset, strip.Color(0, 0, 0));  \/\/d\n      strip.setPixelColor(8 + offset, strip.Color(0, 0, 0));  \/\/e\n      strip.setPixelColor(9 + offset, strip.Color(0, 0, 0));  \/\/e\n      strip.setPixelColor(10 + offset, strip.Color(0, 0, 0));  \/\/f\n      strip.setPixelColor(11 + offset, strip.Color(0, 0, 0));  \/\/f\n      strip.setPixelColor(12 + offset, strip.Color(0, 0, 0));  \/\/g\n      strip.setPixelColor(13 + offset, strip.Color(0, 0, 0));  \/\/g\n      strip.show();\n      break;\n    case 8:\n      strip.setPixelColor(0 + offset, colour);   \/\/a\n      strip.setPixelColor(1 + offset, colour);   \/\/a\n      strip.setPixelColor(2 + offset, colour);   \/\/b\n      strip.setPixelColor(3 + offset, colour);   \/\/b\n      strip.setPixelColor(4 + offset, colour);   \/\/c\n      strip.setPixelColor(5 + offset, colour);   \/\/c\n      strip.setPixelColor(6 + offset, colour);   \/\/d\n      strip.setPixelColor(7 + offset, colour);   \/\/d\n      strip.setPixelColor(8 + offset, colour);   \/\/e\n      strip.setPixelColor(9 + offset, colour);   \/\/e\n      strip.setPixelColor(10 + offset, colour);  \/\/f\n      strip.setPixelColor(11 + offset, colour);  \/\/f\n      strip.setPixelColor(12 + offset, colour);  \/\/g\n      strip.setPixelColor(13 + offset, colour);  \/\/g\n      strip.show();\n      break;\n    case 9:\n      strip.setPixelColor(0 + offset, colour);   \/\/a\n      strip.setPixelColor(1 + offset, colour);   \/\/a\n      strip.setPixelColor(2 + offset, colour);   \/\/b\n      strip.setPixelColor(3 + offset, colour);   \/\/b\n      strip.setPixelColor(4 + offset, colour);   \/\/c\n      strip.setPixelColor(5 + offset, colour);   \/\/c\n      strip.setPixelColor(6 + offset, colour);   \/\/d\n      strip.setPixelColor(7 + offset, colour);   \/\/d\n      strip.setPixelColor(8 + offset, strip.Color(0, 0, 0));  \/\/e\n      strip.setPixelColor(9 + offset, strip.Color(0, 0, 0));  \/\/e\n      strip.setPixelColor(10 + offset, colour);  \/\/f\n      strip.setPixelColor(11 + offset, colour);  \/\/f\n      strip.setPixelColor(12 + offset, colour);  \/\/g\n      strip.setPixelColor(13 + offset, colour);  \/\/g\n      strip.show();\n      break;\n  }\n}<\/code><\/pre>\n\n\n\n<p>This is all the code used. I appreciate there is probably a better way to implement displaying a digit.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>This is a first iteration of the project and is not complete. Also, I have not optimised the code in any way and so there could be bugs and inefficiencies in the code. However, it does work.<\/p>\n\n\n\n<p>The following improvements will be implemented at a future date.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Light sensor to dim the brightness in dark ambient light<\/li>\n\n\n\n<li>Buttons to set the time without using the computer<\/li>\n\n\n\n<li>Button to change digit colours<\/li>\n\n\n\n<li>Alternative IR remote control to set time &amp; colour<\/li>\n<\/ul>\n\n\n\n<p>I hope this project has been inspirational and shows you can create a project based on someone else&#8217;s shared work.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Links<\/h2>\n\n\n\n<p><a href=\"https:\/\/www.thingiverse.com\/thing:2968056\" target=\"_blank\" rel=\"noreferrer noopener\">7 Segment IOT Smart Clock<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/adafruit\/Adafruit_NeoPixel\" target=\"_blank\" rel=\"noreferrer noopener\">Adafruit NeoPixel Library<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.arduino.cc\/tutorials\/nano-r4\/user-manual\/\" target=\"_blank\" rel=\"noreferrer noopener\">Arduino R4 Nano Manual<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This project is for a digital clock based on NeoPixels driven by an Arduino microcontroller. One thing to note is the clock is huge! The dimensions are 43.5cm x 16cm. Introduction The 3D design is not mine but can be downloaded from thingyverse: 7 Segment IOT Smart Clock The original project was based on an [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[17],"class_list":["post-202","post","type-post","status-publish","format-standard","hentry","category-make","tag-arduino"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>3D Printed NeoPixel Clock - Pelnet - Perrys Website<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"3D Printed NeoPixel Clock - Pelnet - Perrys Website\" \/>\n<meta property=\"og:description\" content=\"This project is for a digital clock based on NeoPixels driven by an Arduino microcontroller. One thing to note is the clock is huge! The dimensions are 43.5cm x 16cm. Introduction The 3D design is not mine but can be downloaded from thingyverse: 7 Segment IOT Smart Clock The original project was based on an [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/\" \/>\n<meta property=\"og:site_name\" content=\"Pelnet - Perrys Website\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-02T15:36:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-02T15:36:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/01\/IMG_1833-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1182\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Perry\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Perry\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/technology\\\/make\\\/3d-printed-neopixel-clock\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/technology\\\/make\\\/3d-printed-neopixel-clock\\\/\"},\"author\":{\"name\":\"Perry\",\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/#\\\/schema\\\/person\\\/a2737948ce5498f5b15ac23dbe0c5e37\"},\"headline\":\"3D Printed NeoPixel Clock\",\"datePublished\":\"2026-04-02T15:36:40+00:00\",\"dateModified\":\"2026-04-02T15:36:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/technology\\\/make\\\/3d-printed-neopixel-clock\\\/\"},\"wordCount\":787,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/technology\\\/make\\\/3d-printed-neopixel-clock\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/IMG_1833-1024x473.jpg\",\"keywords\":[\"Arduino\"],\"articleSection\":[\"Make\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/technology\\\/make\\\/3d-printed-neopixel-clock\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/technology\\\/make\\\/3d-printed-neopixel-clock\\\/\",\"url\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/technology\\\/make\\\/3d-printed-neopixel-clock\\\/\",\"name\":\"3D Printed NeoPixel Clock - Pelnet - Perrys Website\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/technology\\\/make\\\/3d-printed-neopixel-clock\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/technology\\\/make\\\/3d-printed-neopixel-clock\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/IMG_1833-1024x473.jpg\",\"datePublished\":\"2026-04-02T15:36:40+00:00\",\"dateModified\":\"2026-04-02T15:36:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/technology\\\/make\\\/3d-printed-neopixel-clock\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/technology\\\/make\\\/3d-printed-neopixel-clock\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/technology\\\/make\\\/3d-printed-neopixel-clock\\\/#primaryimage\",\"url\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/IMG_1833-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/IMG_1833-scaled.jpg\",\"width\":2560,\"height\":1182},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/technology\\\/make\\\/3d-printed-neopixel-clock\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"3D Printed NeoPixel Clock\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/#website\",\"url\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/\",\"name\":\"Pelnet - Perrys Website\",\"description\":\"Perrys home on the World Wide Web\",\"publisher\":{\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/#organization\",\"name\":\"Pelnet - Perrys Website\",\"url\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/England.png\",\"contentUrl\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/England.png\",\"width\":320,\"height\":192,\"caption\":\"Pelnet - Perrys Website\"},\"image\":{\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/#\\\/schema\\\/person\\\/a2737948ce5498f5b15ac23dbe0c5e37\",\"name\":\"Perry\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c7d6ffe0927e789c6548e5e54e6818eba8e2d4f53e1c17d2aeb879246212c439?s=96&d=blank&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c7d6ffe0927e789c6548e5e54e6818eba8e2d4f53e1c17d2aeb879246212c439?s=96&d=blank&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c7d6ffe0927e789c6548e5e54e6818eba8e2d4f53e1c17d2aeb879246212c439?s=96&d=blank&r=g\",\"caption\":\"Perry\"},\"description\":\"Trained as a Toolmaker and Mechanical &amp; Production Engineer, my interest was always in Computing and so I retrained in many areas of Information Technology, including server deployment and support, database management, software development in many languages and embedded programming. My other interests are in model railways and electronics but my big passion is for photography.\",\"sameAs\":[\"https:\\\/\\\/pelnet.co.uk\\\/pablog\"],\"url\":\"https:\\\/\\\/pelnet.co.uk\\\/pablog\\\/author\\\/paadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"3D Printed NeoPixel Clock - Pelnet - Perrys Website","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/","og_locale":"en_GB","og_type":"article","og_title":"3D Printed NeoPixel Clock - Pelnet - Perrys Website","og_description":"This project is for a digital clock based on NeoPixels driven by an Arduino microcontroller. One thing to note is the clock is huge! The dimensions are 43.5cm x 16cm. Introduction The 3D design is not mine but can be downloaded from thingyverse: 7 Segment IOT Smart Clock The original project was based on an [&hellip;]","og_url":"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/","og_site_name":"Pelnet - Perrys Website","article_published_time":"2026-04-02T15:36:40+00:00","article_modified_time":"2026-04-02T15:36:41+00:00","og_image":[{"width":2560,"height":1182,"url":"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/01\/IMG_1833-scaled.jpg","type":"image\/jpeg"}],"author":"Perry","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Perry","Estimated reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/#article","isPartOf":{"@id":"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/"},"author":{"name":"Perry","@id":"https:\/\/pelnet.co.uk\/pablog\/#\/schema\/person\/a2737948ce5498f5b15ac23dbe0c5e37"},"headline":"3D Printed NeoPixel Clock","datePublished":"2026-04-02T15:36:40+00:00","dateModified":"2026-04-02T15:36:41+00:00","mainEntityOfPage":{"@id":"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/"},"wordCount":787,"commentCount":0,"publisher":{"@id":"https:\/\/pelnet.co.uk\/pablog\/#organization"},"image":{"@id":"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/#primaryimage"},"thumbnailUrl":"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/01\/IMG_1833-1024x473.jpg","keywords":["Arduino"],"articleSection":["Make"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/","url":"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/","name":"3D Printed NeoPixel Clock - Pelnet - Perrys Website","isPartOf":{"@id":"https:\/\/pelnet.co.uk\/pablog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/#primaryimage"},"image":{"@id":"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/#primaryimage"},"thumbnailUrl":"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/01\/IMG_1833-1024x473.jpg","datePublished":"2026-04-02T15:36:40+00:00","dateModified":"2026-04-02T15:36:41+00:00","breadcrumb":{"@id":"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/#primaryimage","url":"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/01\/IMG_1833-scaled.jpg","contentUrl":"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2026\/01\/IMG_1833-scaled.jpg","width":2560,"height":1182},{"@type":"BreadcrumbList","@id":"https:\/\/pelnet.co.uk\/pablog\/technology\/make\/3d-printed-neopixel-clock\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/pelnet.co.uk\/pablog\/"},{"@type":"ListItem","position":2,"name":"3D Printed NeoPixel Clock"}]},{"@type":"WebSite","@id":"https:\/\/pelnet.co.uk\/pablog\/#website","url":"https:\/\/pelnet.co.uk\/pablog\/","name":"Pelnet - Perrys Website","description":"Perrys home on the World Wide Web","publisher":{"@id":"https:\/\/pelnet.co.uk\/pablog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pelnet.co.uk\/pablog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/pelnet.co.uk\/pablog\/#organization","name":"Pelnet - Perrys Website","url":"https:\/\/pelnet.co.uk\/pablog\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/pelnet.co.uk\/pablog\/#\/schema\/logo\/image\/","url":"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2024\/03\/England.png","contentUrl":"https:\/\/pelnet.co.uk\/pablog\/wp-content\/uploads\/2024\/03\/England.png","width":320,"height":192,"caption":"Pelnet - Perrys Website"},"image":{"@id":"https:\/\/pelnet.co.uk\/pablog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/pelnet.co.uk\/pablog\/#\/schema\/person\/a2737948ce5498f5b15ac23dbe0c5e37","name":"Perry","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/c7d6ffe0927e789c6548e5e54e6818eba8e2d4f53e1c17d2aeb879246212c439?s=96&d=blank&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c7d6ffe0927e789c6548e5e54e6818eba8e2d4f53e1c17d2aeb879246212c439?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c7d6ffe0927e789c6548e5e54e6818eba8e2d4f53e1c17d2aeb879246212c439?s=96&d=blank&r=g","caption":"Perry"},"description":"Trained as a Toolmaker and Mechanical &amp; Production Engineer, my interest was always in Computing and so I retrained in many areas of Information Technology, including server deployment and support, database management, software development in many languages and embedded programming. My other interests are in model railways and electronics but my big passion is for photography.","sameAs":["https:\/\/pelnet.co.uk\/pablog"],"url":"https:\/\/pelnet.co.uk\/pablog\/author\/paadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/pelnet.co.uk\/pablog\/wp-json\/wp\/v2\/posts\/202","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pelnet.co.uk\/pablog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pelnet.co.uk\/pablog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pelnet.co.uk\/pablog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pelnet.co.uk\/pablog\/wp-json\/wp\/v2\/comments?post=202"}],"version-history":[{"count":13,"href":"https:\/\/pelnet.co.uk\/pablog\/wp-json\/wp\/v2\/posts\/202\/revisions"}],"predecessor-version":[{"id":226,"href":"https:\/\/pelnet.co.uk\/pablog\/wp-json\/wp\/v2\/posts\/202\/revisions\/226"}],"wp:attachment":[{"href":"https:\/\/pelnet.co.uk\/pablog\/wp-json\/wp\/v2\/media?parent=202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pelnet.co.uk\/pablog\/wp-json\/wp\/v2\/categories?post=202"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pelnet.co.uk\/pablog\/wp-json\/wp\/v2\/tags?post=202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}