Is anyone using Raspberry Pi to control the lighting of buildings, street lights, yard lights, etc.? Was finally playing around with mine last night to turn on and off a LED. Got to thinking that it would be pretty cool to use it to turn on (and off) lights in sequence both in overall structures and within them. For example porch light goes on, hall light goes on, porch light turns off, kitchen on/off, bedroom on, hall off, etc. At the same time street lights go on in block sequence. Would love to see some examples of code, hardware, and lighting in action. Would a capacitor allow a ramp up from off to dim to full, or would something else be needed?
If you're just going to be controlling LEDs, you'd probably be better off just using an Arduino or similar microprocessor. They're cheaper and much simpler than a Rasp Pi. You could program in any variations in brightness or flashing you want, no capacitors necessary.
Thanks, drken. Was thinking about using the Pi to control multiple Arduino processors. Central control but offloading the details. Would possibly ease wiring with central com bus and mini hubs outlying.
John Can I suggest you look at the work of Geoff Bunza published at MRH for ideas? A list of his work is given at http://model-railroad-hobbyist.com/blog/geoff-bunza
So, a year and a half later and I've gotten the Arduino bug. With a lot of help from Geoff Bunza and others, I've learned a lot about using the Arduino Uno and Nano. The sequencing processing I talked about in my first post in this thread has become a reality, at least on the prototype board used for testing. I'm planning on installing it in some kind of building in the future by putting a Nano board in a basement of a building. Will use a simple power on sequencing start. Really amazing stuff!
So I know this an old thread but any updates on what you actually did and implemented. Arduinos truly are amazing once you get to know them a bit. They can do almost anything we need control and animation wise.
Sorry, I ended up doing and showing my efforts over at Model Railroading Hobbyist site. Here is some pertinent entries from there. Don't know if anyone cares, but... Sat, 2019-03-23 17:16 — Photo Bud I've been working on a project that I wanted to share. The intent is to have an Arduino board control the lights in a house and cycle thru a scenario. The hard part (for me) was the time issue. The following sketch has an arbitrary start time of just before 5 pm. When started up, it flashes the LEDs 3 times so one knows it is loaded and started. Porch light comes on at 5:00, off at 5:05, hall light on at 5:01 and off at 5:06, bathroom on at 5:05 and off at 5:10, and kitchen on at 5:10 and off at 6:30. All are times defined at beginning. The board I'm using is still attached to the breadboard as in my previous post. A Serial print is done for testing that lights come on and go off when expected, but will probably be removed before "production". Also still need Parlor, TV, Front room, and bedroom added both to code and breadboard. Note earlier code has been eliminated as the next section shows the latest iteration. Optimization is Ongoing! Sat, 2019-03-23 22:18 — Photo Bud Using arrays and loops, the size of the sketch has been heavily reduced. Might be a bit easier to follow, also. /* House_Light_Seq_Test Want to set up time spans for lights on by hour/minute format (24hr clock) Want fast clock capability both as testing function and normal running. Usually 4:1 or 5:1 Include start of sequence flash of all lights 5 times Watch push button to restart sequence Initial lights to include Porch Hall Bathroom Kitchen Parlor TV in Parlor Front room Bedroom */ // Time Variables unsigned long currtime; unsigned long starttime; unsigned long elapsetime; float floatelapse; float hourconv; float hourmsecs = 3600000; float minmsecs = 60000; float daymsecs = hourmsecs * 24; float elapseoffset = 16.95 * hourmsecs; // On startup, start the clock at approx 16:47 float flmin; float fastratio = 12; int ihour; int imin; int iprevmin = 99; // dummy integer previous minute for proper start up // LED Info int porch = 12; //red int hall = 11; //yellow int bath = 10; //green int kitchen = 9; //blue // Room Arrays int onhrArray[] = {17, 17, 17, 17}; // Time on hour int onmiArray[] = {00, 01, 05, 10}; // Time on minute int offhArray[] = {17, 17, 17, 18}; // Time off hour int offmArray[] = {05, 06, 10, 30}; // Time off minute int statArray[] = {false, false, false, false}; //Current on/off status of LED int ledArray[] = {porch, hall, bath, kitchen}; //Pin numbers of corresponding rooms int allarraysize = sizeof(ledArray)/sizeof(ledArray[0]); // Misc Variables int i = 0; int j = 0; int longdelay = 300; int shortdelay = 200; void setup() { starttime = millis(); Serial.begin(9600); pinMode(porch, OUTPUT); pinMode(hall, OUTPUT); pinMode(bath, OUTPUT); pinMode(kitchen, OUTPUT); for (i=0; i<5; i = i + 1) { // Flash all LEDs 5 times for (j=0; j<allarraysize; j = j + 1) { digitalWrite(ledArray[j], HIGH); // turn the LED on (HIGH is the voltage level) } delay(longdelay); // wait for long delay for (j=0; j<allarraysize; j = j + 1) { digitalWrite(ledArray[j], LOW); // turn the LED off by making the voltage LOW } delay(shortdelay); // wait for short delay } } void loop() { currtime = millis(); elapsetime = currtime - starttime; elapsetime = (elapsetime * fastratio) + elapseoffset; floatelapse = float (elapsetime); hourconv = floatelapse / hourmsecs; ihour = int(hourconv); flmin = hourconv - ihour; imin = 60 * flmin; if (imin != iprevmin) { Serial.print(" Time: "); if (ihour > 23) { ihour = 0; starttime = currtime; elapseoffset = 0; } if (ihour < 10) { Serial.print ("0"); } Serial.print (ihour); Serial.print (":"); if (imin < 10) { Serial.print ("0"); } Serial.print (imin); Serial.println(); iprevmin = imin; for (j=0; j<allarraysize; j = j + 1) { if (statArray[j] == false && ihour == onhrArray[j] && imin == onmiArray[j]) { statArray[j] = true; digitalWrite (ledArray[j], HIGH); } else if (statArray[j] == true && ihour == offhArray[j] && imin == offmArray[j]) { statArray[j] = false; digitalWrite (ledArray[j], LOW); } } } delay (1000); } Flickering Effect Mon, 2019-03-25 15:56 — Photo Bud I've modified the House Light Seq Test to include a flickering TV. If anyone wants me to post the latest complete sketch, let me know, otherwise here is the pertinent code. Others have probably done it better, but this is mine. It basically uses the bits in a character string to turn on and turn off the LED. In addition to the delay at the end as shown, this is part of a much larger execution loop. ... // Flickering effect Variables int byIndex = 0; //byte index int biIndex = 0; //bit index char flickerstring[] = "AZghDpShKJdEOGL*zS12y3"; //random letters and symbols to mine for their bit strings byte flickChar; //extracted character to get bit values int biVal; //actual bit value, will be either 0 or 1 ... // Flickering effect for TV or other bright object biIndex = biIndex + 1; if (biIndex > 7) { biIndex = 0; byIndex = byIndex + 1; if (byIndex > sizeof (flickerstring) - 2) { byIndex = 0; } flickChar = byte(flickerstring[byIndex]); } biVal = bitRead (flickChar, biIndex); if (statArray[TVIdx] == true) { //Note this is needed because of rest of code. Will only digitalWrite (ledArray[TVIdx], biVal); //flicker if the LED is already supposed to be on. } // End of flickering effect code delay (75); } A new version will be coming out soon based on Adafruit's NeoPixels and their Trinket board. Tiny LED's with full RGB color and addressability using a single data line.
I have not yet plunged into learning Raspberry Pi, but I have thought about using it to control the lighting in an O gauge high rise hotel that my club owns. I thought, someday, it might be nice to cycle through an evening, dusk, dark, sunrise, morning cycle. Thanks for sharing. Sent from my moto g(7) play using Tapatalk
While it certainly could do that but honestly an arduino family product could do much cheaper and easier.
Ah, you're probably right. I'm sure that my inexperience with these allows me to confuse them far too easily. Sent from my moto g(7) play using Tapatalk