Arduino: Camera (IR) schakelen met bewegingsmelder.

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • MasterL
  • Registratie: Oktober 2003
  • Laatst online: 08-10 08:51

MasterL

Moderator Internet & Netwerken
Topicstarter
Hallo,

Ik ben de afgelopen dagen bezig geweest met mijn nieuwe Arduino Uno.
Mijn plan is om met een bewegingsmelder (z’n simpel Gamma ding) een camera aan
en na een bepaalde tijd weer uit te schakelen.
Bij de camera zit een afstandsbediening waarvan ik m.b.v. De IRremote library de IR signalen
heb kunnen achterhalen en deze kan ik nu versturen met de Arduino met dit script:

l#include <IRremote.h>
IRsend irsend;

void setup()
{
Serial.begin(9600);
}

void loop() {
irsend.sendNEC(0x807F56A9, 32); // IR Record Signal
delay(15000);
}

so far so good, de camera neemt netjes elke 15 seconden een filmpje op maar wat ik eigenlijk
wil is dat de camera opneemt als de bewegingsmelder iets of iemand detecteert.
De bewegingsmelder geeft spanning van 230V als het iets detecteert, hierop heb ik een relais aangesloten
en wil ik het NC (maak) contact gebruiken als “button” voor de Arduino.
Echter het relais zal in werkelijkheid geen echte button zijn maar meer een schakelaar aangezien
de bewegingsmelder het relais 15-20 seconden bekrachtigd. Wat ik eigenlijk wil:

1 Bewegingsmelder detecteert “iets”, het relais schakelt en Arduino stuurt het commando irsend
(en de opname begint).
2 Bewegingsmelder detecteert niets meer, het relais contact wordt verbroken en Arduino stuurt opnieuw het commando irsend (met een delay van 10 sec) (de opname stopt).
3 Arduino wacht tot er opnieuw iets wordt gedetecteerd en stuurt opnieuw het irsend commando
(nieuwe opname begint).
4 etc. etc.

Ik loop een beetje (boel) vast bij het concept van “loops”, hetgene wat in mijn ogen het dichtste bij komt is een whileloop: http://arduino.cc/en/Tutorial/WhileLoop

maar ik twijfel erg of het irsend commando (om de opname te stoppen) dan alsnog gestuurd wordt als het relais al uitgeschakeld is.
Programmeren is absoluut niet mijn sterkste kant maar ik hoop dat iemand mij een zetje in de juiste richting kan geven hoe ik bovenstaande eventueel zou kunnen realiseren.

Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • Flake
  • Registratie: Februari 2001
  • Laatst online: 01-11-2024
Voor dit soort dingen gebruik je in embedded vaak de state machine. Het idee: je hebt 1 variabele (een char) en dat is je state indicator. Geen for of while loops gebruiken, alleen de loop die in je embedded programma al loopt (bij Arduino dus loop()). Vervolgens een transitietabel, met wat er moet gebeuren in een state en wat de conditie is om in een volgende state te belanden. Uit de losse mouw dus in jouw geval:

State 0:
Omschrijving: Powerup, wacht tot de bewegingsmelder iets detecteert
Outputs: Niks
Transities: Als bewegingsmelder iets detecteert, ga naar state 1, anders blijf in state 0

State 1:
Omschrijving: Bewegingsmelder heeft iets gezien, stuur eenmalig cameracommando
Outputs: Activeer camera
Transities: Na 1 keer doorlopen naar state 2

State 2:
Omschrijving: Bewegingsmelder heeft iets gezien, camera loopt, 20 seconden wachten, dan naar state 3 en kijken of dat relais nog steeds aan staat
Outputs: Niks
Transities: Na 20 seconden, ga naar state 3

Enzovoort enzovoort

Op die manier kun je dus zelf bepalen wanneer er weer word gekeken naar dat relais en of dat uberhaupt invloed heeft op jouw systeem, want dat bepaalt de state en niet het relais. In je loop heb je dan een SWITCH(state) staan, zodat alleen de code wordt uitgevoerd die bij die state hoort.

Zie ook: http://www.eetimes.com/document.asp?doc_id=1271837
Als je googled op embedded state machine zul je ook wel wat meer vinden, wellicht ook arduino voorbeelden

[ Voor 16% gewijzigd door Flake op 23-07-2013 00:41 ]