{"id":5692,"date":"2015-03-08T19:09:41","date_gmt":"2015-03-08T23:09:41","guid":{"rendered":"http:\/\/www.streamingmeemee.com\/?p=5692"},"modified":"2015-04-26T17:45:01","modified_gmt":"2015-04-26T21:45:01","slug":"grandfather-floor-clock-interior-lighting-breadboard","status":"publish","type":"post","link":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/","title":{"rendered":"Grandfather Floor Clock Interior Lighting \u2013 Breadboard"},"content":{"rendered":"<p>The first step was to test the LED strip control circuit. \u00a0I&#8217;m using a <a href=\"https:\/\/www.adafruit.com\/products\/976\" target=\"_blank\">TIP120 <\/a>here; they are not as efficient as a MOSFET but they have sufficient current capacity for this application and were already at hand. \u00a0The resistors are both 1k ohm 1\/4 watt.<a href=\"http:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p1_bb.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-5702\" src=\"http:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p1_bb-300x263.png\" alt=\"clk-led-control-p1_bb\" width=\"300\" height=\"263\" srcset=\"https:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p1_bb-300x263.png 300w, https:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p1_bb-1024x898.png 1024w, https:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p1_bb.png 1755w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><!--more--><\/p>\n<p>The power connector is for the 12V supply. \u00a0It will eventually run the entire system but during development I&#8217;m running the Arduino from the USB connection. \u00a0With this built I can start to work on the software.<\/p>\n<p>The <a href=\"https:\/\/www.adafruit.com\/products\/475\" target=\"_blank\">button <\/a>will toggle the LED strip on\/off. \u00a0I didn&#8217;t want a hard on\/off transition so I added a ramp effect to soften the transition from dark to light.<\/p>\n<p>&lt;soapbox&gt; Something you, dear reader, need to bear in mind when reading my code; I write for clarity not efficiency. \u00a0Although I am new to the Arduino environment (Processing) I have been coding for a rather long time. \u00a0One thing I&#8217;ve learned along the way is that the &#8216;clarity of purpose&#8217; of any section of code is far more valuable than squeaking out a few nanoseconds of execution time\/bytes of storage space. \u00a0There are, of course, exceptions to this maxim (see below) but if you ever hope to maintain this code in the future, or, to share it with someone who does not share your brain you will do well to avoid &#8216;tricks&#8217; or &#8216;elegant but not obvious&#8217; code. &lt;\/soapbox&gt;<\/p>\n<p>That said, here is my code to exercise the circuit above.<\/p>\n<pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\r\n\/*\r\n Clock LED controller - phase 1 \r\n\r\n 2015-jan-31 TimC\r\n  First Go - simple push button control with LED ramp up\/down\r\n\r\n -- Other code\r\n Btn Debounce code by David A. Mellis, Limor Fried &amp; Mike Walters\r\n *\/\r\n\r\nconst char *SW_TITLE = &quot;Grandfather clock LED lighting controller&quot;;\r\nconst char *SW_VER = &quot;p1&quot;;\r\n\r\n\/\/ constants won't change. They're used here to\r\n\/\/ set pin numbers:\r\nconst byte btnPIN= 4;     \/\/ the number of the pushbutton pin - Pin 2 on first board is hosed\r\nconst byte ledPIN = 9;    \/\/ the number of the LED pin\r\n\r\n\/\/ Variables will change:\r\nint ledBright = FULL_OFF;         \/\/ the current LED brightness 0 - 255\r\nint ledState = LOW;              \/\/ are the LEDs on?\r\nint ledChange = LOW;             \/\/ Did LED state change in this loop cycle?\r\nint btnState = LOW;             \/\/ the current reading from the input pin\r\nint lastBtnState = btnState;   \/\/ the previous reading from the input pin\r\n\r\n\/\/ the following variables are long's because the time, measured in miliseconds,\r\n\/\/ will quickly become a bigger number than can be stored in an int.\r\nlong lastDebounceTime = 0;  \/\/ the last time the output pin was toggled\r\nlong debounceDelay = 100;    \/\/ the debounce time; increase if the output flickers\r\n\r\n\/\/======================================\r\nvoid setup() {\r\n\/\/======================================\r\nchar buff&#x5B;50];\r\n\r\n  Serial.begin(9600);           \/\/ set up Serial library at 9600 bps\r\n  sprintf(buff, &quot;%s v%s&quot;, SW_TITLE, SW_VER );\r\n  Serial.println( buff );\r\n\r\n  pinMode(btnPIN, INPUT);\r\n  pinMode(ledPIN, OUTPUT);\r\n\r\n  \/\/ set initial LED state\r\n  analogWrite(ledPIN, ledBright);\r\n\r\n}\r\n\r\n\/\/==============================\r\nvoid loop() {\r\n\/\/==============================\r\n  ledChange = LOW;        \/\/ no change so far\r\n\r\n  \/\/ read the state of the switch\r\n  int reading = digitalRead( btnPIN );\r\n\r\n  \/\/ check to see if you just pressed the button\r\n  \/\/ (i.e. the input went from LOW to HIGH),  and you've waited\r\n  \/\/ long enough since the last press to ignore any noise:  \r\n\r\n  \/\/ If the switch changed, due to noise or pressing:\r\n  if (reading != lastBtnState) {\r\n    \/\/ reset the debouncing timer\r\n    lastDebounceTime = millis();\r\n  } \r\n\r\n  if ((millis() - lastDebounceTime) &gt; debounceDelay) {\r\n    \/\/ whatever the reading is at, it's been there for longer\r\n    \/\/ than the debounce delay, so take it as the actual current state:\r\n    \/\/ if the button state has changed:\r\n    if (reading != btnState) {\r\n      btnState = reading;\r\n      Serial.print(&quot;BTN state change:&quot;);\r\n      Serial.println( btnState );\r\n\r\n      if( btnState == HIGH ) {\r\n        ledState = ! ledState;\r\n        ledChange = HIGH;\r\n      }\r\n    }\r\n  }\r\n\r\n  \/\/ save the reading.  Next time through the loop,\r\n  \/\/ it'll be the lastButtonState:\r\n  lastBtnState = reading;\r\n\r\n  if ( ledChange == HIGH ) {\r\n    if ( ledState == HIGH ) {\r\n      ledRampBright( FULL_ON );\r\n    } else {\r\n      ledRampBright( FULL_OFF );\r\n    }\r\n  }\r\n\r\n  delay( 200 );\r\n}\r\n\r\n\/\/-----------------------------------\r\nvoid ledRampBright( int target ){\r\n\/\/-----------------------------------\r\n  int chg = 0;\r\n  int incr = 1;\r\n\r\n  if( target &lt; 0 ) { target = FULL_OFF; }    \/\/ sanity check the parm\r\n  if( target &gt; 255 ) { target = FULL_ON; }\r\n\r\n  chg = ( target - ledBright );\r\n  if( chg &lt; 0 ) { incr = -1; }    \/\/ we are going down, not up\r\n\r\n  Serial.print(&quot;Ramp:target:&quot;);\r\n  Serial.print(target);\r\n  Serial.print(&quot; current:&quot;);\r\n  Serial.print( ledBright );\r\n  Serial.print(&quot; incr:&quot;);\r\n  Serial.println( incr );  \/\/ prints hello with ending line break \r\n\r\n  while ( ledBright != target ) {\r\n    ledBright = ledBright + incr;\r\n    analogWrite(ledPIN, ledBright);\r\n    delay(15);                  \/\/ wait a bit\r\n  }\r\n\r\n  Serial.print(&quot;LED brightness set to:&quot;);\r\n  Serial.println( ledBright );\r\n  return;\r\n}\r\n<\/pre>\n<p>With that working as desired, the next step is to add the light sensor. A simple <a href=\"https:\/\/www.adafruit.com\/product\/161\" target=\"_blank\">photoresistor <\/a>will do nicely here. \u00a0The resistor is a 10k 1\/4 watt piece. \u00a0The circuit works as a voltage divider that reacts to ambient light levels. \u00a0There is much more info. available <a href=\"https:\/\/learn.adafruit.com\/photocells\/using-a-photocell\">here<\/a>.<\/p>\n<figure id=\"attachment_5711\" aria-describedby=\"caption-attachment-5711\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p2_bb.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-5711\" src=\"http:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p2_bb-300x263.png\" alt=\"breadboard view\" width=\"300\" height=\"263\" srcset=\"https:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p2_bb-300x263.png 300w, https:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p2_bb-1024x898.png 1024w, https:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p2_bb.png 1755w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-5711\" class=\"wp-caption-text\">Clock Lighting Controller &#8211; Phase 2<\/figcaption><\/figure>\n<p>Just a few additions to the code to test this; in the constants section:<\/p>\n<pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\r\nconst byte lightPIN = A2;  \/\/ photoresistor pin\r\nconst int lightTHRES = 350;  \/\/ less than this is 'dark';\r\n<\/pre>\n<p>You will have to play with the value of <em>lightTHRES<\/em> for your environment\/component values to determine an appropriate setting for your &#8216;dark&#8217; threshold. \u00a0And then just before the test to change the LED state:<\/p>\n<pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\r\n...\r\n Serial.println( analogRead( lightPIN ) );\r\n\r\n if( analogRead( lightPIN ) &lt; lightTHRES ) {\r\n Serial.println(&quot; - Dark - enable PIR&quot;);\r\n }\r\n\r\n if ( ledChange == HIGH ) {\r\n...\r\n <\/pre>\n<p>The last bit of hardware is the <a href=\"https:\/\/www.adafruit.com\/product\/189\">PIR motion sensor<\/a>. You can find some more info. <a href=\"https:\/\/learn.adafruit.com\/pir-passive-infrared-proximity-motion-sensor\">here <\/a>and a tutorial <a href=\"https:\/\/learn.adafruit.com\/pir-passive-infrared-proximity-motion-sensor\/using-a-pir\">here<\/a>. I&#8217;ve moved the switch to make it a bit less cluttered on the bottom of the diagram and to clarify the connection to ground. Pay attention to the markings on your PIR sensor to verify correct polarity.<\/p>\n<figure id=\"attachment_5712\" aria-describedby=\"caption-attachment-5712\" style=\"width: 289px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p3_bb.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-5712\" src=\"http:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p3_bb-289x300.png\" alt=\"breadboard view\" width=\"289\" height=\"300\" srcset=\"https:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p3_bb-289x300.png 289w, https:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p3_bb-987x1024.png 987w, https:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/03\/clk-led-control-p3_bb.png 1755w\" sizes=\"auto, (max-width: 289px) 100vw, 289px\" \/><\/a><figcaption id=\"caption-attachment-5712\" class=\"wp-caption-text\">Clock Lighting Controller &#8211; Phase 2<\/figcaption><\/figure>\n<p>A PIR sensor requires a bit of &#8216;settle time&#8217; at power up to calibrate itself to the current environment; I added a short delay during the <em>setup()<\/em> section. At this point I also added a bit of code to blink the LEDs at startup as a visual indication that the controller was working and ready.<\/p>\n<p>During testing I noticed an undesirable behavior; the PIR would immediately turn the LEDs back on after manually turning them off with the switch. \u00a0I added some code to &#8216;lock out&#8217; the PIR sensor trigger for a period of time after the switch was pressed. \u00a0This will give you time to walk away from the clock after turning the lights off.<\/p>\n<p>This &#8216;lock out&#8217; timer does use a bit of a trick; it is related to the way the Arduino (the Processing language actually) manages data types. \u00a0You can read all about the gritty details <a href=\"http:\/\/www.faludi.com\/2007\/12\/18\/arduino-millis-rollover-handling\/\">here<\/a>,or just copy my code (which is a copy from a code sample on that page). \u00a0Because of the method used the lock out is limited to about 32 seconds. \u00a0I&#8217;ve found that to be quite sufficient for this purpose.<\/p>\n<p>The final running code is here.<\/p>\n<pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\r\n\/*\r\n Clock LED controller\r\n\r\n 2015-jan-31 TimC\r\n  First Go - simple push button control with LED ramp up\/down\r\n\r\n 2015-feb-2 - TimC\r\n   Add motion sensor trigger\r\n\r\n 2015-feb-9 - TimC\r\n   Add photosensor\r\n 2015-feb-10 - TimC\r\n   Add 'blink' at startup to indicate the device is ready.\r\n   Add 30s delay to PIR triggers after manual button press.  This allows time to walk away from unit before\r\n    retriggering the lights.\r\n\r\n 2015-feb-12 - TimC\r\n   Reduce dark threshold to 400 - it was coming on too early in the day.\r\n\r\n 2015-feb-26 - TimC\r\n   Reduce dark threshold to 350 - it was coming on too early in the day.\r\n\r\n -- Other code\r\n Btn Debounce code by David A. Mellis, Limor Fried &amp; Mike Walters\r\n *\/\r\n\r\nconst char *SW_TITLE = &quot;Grandfather clock LED lighting controller&quot;;\r\nconst char *SW_VER = &quot;20150228.2&quot;;\r\n\r\n\/\/ constants won't change. They're used here to\r\n\/\/ set pin numbers:\r\nconst byte btnPIN= 4;     \/\/ the number of the pushbutton pin - Pin 2 on first board is hosed\r\nconst byte ledPIN = 9;    \/\/ the number of the LED pin\r\nconst byte lightPIN = A2;  \/\/ photoresistor pin\r\nconst int lightTHRES = 350;  \/\/ less than this is 'dark';\r\nconst int FULL_OFF = 0;  \/\/ Brightness of LEDs when off\r\nconst int FULL_ON = 255;   \/\/ Brightness of LEDs when on\r\nconst int pirCALIBTIME = 10;  \/\/ Calibration time for PIR sensor (secs)\r\nconst int pirBTNDELAY = 30;    \/\/ How long to ignore PIR after a button press (secs) (do not exceed 30s because of long typing)\r\nconst int pirPIN = 7;         \/\/ on which pin is the PIR sensor?\r\n\r\n\/\/ Variables will change:\r\nint ledBright = FULL_OFF;         \/\/ the current LED brightness 0 - 255\r\nint ledState = LOW;              \/\/ are the LEDs on?\r\nint ledChange = LOW;             \/\/ Did LED state change in this loop cycle?\r\nbyte pirEnable = LOW;            \/\/ should we ignore PIR triggers?\r\nlong pirHoldExpire = 0;           \/\/ When does PIR hold expire? (millisec)\r\nint btnState = LOW;             \/\/ the current reading from the input pin\r\nint lastBtnState = btnState;   \/\/ the previous reading from the input pin\r\n\r\n\/\/ the following variables are long's because the time, measured in miliseconds,\r\n\/\/ will quickly become a bigger number than can be stored in an int.\r\nlong lastDebounceTime = 0;  \/\/ the last time the output pin was toggled\r\nlong debounceDelay = 100;    \/\/ the debounce time; increase if the output flickers\r\n\r\n\/\/======================================\r\nvoid setup() {\r\n\/\/======================================\r\nchar buff&#x5B;50];\r\n\r\n  Serial.begin(9600);           \/\/ set up Serial library at 9600 bps\r\n  sprintf(buff, &quot;%s v%s&quot;, SW_TITLE, SW_VER );\r\n  Serial.println( buff );\r\n\r\n  pinMode(btnPIN, INPUT);\r\n  pinMode(ledPIN, OUTPUT);\r\n\r\n  \/\/ set initial LED state\r\n  analogWrite(ledPIN, ledBright);\r\n\r\n  pinMode(pirPIN, INPUT);\r\n  digitalWrite(pirPIN, LOW);\r\n  \/\/give the PIR sensor some time to calibrate\r\n  Serial.print(&quot;Calibrating PIR sensor&quot;);\r\n  for(int i = 0; i &lt; pirCALIBTIME; i++){\r\n    Serial.print(&quot;.&quot;);\r\n    delay(1000);\r\n    }\r\n  Serial.println(&quot;  PIR SENSOR ACTIVE&quot;);\r\n\r\n  pinMode( lightPIN, INPUT );\r\n\r\n  ledBlink();              \/\/ let 'em know we are up\r\n}\r\n\r\n\/\/==============================\r\nvoid loop() {\r\n\/\/==============================\r\n  ledChange = LOW;        \/\/ no change so far\r\n\r\n  \/\/ read the state of the switch\r\n  int reading = digitalRead( btnPIN );\r\n\r\n  \/\/ check to see if you just pressed the button\r\n  \/\/ (i.e. the input went from LOW to HIGH),  and you've waited\r\n  \/\/ long enough since the last press to ignore any noise:  \r\n\r\n  \/\/ If the switch changed, due to noise or pressing:\r\n  if (reading != lastBtnState) {\r\n    \/\/ reset the debouncing timer\r\n    lastDebounceTime = millis();\r\n  } \r\n\r\n  if ((millis() - lastDebounceTime) &gt; debounceDelay) {\r\n    \/\/ whatever the reading is at, it's been there for longer\r\n    \/\/ than the debounce delay, so take it as the actual current state:\r\n    \/\/ if the button state has changed:\r\n    if (reading != btnState) {\r\n      btnState = reading;\r\n      Serial.print(&quot;BTN state change:&quot;);\r\n      Serial.println( btnState );\r\n\r\n      if( btnState == HIGH ) {\r\n        ledState = ! ledState;\r\n        ledChange = HIGH;\r\n        pirHoldExpire = ( (long)millis() + ( 1000 * pirBTNDELAY ) );    \/\/ ignore the PIR for pirBTNDELAY seconds\r\n                                                                        \/\/ see http:\/\/www.faludi.com\/2007\/12\/18\/arduino-millis-rollover-handling\/\r\n      }\r\n    }\r\n  }\r\n\r\n  \/\/ save the reading.  Next time through the loop,\r\n  \/\/ it'll be the lastButtonState:\r\n  lastBtnState = reading;\r\n\r\n  \/\/ Check for PIR lockout hold due to manual button press\r\n  if( ( (long)millis() - pirHoldExpire ) &gt;= 0 ) {\r\n\/\/    Serial.println(&quot;Hold expired - Enable PIR&quot;);\r\n    pirEnable = HIGH;\r\n    pirHoldExpire = 0 ;      \/\/ reset timer\r\n  } else {\r\n    pirEnable = LOW;\r\n  }\r\n\r\n\/\/  Serial.println( analogRead( lightPIN ) );\r\n\r\n  if( analogRead( lightPIN ) &lt; lightTHRES ) {\r\n    pirEnable = ( pirEnable &amp;&amp; HIGH);              \/\/ ignore the light level if we are still within 'button hold' time.\r\n  } else {\r\n    pirEnable = LOW;\r\n  }\r\n\r\n\/\/--- PIR sensor check\r\n  if( ( ledChange != HIGH ) and ( pirEnable ) ) {     \/\/ don't bother if we are already changing state\r\n\r\n    if( ( ledState == LOW ) and ( digitalRead( pirPIN ) == HIGH ) ) {      \/\/ LEDs off and motion sensed\r\n      Serial.println( &quot;Motion detected.&quot; );\r\n      ledState = HIGH;                      \/\/ Turn em on\r\n      ledChange = HIGH;\r\n    }\r\n\r\n  }\r\n\/\/--- PIR END\r\n\r\n  if ( ledChange == HIGH ) {\r\n    if ( ledState == HIGH ) {\r\n      ledRampBright( FULL_ON );\r\n    } else {\r\n      ledRampBright( FULL_OFF );\r\n    }\r\n  }\r\n\r\n  delay( 200 );\r\n}\r\n\r\n\/\/-----------------------------------\r\nvoid ledRampBright( int target ){\r\n\/\/-----------------------------------\r\n  int chg = 0;\r\n  int incr = 1;\r\n\r\n  if( target &lt; 0 ) { target = FULL_OFF; }    \/\/ sanity check the parm\r\n  if( target &gt; 255 ) { target = FULL_ON; }\r\n\r\n  chg = ( target - ledBright );\r\n  if( chg &lt; 0 ) { incr = -1; }    \/\/ we are going down, not up\r\n\r\n  Serial.print(&quot;Ramp:target:&quot;);\r\n  Serial.print(target);\r\n  Serial.print(&quot; current:&quot;);\r\n  Serial.print( ledBright );\r\n  Serial.print(&quot; incr:&quot;);\r\n  Serial.println( incr );  \/\/ prints hello with ending line break \r\n\r\n  while ( ledBright != target ) {\r\n    ledBright = ledBright + incr;\r\n    analogWrite(ledPIN, ledBright);\r\n    delay(15);                  \/\/ wait a bit\r\n  }\r\n\r\n  Serial.print(&quot;LED brightness set to:&quot;);\r\n  Serial.println( ledBright );\r\n  return;\r\n}\r\n\r\n\/\/-----------------------------------\r\nvoid ledBlink( ) {\r\n\/\/-----------------------------------\r\n  analogWrite( ledPIN, FULL_ON );\r\n  delay( 250 );\r\n  analogWrite( ledPIN, FULL_OFF );\r\n  delay( 250 );\r\n  analogWrite( ledPIN, FULL_ON );\r\n  delay( 250 );\r\n  analogWrite( ledPIN, FULL_OFF );\r\n  delay( 250 );\r\n  analogWrite( ledPIN, ledBright );\r\n\r\n  return;\r\n}\r\n<\/pre>\n<p>Next step, fabrication and install!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The first step was to test the LED strip control circuit. \u00a0I&#8217;m using a TIP120 here; they are not as efficient as a MOSFET but they have sufficient current capacity for this application and were already at hand. \u00a0The resistors are both 1k ohm 1\/4 watt.<\/p>\n","protected":false},"author":1,"featured_media":5488,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[653,664],"tags":[684,688,689,690,654,366,659,686,679,685,683,687],"class_list":["post-5692","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-iot","category-projects","tag-arduio","tag-floor-clock","tag-grandfather-clock","tag-herman-miller","tag-iot-2","tag-led","tag-microcontroller","tag-motion-sensor","tag-photocell","tag-pir","tag-strip","tag-uno"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"This IoT project will add LED light strip interior lighting to a Howard Miller grandfather floor clock utilizing an Arduino, PIR motion sensor and touch control\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"streamingmeemee\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Stream of Consciousness | Digital Media and whatever else flows through my head...\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Grandfather Floor Clock Interior Lighting \u2013 Breadboard | Stream of Consciousness\" \/>\n\t\t<meta property=\"og:description\" content=\"This IoT project will add LED light strip interior lighting to a Howard Miller grandfather floor clock utilizing an Arduino, PIR motion sensor and touch control\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2015-03-08T23:09:41+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2015-04-26T21:45:01+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@streamingmeemee\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Grandfather Floor Clock Interior Lighting \u2013 Breadboard | Stream of Consciousness\" \/>\n\t\t<meta name=\"twitter:description\" content=\"This IoT project will add LED light strip interior lighting to a Howard Miller grandfather floor clock utilizing an Arduino, PIR motion sensor and touch control\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@streamingmeemee\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/2015\\\/03\\\/08\\\/grandfather-floor-clock-interior-lighting-breadboard\\\/#article\",\"name\":\"Grandfather Floor Clock Interior Lighting \\u2013 Breadboard | Stream of Consciousness\",\"headline\":\"Grandfather Floor Clock Interior Lighting \\u2013 Breadboard\",\"author\":{\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.streamingmeemee.com\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/20150203_103414.jpg\",\"width\":1820,\"height\":2000,\"caption\":\"Sorry for the reflections.  My polarizing filter didn't remove all of them.\"},\"datePublished\":\"2015-03-08T19:09:41-04:00\",\"dateModified\":\"2015-04-26T17:45:01-04:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/2015\\\/03\\\/08\\\/grandfather-floor-clock-interior-lighting-breadboard\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/2015\\\/03\\\/08\\\/grandfather-floor-clock-interior-lighting-breadboard\\\/#webpage\"},\"articleSection\":\"IoT, Projects, arduio, floor clock, grandfather clock, herman miller, iot, led, microcontroller, motion sensor, photocell, pir, strip, uno\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/2015\\\/03\\\/08\\\/grandfather-floor-clock-interior-lighting-breadboard\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.streamingmeemee.com\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/category\\\/iot\\\/#listItem\",\"name\":\"IoT\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/category\\\/iot\\\/#listItem\",\"position\":2,\"name\":\"IoT\",\"item\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/category\\\/iot\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/2015\\\/03\\\/08\\\/grandfather-floor-clock-interior-lighting-breadboard\\\/#listItem\",\"name\":\"Grandfather Floor Clock Interior Lighting \\u2013 Breadboard\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/2015\\\/03\\\/08\\\/grandfather-floor-clock-interior-lighting-breadboard\\\/#listItem\",\"position\":3,\"name\":\"Grandfather Floor Clock Interior Lighting \\u2013 Breadboard\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/category\\\/iot\\\/#listItem\",\"name\":\"IoT\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/#person\",\"name\":\"Tim Carter\",\"image\":\"http:\\\/\\\/www.streamingmeemee.com\\\/wp-content\\\/uploads\\\/2017\\\/12\\\/carteralbum01-1088-1.jpg\",\"sameAs\":[\"https:\\\/\\\/twitter.com\\\/streamingmeemee\",\"https:\\\/\\\/www.instagram.com\\\/streamingmeemee\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/author\\\/admin\\\/\",\"name\":\"streamingmeemee\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/2015\\\/03\\\/08\\\/grandfather-floor-clock-interior-lighting-breadboard\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2c09a2842c3aafde1554c17bed29b535ac84c07eb706f07d79e5874f36522020?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"streamingmeemee\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/2015\\\/03\\\/08\\\/grandfather-floor-clock-interior-lighting-breadboard\\\/#webpage\",\"url\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/2015\\\/03\\\/08\\\/grandfather-floor-clock-interior-lighting-breadboard\\\/\",\"name\":\"Grandfather Floor Clock Interior Lighting \\u2013 Breadboard | Stream of Consciousness\",\"description\":\"This IoT project will add LED light strip interior lighting to a Howard Miller grandfather floor clock utilizing an Arduino, PIR motion sensor and touch control\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/2015\\\/03\\\/08\\\/grandfather-floor-clock-interior-lighting-breadboard\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/author\\\/admin\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.streamingmeemee.com\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/20150203_103414.jpg\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/2015\\\/03\\\/08\\\/grandfather-floor-clock-interior-lighting-breadboard\\\/#mainImage\",\"width\":1820,\"height\":2000,\"caption\":\"Sorry for the reflections.  My polarizing filter didn't remove all of them.\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/index.php\\\/2015\\\/03\\\/08\\\/grandfather-floor-clock-interior-lighting-breadboard\\\/#mainImage\"},\"datePublished\":\"2015-03-08T19:09:41-04:00\",\"dateModified\":\"2015-04-26T17:45:01-04:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/#website\",\"url\":\"https:\\\/\\\/www.streamingmeemee.com\\\/\",\"name\":\"Stream of Consciousness\",\"description\":\"Digital Media and whatever else flows through my head...\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.streamingmeemee.com\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Grandfather Floor Clock Interior Lighting \u2013 Breadboard | Stream of Consciousness","description":"This IoT project will add LED light strip interior lighting to a Howard Miller grandfather floor clock utilizing an Arduino, PIR motion sensor and touch control","canonical_url":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/#article","name":"Grandfather Floor Clock Interior Lighting \u2013 Breadboard | Stream of Consciousness","headline":"Grandfather Floor Clock Interior Lighting \u2013 Breadboard","author":{"@id":"https:\/\/www.streamingmeemee.com\/index.php\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/www.streamingmeemee.com\/#person"},"image":{"@type":"ImageObject","url":"https:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/02\/20150203_103414.jpg","width":1820,"height":2000,"caption":"Sorry for the reflections.  My polarizing filter didn't remove all of them."},"datePublished":"2015-03-08T19:09:41-04:00","dateModified":"2015-04-26T17:45:01-04:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/#webpage"},"isPartOf":{"@id":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/#webpage"},"articleSection":"IoT, Projects, arduio, floor clock, grandfather clock, herman miller, iot, led, microcontroller, motion sensor, photocell, pir, strip, uno"},{"@type":"BreadcrumbList","@id":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.streamingmeemee.com#listItem","position":1,"name":"Home","item":"https:\/\/www.streamingmeemee.com","nextItem":{"@type":"ListItem","@id":"https:\/\/www.streamingmeemee.com\/index.php\/category\/iot\/#listItem","name":"IoT"}},{"@type":"ListItem","@id":"https:\/\/www.streamingmeemee.com\/index.php\/category\/iot\/#listItem","position":2,"name":"IoT","item":"https:\/\/www.streamingmeemee.com\/index.php\/category\/iot\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/#listItem","name":"Grandfather Floor Clock Interior Lighting \u2013 Breadboard"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.streamingmeemee.com#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/#listItem","position":3,"name":"Grandfather Floor Clock Interior Lighting \u2013 Breadboard","previousItem":{"@type":"ListItem","@id":"https:\/\/www.streamingmeemee.com\/index.php\/category\/iot\/#listItem","name":"IoT"}}]},{"@type":"Person","@id":"https:\/\/www.streamingmeemee.com\/#person","name":"Tim Carter","image":"http:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2017\/12\/carteralbum01-1088-1.jpg","sameAs":["https:\/\/twitter.com\/streamingmeemee","https:\/\/www.instagram.com\/streamingmeemee\/"]},{"@type":"Person","@id":"https:\/\/www.streamingmeemee.com\/index.php\/author\/admin\/#author","url":"https:\/\/www.streamingmeemee.com\/index.php\/author\/admin\/","name":"streamingmeemee","image":{"@type":"ImageObject","@id":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/2c09a2842c3aafde1554c17bed29b535ac84c07eb706f07d79e5874f36522020?s=96&d=mm&r=g","width":96,"height":96,"caption":"streamingmeemee"}},{"@type":"WebPage","@id":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/#webpage","url":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/","name":"Grandfather Floor Clock Interior Lighting \u2013 Breadboard | Stream of Consciousness","description":"This IoT project will add LED light strip interior lighting to a Howard Miller grandfather floor clock utilizing an Arduino, PIR motion sensor and touch control","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.streamingmeemee.com\/#website"},"breadcrumb":{"@id":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/#breadcrumblist"},"author":{"@id":"https:\/\/www.streamingmeemee.com\/index.php\/author\/admin\/#author"},"creator":{"@id":"https:\/\/www.streamingmeemee.com\/index.php\/author\/admin\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/www.streamingmeemee.com\/wp-content\/uploads\/2015\/02\/20150203_103414.jpg","@id":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/#mainImage","width":1820,"height":2000,"caption":"Sorry for the reflections.  My polarizing filter didn't remove all of them."},"primaryImageOfPage":{"@id":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/#mainImage"},"datePublished":"2015-03-08T19:09:41-04:00","dateModified":"2015-04-26T17:45:01-04:00"},{"@type":"WebSite","@id":"https:\/\/www.streamingmeemee.com\/#website","url":"https:\/\/www.streamingmeemee.com\/","name":"Stream of Consciousness","description":"Digital Media and whatever else flows through my head...","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.streamingmeemee.com\/#person"}}]},"og:locale":"en_US","og:site_name":"Stream of Consciousness | Digital Media and whatever else flows through my head...","og:type":"article","og:title":"Grandfather Floor Clock Interior Lighting \u2013 Breadboard | Stream of Consciousness","og:description":"This IoT project will add LED light strip interior lighting to a Howard Miller grandfather floor clock utilizing an Arduino, PIR motion sensor and touch control","og:url":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/","article:published_time":"2015-03-08T23:09:41+00:00","article:modified_time":"2015-04-26T21:45:01+00:00","twitter:card":"summary","twitter:site":"@streamingmeemee","twitter:title":"Grandfather Floor Clock Interior Lighting \u2013 Breadboard | Stream of Consciousness","twitter:description":"This IoT project will add LED light strip interior lighting to a Howard Miller grandfather floor clock utilizing an Arduino, PIR motion sensor and touch control","twitter:creator":"@streamingmeemee"},"aioseo_meta_data":{"post_id":"5692","title":null,"description":"This IoT project will add LED light strip interior lighting to a Howard Miller grandfather floor clock utilizing an Arduino, PIR motion sensor and touch control","keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-06-23 00:02:26","updated":"2026-04-03 20:15:27","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.streamingmeemee.com\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.streamingmeemee.com\/index.php\/category\/iot\/\" title=\"IoT\">IoT<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tGrandfather Floor Clock Interior Lighting \u2013 Breadboard\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.streamingmeemee.com"},{"label":"IoT","link":"https:\/\/www.streamingmeemee.com\/index.php\/category\/iot\/"},{"label":"Grandfather Floor Clock Interior Lighting \u2013 Breadboard","link":"https:\/\/www.streamingmeemee.com\/index.php\/2015\/03\/08\/grandfather-floor-clock-interior-lighting-breadboard\/"}],"_links":{"self":[{"href":"https:\/\/www.streamingmeemee.com\/index.php\/wp-json\/wp\/v2\/posts\/5692","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.streamingmeemee.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.streamingmeemee.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.streamingmeemee.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.streamingmeemee.com\/index.php\/wp-json\/wp\/v2\/comments?post=5692"}],"version-history":[{"count":16,"href":"https:\/\/www.streamingmeemee.com\/index.php\/wp-json\/wp\/v2\/posts\/5692\/revisions"}],"predecessor-version":[{"id":5727,"href":"https:\/\/www.streamingmeemee.com\/index.php\/wp-json\/wp\/v2\/posts\/5692\/revisions\/5727"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.streamingmeemee.com\/index.php\/wp-json\/wp\/v2\/media\/5488"}],"wp:attachment":[{"href":"https:\/\/www.streamingmeemee.com\/index.php\/wp-json\/wp\/v2\/media?parent=5692"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.streamingmeemee.com\/index.php\/wp-json\/wp\/v2\/categories?post=5692"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.streamingmeemee.com\/index.php\/wp-json\/wp\/v2\/tags?post=5692"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}