Kakelende Koekoekskerkklok Met Smart Glass

by pimvanwieren in Workshop > Lighting

686 Views, 0 Favorites, 0 Comments

Kakelende Koekoekskerkklok Met Smart Glass

scree2132.png
screen2.png

Voor dit project heb ik een koekoeksklok gemaakt met een moderne twist eraan. De klok heeft een groot gat waar je niet doorheen kan kijken, behalve om het uur. Dan komt er een licht en word het glas transparant. Een kerkje verschijnt met daarop een haantje dat beweegt. De klok maakt geluid in de vorm van kerkklok slagen. Het aantal keer dat de kerkklok geluid maakt is afhankelijk van de tijd. In de ochtend hoor je de haan ook kakelen, maar 's nachts hoor je het geluid van wolven. Het licht wat getoond word veranderd met de dag mee. In de ochtend warm licht en in de avond blauw donker-licht. Ook heb ik een bewegingssensor toegevoegd die het glas transparant maakt wanneer je wil. De Arduino weet hoe laat het is door middel van een real-time clock. Deze houd de tijd bij ook wanneer de Arduino uit is.


Tijdens mijn research naar wat er allemaal mogelijk is met een Arduino ben ik achter het bestaan van smart glas (ook wel PDLC film genoemd) gekomen. Dit is een speciaal soort plastic wat je op glas kan plakken. Wanneer er stroom op dit plastic staat dan word het glas van diffuus naar compleet transparant. Dit vond ik een heel cool effect dus ik wilde dit graag gebruiken in mijn project. Ik kwam op het idee toen ik op het terras zat in mijn dorp en de kerkklok begon te luiden. Ik bedacht mij dat een kerkklok eigenlijk een grote koekoeksklok is. Toen ik de link legde met het smart glas was het idee al grotendeels klaar.

Supplies

Elektronische componenten

  • Arduino Uno
  • PDLC Smart Film A4 formaat aan een stekker
  • 5V 10A LRS-50-5 Schakelvoeding
  • DFPlayer Mini MP3-speler met een micro-SD kaart
  • DS3231 Real-Time Clock
  • WS2812 Ledstrip minimaal 30 cm
  • Fotek SSR-40 DA Relais
  • Velleman VMA314 PIR-Bewegingssensor
  • Adafruit Proto Shield for Arduino Kit - Stackable Version R3
  • 1k weerstand
  • Speaker 3W
  • Twee wago verbindingsklemmen 3-voudig
  • Draadbruggen set

Materialen voor de behuizing

  • 1220x1440x10mm Multiplex plaat
  • Witte verf
  • Bruine verf
  • Blauwe verf
  • Plaatjes uit tijdschriften
  • Fotolijstje A4-formaat met glazen voorkant
  • Houtplamuur
  • Schroeven
  • Aluminium strip

Gereedschap

  • Soldeerbout met soldeer
  • Kruiskop schroevendraaier
  • Houtzaag
  • Boormachine
  • Striptang
  • Gatenzaag 60mm

Testen

Iteraties ITTT Pim van Wieren
conectpt.jpg
iteratie.png
iteratie2.png
iteratie3.png

Voordat ik het project heb gemaakt heb ik eerst de juist componenten besteld en deze individueel uitgetest. Door deze iteraties heb ik meerdere functie toegevoegd die ik eerder niet van plan was, zoals licht. Als laatst heb ik ook een PIR-bewegingssensor gekocht om handmatig het smart glas in te schakelen. Eerder had ik ook gepland om wind toe te voegen, maar dit bleek te ingewikkeld te zijn. Het filmpje hierboven laat mijn verschillende tests zien.

Het Bouwen

IMG_20210720_172949.jpg
IMG_20210720_172943.jpg
IMG_20210724_120830.jpg
IMG_20210722_173729.jpg
3f7bce47-76cb-4358-9cc1-d61bf4329517.jpg
IMG_20210722_172243.jpg
IMG_20210722_173739.jpg
IMG_20210724_120835.jpg
IMG_20210724_131555.jpg
IMG_20210724_132245.jpg
IMG_20210724_132307.jpg
4f05c30b-0247-4869-a62d-bdf3f3cecb59.jpg
4dec5ba6-84b8-4f70-80f6-134918119f33.jpg
87241f1b-78c7-453f-81c9-b6f82f359934.jpg
IMG_20210801_134905.jpg
IMG_20210801_134447.jpg
IMG_20210801_140748.jpg
IMG_20210801_143824.jpg
IMG_20210801_143821.jpg

De behuizing van de klok is een houten huisje gemaakt van multiplex. Dit huisje heeft een gat voor een ouderwets analoog klokje die zich in de bovenkamer van de punt bevind. Ik begon met 3 rechthoekige platen uit te zagen uit de grote multiplex plaat. Een plaat voor de voorkant, een voor de achterkant en een voor de tussenwand. Deze platen moesten een stuk groter dan A4 worden, want het fotolijstje met het smart glass erop geplakt moest erin geschoven kunnen worden Vervolgens heb ik uit deze 3 platen met een decoupeerzaag een punt gezaagd die later aansluit opo het dakje. Daarna ik twee zijkanten van mulitplex gezaagd en deze bevestigd aan de voorkant. Ik heb vervolgens een gat aan de voorkant gemaakt voor het smart glass en een voor het ronde klokje. Met schroeven heb ik de voorkant en de zijkanten aan elkaar verbonden. Beneden heb ik een regeltje toegevoegd waar ik een vloertje op het gezet. Dit was zodat er nog ruimte was voor de kabels die via beneden moeten lopen. Ik heb het dakje gemaakt van 2 mulitplex plaatjes met verbonden met een metalen strip. Als laatst heb ik een vloertje gemaakt bij de bovenkant waarin elektronica moest komen. Daarna heb ik de spleten opgevuld met houtplamuur en daarna heb ik alles geschuurd. Daarna heb ik een kerkje gemaakt van hout en die geschilderd. De servo heb ik achter de klok bevestigd en op de as van de servo zit een klein houten haantje. Als laatste stap heb ik de tussenwand en het kerkje geschilderd en beplakt met kleine huisjes uit een tijdschrift. De tussenwand word later bevestigd wanneer alle elektronica erin zit.

Het Bevestigen

Arduinofritz.png

Het bevestigen van alle elektronica was niet zo makkelijk. Vooral de Arduino voeden zonder de USB kabel was een uitdaging. Uiteindelijk heb ik gekozen voor een 5V 10A power supply die genoeg stroom heeft voor de ledstrip en de arduino zelf. Het smart glas word gevoed door een 60VAC stekkerblok. Deze word geschakelt met een relais door de Arduino. De MP3 module zit vast gesoldeerd aan het proto-board. Alle andere componenten zijn vastgemaakt met montage tape op de juist plek en de kabels gesoldeerd op het protoboard.

De Code

IMG_20210801_202828.jpg
IMG_20210801_202823.jpg
IMG_20210801_175005 (1).jpg
//Wat de code doet//De code hieronder is vrij simpel. Het stelt eerst alle componenten goed in voor gebruik.//Daarna check de code om de seconde de tijd. Als het uur veranderd dan schakelt de switch case door//naar het volgende uur. In die case voert hij de FadeInOut functie uit die het geluid en het licht//regelt. Case 6 en 0 zijn anders, deze spelen een extra geluid af om je wakker te maken of aan te//duiden dat het 12 uur snachts is. Ook checkt de code om de seconde de pir sensor. Overal staan//comments bij voor verduidelijking.#include <ds3231.h> //Libary nodig voor de DS3231 Real-Time Clock Module#include <Wire.h> //Libary nodig voor de DS3231 Real-Time Clock Modulestruct ts t; //De struct waar alle informatie over de tijd in word gehouden#include <SoftwareSerial.h>  //Libary nodig voor de DFPlayer Mini MP3 Player#include <DFRobotDFPlayerMini.h> //Libary nodig voor de DFPlayer Mini MP3 Playerstatic const uint8_t PIN_MP3_TX = 11; //Zet pin 11 voor gebruik met de MP3 modulestatic const uint8_t PIN_MP3_RX = 10; //Zet pin 10 voor gebruik met de MP3 moduleSoftwareSerial softwareSerial(PIN_MP3_RX, PIN_MP3_TX); //Bereid de connectie met de MP3 module voorDFRobotDFPlayerMini player; //Maak het object aan van de MP3 module#include <Servo.h> //Libary nodig voor de servoServo servo; //Maak een servo object aan genaamd servoint positie = 0; //Initiele positie van de servo#include <Adafruit_NeoPixel.h> //Libary nodig voor de WS2812 ledstrip#define NUM_LEDS 21 //Aantal LEDs in de strip#define PIN 6 //De pin waar de ledstrip mee verbonden isAdafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800); //Maak het object aan van de ledstripvoid setup() {  Serial.begin(9600); //Begin connectie met de computer  Wire.begin(); //Begin connectie met de DS3231 Real-Time Clock Module  DS3231_init(DS3231_CONTROL_INTCN); //Initaliseer de DS3231 Real-Time Clock Module  //Als je de tijd wilt instellen uncomment de onderstaande variabelen  //t.hour = 5;  //t.min = 59;  //t.sec = 45;  //t.mday = 3;  //t.mon = 7;  //t.year = 2021;  DS3231_set(t); //Stel de tijd in door de bovenstaande getallen in te vullen  softwareSerial.begin(9600); //Begin connectie met de MP3 module  if (player.begin(softwareSerial)) //Als de MP3 module correct is aangesloten  {    Serial.println("OK");    player.volume(30); //Zet het volume van de speaker op maximaal  } else //Als de MP3 module niet correct is aangesloten  {    Serial.println("Connecting to DFPlayer Mini failed!");  }  strip.begin(); //Begin de connectie met de ledstrip  strip.show(); //Schakel alle leds uit als deze nog aan stonden  pinMode(2, OUTPUT); //Zet pin 2 als een output voor gebruik met de Fotek SSR-40 DA relais. Dit schakelt het PDLC film aan en uit  digitalWrite(2, LOW); //Zet pin 2 uit  pinMode(4, INPUT); //Zet pin 4 als input voor de PIR sensor}void loop() {  getTimePlusMovement(); //Haal de tijd op en de PIR sensor  switch (t.hour) //Deze switch veranderd om het uur. Elke case is het bijbehorende uur  {    case 6:      if (t.min == 0)       {        player.play(3); //Speel het haan geluid af        delay(2000);      }      FadeInOut(0xff, 0xff, 0xff);      break;    case 7:      FadeInOut(0xff, 0xff, 0xff);      break;    case 8:      FadeInOut(0xff, 0xff, 0xff);      break;    case 9:      FadeInOut(0xff, 0xff, 0xff);      break;    case 10:      FadeInOut(0xff, 0xff, 0xff);      break;    case 11:      FadeInOut(0xff, 0xff, 0xff);      break;    case 12:      FadeInOut(0xff, 0xff, 0xff);      break;    case 13:      FadeInOut(0xff, 0xff, 0xff);      break;    case 14:      FadeInOut(0xff, 0xff, 0xff);      break;    case 15:      FadeInOut(0xff, 0xff, 0xff);      break;    case 16:      FadeInOut(0xff, 0xff, 0xff);      break;    case 17:      FadeInOut(0xff, 0xff, 0xff);      break;    case 18:      FadeInOut(0xff, 0xff, 0xff);      break;    case 19:      FadeInOut(0xff, 0xff, 0xff);      break;    case 20:      FadeInOut(0xff, 0xff, 0xff);      break;    case 21:      FadeInOut(0xff, 0xff, 0xff);      break;    case 22:      FadeInOut(0xff, 0xff, 0xff);      break;    case 23:      FadeInOut(0xff, 0xee, 0xf3);      break;    case 0:      if (t.min == 0)       {        player.play(4); //Speel het wolf geluid af        delay(2000);      }      FadeInOut(0x00, 0x00, 0x80);      break;  }}void FadeInOut(byte red, byte green, byte blue) {  float r, g, b;  int aantalBingBong; //Hoevaak de klok moet luiden  bool speeleerste = true;  if (t.min == 0)  {    for (int k = 0; k < 256; k = k + 1) //Fade de led strip in    {      r = (k / 256.0) * red;      g = (k / 256.0) * green;      b = (k / 256.0) * blue;      setAll(r, g, b);      strip.show();      delay(10);    }    digitalWrite(2, HIGH); //Het smart glass word transparant    if (t.hour > 12) //Als het in de middag is speel het uur - 12 keer    {      aantalBingBong = t.hour - 12;    }    else if (t.hour == 0)    {      aantalBingBong = 12; //Als het 12 uur snachts is speel dan 12 keer    }    else    {      aantalBingBong = t.hour; //Anders speel gelijk aan het uur    }    for (int i = 0; i < aantalBingBong; i = i + 1)    {      if (speeleerste == true)      {        player.play(1); //Speel bing        speeleerste = false; //Speel bong hierna      }      else      {        player.play(2); //Speel bong        speeleerste = true; //Speel bing hierna      }      servo.attach(3); //Stel de servo in op pin 3      servo.write(180); //Draai de servo      delay(1000);      servo.write(0); //Draai de servo de andere kan op      delay(1000);    }    servo.detach(); //Ontkoppel de servo om storingen te voorkomen    delay(1000); //Houd het licht aan voor een extra seconde    for (int k = 255; k >= 0; k = k - 2) //Fade de led strip uit    {      r = (k / 256.0) * red;      g = (k / 256.0) * green;      b = (k / 256.0) * blue;      setAll(r, g, b);      strip.show();    }    digitalWrite(2, LOW); //Het smart glass word mat    while (t.min == 0)    {      getTimePlusMovement();    }  }}void setAll(byte red, byte green, byte blue) {  //Zet alle leds een kleur bepaalde als parameter  for (int i = 0; i < NUM_LEDS; i++ )  {    strip.setPixelColor(i, strip.Color(red, green, blue));  }  strip.show();}void getTimePlusMovement() {  DS3231_get(&t); //Haal alle tijd informatie op van de DS3231 Real-Time Clock Module en laat deze zien op de computer  Serial.print("Date : ");  Serial.print(t.mday);  Serial.print("/");  Serial.print(t.mon);  Serial.print("/");  Serial.print(t.year);  Serial.print("\t Hour : ");  Serial.print(t.hour);  Serial.print(":");  Serial.print(t.min);  Serial.print(".");  Serial.println(t.sec);  delay(1000);  if (digitalRead(4) == HIGH) //Als er beweging is dan maak het smart glass doorzichtig  {    Serial.println("Beweging");    digitalWrite(2, HIGH);  }  else  {    Serial.println("Geen beweging");    digitalWrite(2, LOW);  }}

Conclusie

Ik heb veel geleerd van dit project. Voornamelijk hoe je moet solderen, dat had ik namelijk nog nooit gedaan. Ook hoe relais werken en dat hogere spanning je een flinke schok kan geven als je niet oppast. Ik heb veel beter leren zagen en schuren. Het bedenken van het idee vond ik niet heel ingewikkeld, maar het uitvoeren en de complexiteit die daarbij kwam onderschatte ik heel erg, dus dat was wel een groot leermoment. Hierdoor kwam ik uiteindelijk krap te zitten qua tijd, maar na veel werk is het toch gelukt.