arduino in kunstwerk

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 5
Geregistreerd: 11 Jan 2014, 16:34

arduino in kunstwerk

Berichtdoor joshua3 » 11 Jan 2014, 17:22

Hallo allemaal,

Vandaag mezelf geregistreerd op dit forum.

Ik zal mij even voorstellen,

Ik ben Joshua Oly, 41 jaar vader van 2 kinderen werkzaam als ZZP audio/video technicus
MTS electro afgerond (maar daar verder weinig in gedaan..) woonachtig in Silvolde (8erhoek.).

Mijn Schoonzus is kunstenaar en schildert er lustig op los, ze heeft een 3-luik gemaakt en vroeg aan mij of ik iets wilde maken in dat 3-luik.

ze gaf het voorbeeld van een verjaardagskaart die als je die opent een geluid produceert, dat idee wil ze in haar 3-luik verwerken.
Ik heb daar over nagedacht, en verteld dat ik dat wel een uitdaging vond (met m'n grote mond..)

een MP3 speler met SD kaartje gekocht, schakelaars etc. en prutsen maar.. al snel kwam ik erachter dat het niet zo eenvoudig was om de "play"knop te bedienen door en externe schakelaar, dus een Arduino UNO gekocht die mij uitkomst zou moeten geven.

de opstelling is als volgt:

3-luik.
Reedcontact op de bovenrand (als het 3-luik dichtzit N.C.).
PIR-Schakelaar onderaan het 3-luik.
MP3 speler met speakers in het 3-luik ingebouwd.

de bedoeling is het volgende:

Als het 3-luik gesloten is is er niets te horen.
Wordt het 3-luik geopend dat moet er een MP3'tje klinken, het reedcontact is dan open en blijft open (aangesloten op digital 2 input)
de MP3 duurt 3 min. daarna is het weer stil.
wanneer nu iemand voorbij de PIR schakelaar loopt moet de MP3 weer klinken.
wanneer het 3-luik gesloten wordt moet het weer stil zijn (het MP3'tje mag wel uitklinken).

Mijn grootste probleem is de digitale uitgang die "even" (ongeveer 250ms) hoog moet worden om de "play" knop van de MP3 speler te activeren.
Als het 3-luik open wordt gezet moet de MP3 1 keer klinken maar in de code krijg ik dit niet voor elkaar.
Ik heb ledPin13 eerst gebruikt om de "play" knop te simuleren.

heeft iemand een suggestie welke functie ik moet gebruiken om dit te verwezenlijken?

(de hardwarematige aansluitingen heb ik geen vragen over..)

Groet,

Joshua.

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: arduino in kunstwerk

Berichtdoor nicoverduin » 11 Jan 2014, 18:08

Code: Alles selecteren
unsigned long teller = 0;


loop() {
    if (teller != 0L){
        if (millis() > teller) {
            //
            // zet teller uit
            //
            teller = 0;
            digitalWrite(MP3PIN, LOW);
        }
    }
    if (MP3 moet worden aangezet) {
        digitalWrite(MP3PIN, HIGH);
        teller = millis() + 250;
    }
    //
    // en nu kan je nog van alles doen
    //
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 5
Geregistreerd: 11 Jan 2014, 16:34

Re: arduino in kunstwerk

Berichtdoor joshua3 » 11 Jan 2014, 18:26

Hoi Nico,

Bedankt voor je snelle reactie, ik ga de suggestie uitwerken in m'n code.
laat je weten..

Joshua.

Berichten: 5
Geregistreerd: 11 Jan 2014, 16:34

Re: arduino in kunstwerk

Berichtdoor joshua3 » 11 Jan 2014, 21:43

ok, ik de code aangepast, hij ziet er nu als volgt uit:

Code: Alles selecteren
unsigned long teller = 0;
const int reedcontact = 2;
const int ledPin = 13;
int reedState = 0;


void setup()
{
pinMode(ledPin,OUTPUT);
pinMode(reedcontact,INPUT);
}

void loop()
{
reedState = digitalRead(reedcontact);
  if (teller != 0){
        if (millis() > teller) {
            //
            // zet teller uit
            //
            teller = 0;
            digitalWrite(ledPin, LOW);
        }
    }
    if (reedState == LOW) {
        digitalWrite(ledPin, HIGH);
        teller = millis() + 250;
       
    }
    //
    // en nu kan je nog van alles doen
    //
}


als het reedcontact gesloten is is de ledPin ("play"-knop MP3) uit, dat is goed.
maar het reedcontact van elkaar is (3-luik open) gaat de ledPin wel aan maar niet meer uit na 250ms.

Doe ik iets fout?

Berichten: 5
Geregistreerd: 11 Jan 2014, 16:34

Re: arduino in kunstwerk

Berichtdoor joshua3 » 11 Jan 2014, 21:51

Wat ik ook merk is dat als ik die 250ms ophoog naar b.v. 3000ms als ik het reedcontact weer sluit het 3 sec extra duurt voordat de led weer uitgaat..

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: arduino in kunstwerk

Berichtdoor nicoverduin » 12 Jan 2014, 00:26

Ik zou dit:
Code: Alles selecteren
    if (reedState == LOW) {
        digitalWrite(ledPin, HIGH);
        teller = millis() + 250;
       
    }


vervangen in

Code: Alles selecteren
    if (reedState == LOW) {
        if (teller == 0 ){
            digitalWrite(ledPin, HIGH);
            teller = millis() + 250;
       }
    }


Dan wordt de teller maar een keer gezet als de reed LOW is. Omdat de reed LOW best behoorlijk lang duurt, blijft het de teller met 250mSec opschuiven.

Tenslotte: Ik weet niet of je de Reed met een weerstand aan de Vcc heb hangen, want dat kan je dan wel beter doen. Anders zweeft de input als hij open staat
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: arduino in kunstwerk

Berichtdoor nicoverduin » 12 Jan 2014, 01:30

Kon het toch niet laten :)

Dit werkt

Code: Alles selecteren
unsigned long teller    = 0;   // timer voor de 250 milliseconden
boolean released       = false;   // wordt gebruikt als indicatie dat de reed een keer open is geweest
unsigned int  reedState;      // status van de reed switch

#define REEDCONTACT 14         // pin definities
#define LEDPIN       13
#define PULSTIJD   250L      // duur van de play puls

void setup() {
   pinMode(LEDPIN      , OUTPUT);
   digitalWrite(LEDPIN   ,LOW);
   pinMode(REEDCONTACT   , INPUT_PULLUP);      // als je Pullup gebruikt is de weerstand naar VCC overbodig
}

void loop() {
   //
   // kijk of de timer afgelopen is
   //
   if (teller != 0L) {
      if (millis() >= teller) {
         //
         // zet teller uit
         //
         teller = 0L;
         //
         // PLAY is uit
         //
         digitalWrite(LEDPIN, LOW);
      }
   }
   //
   // lees de reed switch
   //
   reedState = digitalRead(REEDCONTACT);
   //
   // doe niets totdat er het reed contact open is geweest
   //
   if (released) {
      //
      // hij is een keer open geweest
      //
      if (reedState == LOW) {
         //
         // alleen de teller en PLAY aanzetten als de teller uit staat (voorkomen dubbele pulsen)
         //
         if (teller == 0L) {
            //
            // PLAY aan
            //
            digitalWrite(LEDPIN, HIGH);
            //
            // zet de timer
            //
            teller = millis() + PULSTIJD;
            //
            // en nu wachten tot de reed is opengezet
            //
            released = false;
         }
      }
   } else {
      //
      // check of de reed open is
      //
      if (reedState == HIGH) {
         //
         // dan mag hij nu weer dicht
         //
         released = true;
      }
   }
   //
   // en nu kan je nog van alles doen
   //
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 5
Geregistreerd: 11 Jan 2014, 16:34

Re: arduino in kunstwerk

Berichtdoor joshua3 » 12 Jan 2014, 01:47

ff snel je laatste code in de UNO geladen, en idd het werkt, morgen maar even uitzoeken waarom dit dan werkt :D
tnx a lot!
En ja ik heb een pull-down resistor van 10k gebruikt voor de ingang.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: arduino in kunstwerk

Berichtdoor nicoverduin » 12 Jan 2014, 11:41

Pullup of pull down want dat heeft nog wel effect
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten