Stap 5: De electonics
Kon ik niet weerstaan het toevoegen van een beetje tech aan het bed, zodat ik sommige strips van RGB installeerde led's en een twinking ster veld/glow-worms op de onderzijde van het stapelbed.
De led strips waren gemakkelijk. Ik koos voor een vaste controller van ebay, zoals wordt weergegeven in de pic, als ik wist dat een afstandsbediening zou verdwijnen na een paar dagen. Ik één strip in het bovenste stapelbed en een ander onder voor de lezing.
De star plafond nam een beetje moeite... Ik aangepast deze code (http://playground.arduino.cc/Main/AnalogAndDigital...) voor het gebruik van de 6 pwm-uitgangen van een arduino mini. Mijn code is hieronder (voel je vrij om het laat me weten dat als u suggesties hebt, ik ben nog steeds leren arduino).
Ik voegde een aan-/ uitschakelaar en een potentiometer de LED helderheid in een doosje van de controle onder het stapelbed. Ik bedraad samen clusters van 6 LEDs aan elke PWM-uitgang van de arduino en voegde een 1 k ohm weerstand aan elk leidde tot het houden van de huidige down (ze niet hoefde te worden dat alles helder) en zorgen voor alle de leds zou de arduino niet overbelasten. Ik verborg de rommelige bedrading door een vel zwart polyester die zich uitstrekt over de onderkant van het stapelbed en vastzetten in plaats met dunne stukken van pine molding. De glans van de LEDs door de stof mooi, je kunt soort zien in de bijgevoegde foto's.
#define MAX_FIREFLIES_ON 6
int PotPin = A0; ** analoog aangesloten op pot int vervagen = 0;
Verander deze waarden om te bepalen hoe lang de LED blijft uit en hoe lang blijft het ON voor de analoge vuurvliegjes. Deze waarden zijn in milliseconden tijden 10 (d.w.z. 27 = 270 milliseconden). #define ANALOG_MIN_OFF 41 #define ANALOG_MAX_OFF 300 #define ANALOG_MIN_ON 50 #define ANALOG_MAX_ON 200
Wijzig deze waarden om te bepalen hoe lang de LED blijft uit en hoe lang blijft het ON voor de digitale vuurvliegjes. Deze waarden zijn in milliseconden. #define DIGITAL_MIN_OFF 4410 #define DIGITAL_MAX_OFF 30000 #define DIGITAL_MIN_ON 210 #define DIGITAL_MAX_ON 2100
Het aantal niveaus van vervagen voordat de LED uitgeschakeld met een digitale PWM is. Best niet wijzigen deze #define DIGITAL_FADE_INTERVAL 20 #define DIGITAL_FADE_WAIT 20
Gebruikt om aan te geven van de 4-Staten kunnen wij in. typedef enum {FADEUP, ON, FADEDOWN, OFF} FireflyState;
typedef struct FireFlyStruct {byte pin; //PWM output pinnen zijn 3,5,6,9,10, en 11 FireflyState staat, en //used om te bepalen welke staat de LED, fading op/neer of aan/uit niet-ondertekende long-waarde; //used als de huidige waarde van de LED's
Analoge waarden int duur; Hier wordt aangegeven hoe lang het lampje aan/uit
Digitale waarden niet-ondertekende lange tijd; Gebruikt voor tijd berekeningen om te zien of het is tijd om te veranderen staat Booleaanse knevel; Gebruikt voor het schakelen van de LED op/af met PWM unsigned long vervagen; gebruikt om te berekenen hoe lang de led zal worden in-/ uitschakelen voor PWM tijdens een fade omhoog/omlaag unsigned long fadeWait; gebruikt om de tijd die nodig is om langzaam te verdwijnen, dus het duurt alleen ietsje langer. } Firefly;
UNO R3 - 14 pinnen int analogPins [] {3, 5, 6, 9, 10, 11} =; int allPins [] {3, 5, 6, 9, 10, 11} =;
Firefly fireflies[sizeof(allPins)/sizeof(*allPins)];
Gebruikt om te bepalen of de huidige pin een analoge of een Digital Pin is. Booleaanse isAnalog (int pin) {int lengte = sizeof(analogPins)/sizeof(*analogPins); voor (int i = 0; ik
Aan het einde van deze functie zullen alle van de vuurvliegjes setup //with de gegevens die ze nodig hebben om te functioneren. Wij ook inschakelen MAX_FIREFLIES_ON vuurvliegjes te ons beginnen. VOID initialize() {voor (int i = 0; ik < (sizeof(fireflies)/sizeof(Firefly)); i ++) {//Why ben ik met behulp van deze aanwijzer notatie van het adres van het object //and nemen dan het dereferencing? Het was iemand leert om het te doen. Als het u stoort, vervangt elk exemplaar van het "ff ->" met "vuurvliegjes [i]." en hetzelfde zal worden uitgevoerd door de //it. Firefly * ff = & vuurvliegjes [i]; FF -> pin = allPins [i]; Als (ik < MAX_FIREFLIES_ON) ff -> staat = ON; anders ff -> staat = OFF; FF -> waarde = 0;
Analoge waarden ff -> duur = 0;
Digitale waarden ff -> tijd = 0; FF -> toggle = true; FF -> vervagen = 0; FF -> fadeWait = 0;
Als (ik < MAX_FIREFLIES_ON) {als (isAnalog (ff -> pin) == true) ff -> duur = willekeurige (ANALOG_MIN_ON, ANALOG_MAX_ON); anders ff -> waarde = millis() + willekeurige (DIGITAL_MIN_ON, DIGITAL_MAX_ON);} anders {als (isAnalog (ff -> pin) == true) ff -> duur = willekeurige (ANALOG_MIN_OFF, ANALOG_MAX_OFF); anders ff-waarde > = ff -> tijd + willekeurige (DIGITAL_MIN_OFF DIGITAL_MAX_OFF); } } }
Bepalen hoeveel LED's zijn momenteel op en als die gelijk is aan MAX_FIREFLIES_ON, terug te keren waar. Booleaanse isMaxFireflies() {Boole retValue = false; int cnt = 0; voor (int ik = 0; ik < (sizeof(fireflies)/sizeof(Firefly)); i ++) {Firefly * ff = & vuurvliegjes [i]; als (ff -> staat! = OFF) cnt ++;} als (cnt > = MAX_FIREFLIES_ON) {retValue = true;} return retValue;}
Gebruikt voor onze vertraging van 10ms voor analoog. unsigned long analogDelayTime = 0;
/ * ANALOGE VUURVLIEGJES Opmerking: (er is een vertraging van 10ms op alle analoge vuurvliegjes).
Er zijn 4 landen die de vuurvliegjes in kunnen. ON = houdt de LED op totdat de teller op de duur instellen voor op. AF = houdt de LED af tot de teller op de duur instellen voor op. FADEUP = in de loop van 500ms, de helderheid wijzigen de LED's over 51 keer FADEDOWN = in de loop van 500ms, helderheid wijzigen de LED's ongeveer 51 keer
Als de firefly klaar is met zijn FADEUP, bepaalt het een willekeurige duur voor hoe lang de LED om op te houden. Evenzo bepaalt FADEDOWN een willekeurige duur voor hoe lang de LED om weg te houden.
Als een LED is klaar om te worden ingeschakeld (FADEUP) controleren we om te zien als we MAX_FIREFLIES_ON hebben bereikt. Als we hebben, dan wij dat LED weer instellen op de OFF-stand en vertellen het weer wachten zonder in te schakelen. * / analogFireflies() {} ongeldig
Zet een vertraging 10ms op alle van de analoge spullen. Als (millis ()-analogDelayTime < 50) keren; analogDelayTime = millis();
Alle van de analoge vuurvliegjes voor doorlopen (int i = 0; ik < (sizeof(fireflies)/sizeof(Firefly)); i ++) {Firefly * ff = & vuurvliegjes [i];
Als (isAnalog (ff -> pin) == false) blijven;
Als (ff -> staat == ON) {/ / Pin op analogWrite (ff -> pin, vervagen);
FF -> waarde += 1; Als (ff-waarde > == ff -> duur) {ff -> staat FADEDOWN; = ff -> waarde = vervagen;}} anders als (ff -> staat == OFF) {/ / Pin uit analogWrite (ff -> pin, 0);
FF -> waarde += 1; Als (ff-waarde > == ff -> duur) {als (isMaxFireflies()) {ff -> waarde = 0; ff -> staat = OFF; ff -> duur = willekeurige (ANALOG_MIN_OFF, ANALOG_MAX_OFF);} anders {ff -> staat FADEUP; = ff -> waarde = 0;}}} anders als (ff -> staat == FADEUP) {/ / Pin Fade Up ff-waarde > += 1; //previously 5 analogWrite (ff -> pin, ff -> waarde);
Als (ff-waarde > vervagen ==) {ff -> waarde = 0; ff -> staat = ON; ff -> duur = willekeurige (ANALOG_MIN_ON, ANALOG_MAX_ON);}} anders als (ff -> staat == FADEDOWN) {/ / Pin Fade neer ff-waarde >-=1; //previously 5 analogWrite (ff -> pin, ff -> waarde);
Als (ff-waarde > == 0) {ff -> waarde = 0; ff -> staat = OFF; ff -> duur = willekeurige (ANALOG_MIN_OFF, ANALOG_MAX_OFF);}} } }
//----------------------------------------------------------------------------------------------------
VOID turnLedOn (int pin) {}
Als (isAnalog(pin) == true) analogWrite (pin, 255); } void turnLedOff (int pin) {}
Als (isAnalog(pin) == true) analogWrite (pin, 0); }
Alle van de pinnen (digitaal en analoog) doorlopen en zet hen (tot MAX_FIREFLIES_ON). Geeft ons een kans om te controleren of alle van de LED's zijn aangesloten en werken voordat het programma //and wordt gestart wanneer we raken opnieuw instellen op de arduino. VOID caterpillar() {int. allcount = (sizeof(allPins)/sizeof(*allPins));
for (int i = allcount-1; ik > = 0; i--) {als (ik < allcount-MAX_FIREFLIES_ON) turnLedOff(allPins[MAX_FIREFLIES_ON+i]); turnLedOn(allPins[i]); delay(250);}
for (int i = MAX_FIREFLIES_ON-1; ik > = 0; i--) {turnLedOff(allPins[i]); delay(250);}}
void setup {//Set alle de digitale pennen voor uitvoer pinMode (PotPin, INPUT); Serial.begin(9600); voor (int i = 0; ik < (sizeof(allPins)/sizeof(*allPins)); i ++) {/ / if (isAnalog(i) == false) / / pinMode (ik, uitgang); / /}
Caterpillar(); Initialize(); }
void loop {vervagen = map(analogRead(PotPin), 0, 1023, 1, 255); / / vervagen = 255; Serial.println(fade); analogFireflies(); }