Arduino klok, gemaakt met flipperkasttellers.

Toon hier Uw afgeronde projecten aan anderen.
Gebruikers-avatar
Berichten: 48
Geregistreerd: 08 Mei 2014, 22:47
Woonplaats: Westervoort

Arduino klok, gemaakt met flipperkasttellers.

Berichtdoor Grunch » 13 Apr 2016, 19:08

Het is al een lange tijd geleden dat ik iets met Arduino gedaan heb, maar gelukkig heeft mijn vriendin een klein projekt kunnen verzinnen waar ik met veel plezier mee bezig ben geweest.
Omdat wij van flipperen houden en weleens naar een flipperavond gaan, is het een klok geworden. Deze klok geeft de tijd weer dmv pinball reels van Williams, ook wel telwielen genoemd.
om bij spanningsuitval de tijd niet te hoeven instellen heb ik er een realtimeklokje (rtc) aangeknoopt.
Uiterlijk wilde ik het een steampunkachtige look geven, de koperen bel ontbreekt nog. Het volgende project is wederom een klok met telwielen, maar ook met 3-tonige chimes uit een Bally.
Deze zal dan ieder heel uur de tijd ten gehore brengen, maar ook ieder half uur een geluid geven, dit is natuurlijk wel uit te schakelen want de klok is sowieso vrij gehorig :D .

Afbeelding

Afbeelding

https://www.youtube.com/watch?v=JK153ASkqpE

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Arduino klok, gemaakt met flipperkasttellers.

Berichtdoor shooter » 14 Apr 2016, 10:08

mooi ding man,
zijn die spoelen wel DC?
persoonlijk zou ik de arduino en de RTC door laten lopen dus om de schakelaar om.
als je dan smorgens de schakelaar aan zet dan springen de cijfers gelijk naar de goede positie zonder eerst te resetten.
(of hem zelf snachts automatisch even te laten stoppen met lopen en smorgens vanzelf lampje aan en hup gaat de tijd.
hoeveel milliseconden heb je een spoel aan?
maak eens een schema in fritzing of zo, en stuur het op naar bijv elektor (harry baggen)
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 48
Geregistreerd: 08 Mei 2014, 22:47
Woonplaats: Westervoort

Re: Arduino klok, gemaakt met flipperkasttellers.

Berichtdoor Grunch » 14 Apr 2016, 12:55

Hallo Paul,

Dankjewel.

De spoelen zijn idd. DC en worden 145 ms bekrachtigd.
Dat resetten is een klein beetje gemakzucht van mij. :)
Die routine gebruik ik ook wanneer het 24.00hr wordt, immers moet dat 0.00hr zijn omdat tevens een nieuwe dag begint. Ik heb er ook nog aan zitten denken om een dcf77' Klok te gebruiken, maar nu zit er een rtc ds3107 in die erg goedkoop is en betrouwbaar.
Misschien gaat het me lukken.om het schema in Fritzing te maken. Het driverbordje heb ik met kicad gemaakt.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Arduino klok, gemaakt met flipperkasttellers.

Berichtdoor shooter » 14 Apr 2016, 19:39

kicad mag ook hoor.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 48
Geregistreerd: 08 Mei 2014, 22:47
Woonplaats: Westervoort

Re: Arduino klok, gemaakt met flipperkasttellers.

Berichtdoor Grunch » 16 Apr 2016, 23:54

Hallo Paul,

Ik heb geprobeerd het in geheel in Fritzing te plaatsen het breadboard lukt wel, maar het schema is een gigantische puinhoop.
Misschien dat ik nog wat moet spelen met Fritzing.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Arduino klok, gemaakt met flipperkasttellers.

Berichtdoor shooter » 18 Apr 2016, 09:10

het tekenen moet je behoorlijk goed voorbereiden, en net als in het echt is plaatsing een taak. in alle 3 de systemen, eerst de componenten plaatsen en dan maakt het niet uit hoe je de verbindingen maakt.
het is ook maar een hulpmiddel om scholieren een beetje te laten documenteren.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 210
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: Arduino klok, gemaakt met flipperkasttellers.

Berichtdoor baco1978 » 20 Apr 2016, 08:45

Erg mooi gemakt zo'n klokje :)

Zijn die telwielen nog zo gemakkelijk te verkrijgen?
Met vriendelijke groet Arjan

Gebruikers-avatar
Berichten: 48
Geregistreerd: 08 Mei 2014, 22:47
Woonplaats: Westervoort

Re: Arduino klok, gemaakt met flipperkasttellers.

Berichtdoor Grunch » 20 Apr 2016, 22:23

Jazeker, bij http://www.flipperwinkel.nl zou het wel eens kunnen en anders op ebay.

Gebruikers-avatar
Berichten: 48
Geregistreerd: 08 Mei 2014, 22:47
Woonplaats: Westervoort

Re: Arduino klok, gemaakt met flipperkasttellers.

Berichtdoor Grunch » 09 Feb 2017, 22:43

Filmpje van de klok die de tijd ten gehore brengt.
Het grappige is dat er ook een volumeknop op zit waarmee je het geluid harder of zachter kunt zetten.
Ik stel hiemee niets meer in dan het delay waarmee de solenoid bekrachtigd wordt, zie sketch.

https://www.youtube.com/watch?v=vEyurfKl-jc


Ik stuitte in oktober tegen een probleem aan, de zomer/wintertijd, deze moet ik nu nog steeds invoegen,
helaas zit dit niet in de RTC (DS3231) ingebakken.

Wat ik wil is de tijd, maand en dag uitlezen en hiermee in maart de tijd een uur ophogen en in oktober weer goed zetten.
Dit wordt gedaan met Het Nakamoto algoritme wat ik via Google vond.
Ik zal de sketch moeten herschrijven en dit toevoegen, want het is behoorlijk rechtoe rechtaan geprogrammeerd zoals je hieronder kunt zien.
Programmeren is nog steeds niet mijn sterkste punt, misschien iemand een suggestie?

Code: Alles selecteren
//***************************************  klok  **************************************
//**                                                                                                                                              **
//** Gemaakt door Evert Kaatman voor  Flipperwinkel.nl                                                                   **
//**                                                                                                                                               **
//***********************************************************************************

#include <DS3231.h>

// Init the DS3231 using the hardware interface
DS3231  rtc(SDA, SCL);

// Init a Time-data structure
Time  t;

int volume = 0;
int slagw = 0;
int i = 0;
int j = 0;

int uur1 = 0;
int uur2 = 0;
int min1 = 0;
int min2 = 0;

int duur1 = 0;
int duur2 = 0;
int dmin1 = 0;
int dmin2 = 0;

String u1 = "";
String u2 = "";
String m1 = "";
String m2 = "";

String tijd = "";

void Vol() {
  volume = int(analogRead(0) / 32 + 10);
  if (volume < 12) {
    volume = 0;
  }
}

//Chimes
void DingDong() {

  for (int i = 1; i < 4; i++) {

    Vol();

    if ( volume < 2 ) {
      break;
    }
    digitalWrite (3, HIGH);
    delay (volume);
    digitalWrite (3, LOW);
    delay (145 + (112 - volume));

    digitalWrite (4, HIGH);
    delay (volume );
    digitalWrite (4, LOW);
    delay (145 + (112 - volume));

    digitalWrite (13, HIGH);
    delay (volume );
    digitalWrite (13, LOW);
    delay (145 + (112 - volume ));

    delay(1000);
  }
}


//Tellers op "0" zetten
void NullPos() {

  for (int i = 5; i < 9; i++) {

    while (digitalRead(i + 4) == HIGH) {

      digitalWrite (i, HIGH);
      delay (175);
      digitalWrite (i, LOW);
      delay (175);

    }
  }
  for (int i = 1; i < 13; i++) {
    Vol();
    digitalWrite (4, HIGH);
    delay (volume);
    digitalWrite (4, LOW);
    delay (1000);

  }
}


// *********************************************** tijd uitlezen ***********************************************

void readTime() {

  tijd = rtc.getTimeStr();
  u1 = tijd.substring(0, 1);
  u2 = tijd.substring(1, 2);
  m1 = tijd.substring(3, 4);
  m2 = tijd.substring(4, 5);
  uur1 = u1.toInt();
  uur2 = u2.toInt();
  min1 = m1.toInt();
  min2 = m2.toInt();

}
// *********************************************** tijd zetten ***********************************************

void tijdZetten () {

  for (int i = 0; i < min2; i++) {

    digitalWrite (5, HIGH);
    delay (175);
    digitalWrite (5, LOW);
    delay (175);
  }

  for (int i = 0; i < min1; i++) {

    digitalWrite (6, HIGH);
    delay (175);
    digitalWrite (6, LOW);
    delay (175);
  }
  for (int i = 0; i < uur2; i++) {

    digitalWrite (7, HIGH);
    delay (175);
    digitalWrite (7, LOW);
    delay (175);
  }
  for (int i = 0; i < uur1; i++) {

    digitalWrite (8, HIGH);
    delay (175);
    digitalWrite (8, LOW);
    delay (175);
  }
}



// ****************************************************************************************************************************************
void setup() {

  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(13, OUTPUT);

  pinMode(9, INPUT);
  pinMode(10, INPUT);
  pinMode(11, INPUT);
  pinMode(12, INPUT);

  rtc.begin();

  //tijd instellen
  //rtc.setDOW(THURSDAY);
  //rtc.setDate(1,14, 2017);
  //rtc.setTime(16, 56, 0);

  NullPos();
  readTime();
  DingDong();
  tijdZetten();

  //delay (2000);

  duur1 = uur1;
  duur2 = uur2;
  dmin1 = min1;
  dmin2 = min2;


}

void loop() {



  readTime();


  // ************************************** eenheden minuten **************************************
  if (dmin2 != min2) {

    digitalWrite (5, HIGH);
    delay (175);
    digitalWrite (5, LOW);
    delay (175);
    dmin2++;
    if (dmin2 == 10) {
      dmin2 = min2;
    }
  }

  // **************************************** tientallen minuten ************************************
  if (dmin1 != min1) {

    digitalWrite (6, HIGH);
    delay (175);
    digitalWrite (6, LOW);
    delay (175);

    if (dmin1 >= 5) {


      for (int i = 6; i < 10; i++) {

        digitalWrite (6, HIGH);
        delay (175);
        digitalWrite (6, LOW);
        delay (175);

      }


    }

    dmin1++;

  }
  dmin1 = min1;

  // ************************************** eenheden uren *********************************************
  if (duur2 != uur2) {

    digitalWrite (7, HIGH);
    delay (175);
    digitalWrite (7, LOW);
    delay (175);
    duur2++;



    // **************** slagwerk ********************

    slagw = int (uur1 * 10 + uur2 + 1);

    if (slagw > 24) {
      goto null ;
    }

    if (slagw > 12) {
      slagw = slagw - 12;
    }

    Vol();
    digitalWrite (3, HIGH);
    delay (volume );
    digitalWrite (3, LOW);
    delay (400);

    digitalWrite (4, HIGH);
    delay (volume );
    digitalWrite (4, LOW);
    delay (400);

    digitalWrite (13, HIGH);
    delay (volume );
    digitalWrite (13, LOW);
    delay (3400);

    for (int i = 1; i < slagw; i++) {
      Vol();
      digitalWrite (4, HIGH);
      delay (volume );
      digitalWrite (4, LOW);
      delay (1000);

    }




    if (duur2 = 10) {
      duur2 = uur2;
    }
  }

  // *************************************** tientallen uren *******************************************


  if (duur1 != uur1) {

    digitalWrite (8, HIGH);
    delay (175);
    digitalWrite (8, LOW);
    delay (175);
    duur1++;

null:
    if (duur1 >= 3) {
      NullPos();
      duur1 = uur1;
    }


  }
}


Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Arduino klok, gemaakt met flipperkasttellers.

Berichtdoor shooter » 10 Feb 2017, 14:39

de eerste hit die ik tegenkwam.
https://arduinodiy.wordpress.com/2015/10/13/the-arduino-and-daylight-saving-time/

dat moet je dus in je uren teller bijhouden, en dus soms 2 keer pulsen of juist een keer overslaan.

Je hebt alles met delay geschreven en dat gaat hier prima, maar in andere situaties zal dat gaan opbreken.

verder zet die 175 in een variabele dan hoef je het maar op 1 plaats aan te passen, en gebruik voor het afvallen een langere tijd, bijv 350. dan weet je zeker dat de veer zijn werk gedaan heeft.
paul deelen
shooter@home.nl

Volgende

Terug naar Afgeronde projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 6 gasten