Guten Morgen,
Zuerst einmal ich bin neu hier, heiße Carsten bin 24 und komme aus NRW.
Auch wenn ich schon früher kleine Schaltungen etc aufgebaut habe,
beschränken sich meine Mikrocontroller Erfahrungen auf 3 Wochen. D.h ist
gerade das schreiben von Sketches noch oft nicht ganz so einfach und
logisch für mich wie es für die meisten hier sein dürfte, d.h bitte ich
zu entschuldigen wenn meine Frage sehr doof ist :D
Folgendes ist mein Problem.Thema Licht.
Ich löse mit dem Arduino eine Kamera aus, wahlweise per Licht
(Photowiderstand) oder Ton.
Das klappt auch alles wunderbar, mein großes Problem habe ich allerdings
beim
Und zwar liegt der Photowiderstand an A1 an, und im Sketch wird eben
gesagt
1
intval=analogRead(1);
2
if(val>500)
... und so weiter, genau hier ist mein Knackpunkt, 500 ist mein
Schwellenwert für Innen, draußen im Dunkeln brauche ich maximal 100 wenn
nicht sogar nur 50, um eben sehr feinfühlig und sehr empfindlich
auslösen zu können.
Nun ist die Frage wie ich also die Empfindlichkeit des Lichtauslößers,
möglichst einfach verstellbar gestalten kann.
Meine erste Idee war ein Poti zwischen Photowiderstand und A1.
Getestet habe ich 1k, 10k, 100k allerdings kann ich das Poti drehen
wohin ich will, der wert im Serial Monitor bleibt identisch.
Hat jemand eine Lösung für mich ?
Gibt es z.b die Möglichkeit die Empfindlichkeit stufenweise auf
Tasterdruck zu verstellen ?
Also z.b Startwert 50
1. drücken = 100
nochmal drücken = 200,
nochmal drücken = 300 und so weiter...
oder gibt es eine andere Möglichkeit das ganze möglichst einfach zu
gestalten ?
Am PC umstellen, ist zwar drinnen ne nette Lösung, aber spätestens im
Feldeinsatz sehr unpraktisch.
Ich würde mich sehr freuen wenn mir da jemand helfen kann. Google habe
ich damit schon gefüttert, leider Ergebnislos, villeicht weil ich auch
nach den Falschen Begriffen suche.
gruß
Carsten
Du könntest ein Potentiomenter an einen zweiten analogen Eingang
anschließen. Dann misst Du dort die Spannung und veränderst den
Schwellwert mit diesem Wert in der Software.
Vollständiges Programm und Hardware.
Die Zeit Deiner Niederschrift, investiert in das Nachdenken über eine
Lösung wäre schon zielführender gewesen.
Gestalte den Schwellvert als Variable und überlege, wie man diese von
außen stellbar machen kann.
Im Prinzip tut das Dein "Programm" ja schon.
Porti, Taster, Drehencoder, da gibt es sicher tausende Besipiele.
Hallo,
> Carsten L. schrieb:> Ich löse mit dem Arduino eine Kamera aus, wahlweise per Licht> (Photowiderstand) oder Ton.
was heißt das den praktisch?
Soll mit einem Lichtempuls ausgelöst werden oder soll beim
Unterschreiten oder überschreiten einer bestimmten Helligkeitsschwelle
ausgelöst werden?
Woher kommt dann das Helligkeitssignal?
Für den ersten Fall braucht man keine Einstellerei. Das sollte man eher
hardwaremäßig lösen, indem z.B. ein Differenzierglied benutzt und die
Empfangselektronik so baut, dass sie bei Tag und Nacht funktioniert.
> Nun ist die Frage wie ich also die Empfindlichkeit des Lichtauslößers,> möglichst einfach verstellbar gestalten kann.
Erkläre mal genauer, was du eigentlich damit bezwecken willst.
Gruß Öletronika
Der einfachste Weg ist einen Schalter einzusetzen, den du auf Low
abfragst und per Switch/Case die unterschiedlichen Werte des Sensors
zuordnest.
Beschäftige dich mit den Basics, da wirst du alles dazu finden.
Wenn du nur wissen willst, ob die Spannung des Fotowiderstandes grösser
oder kleiner als die am Poti eingestellte Spannung ist, kannst du auch
den Analog Comparator des Mega nehmen (Pins AIN0 und AIN1).
Da du nicht schreibst, welchen Arduino du benutzt, gehe ich mal vom Uno
aus, der einen Mega328 trägt.
Carsten L. schrieb:> das schreiben von Sketches noch oft nicht ganz so einfach
Auch Loriot hat mal klein angefangen und es dann bis zur Perfektion
ausgebaut. Wieso heisst das eigentlich nicht 'Programme', wie bei allen
anderen Plattformen?
Danke Schon einmal für eure Antworten.
chris_ schrieb:> Du könntest ein Potentiomenter an einen zweiten analogen Eingang> anschließen. Dann misst Du dort die Spannung und veränderst den> Schwellwert mit diesem Wert in der Software.
Das klinkt interessant, nur nun die Anfänger Frage, hast du ein Beispiel
dafür, wie ich den Wert vom Poti auslese und den ausgelesen wert nutze
um die Variabel zu verändern ? Leider bin ich da vollkommen überfragt
wie ich das Softwaretechnisch zusammen basteln soll
Ökoprodukte schrieb:> Vollständiges Programm und Hardware.>> Die Zeit Deiner Niederschrift, investiert in das Nachdenken über eine> Lösung wäre schon zielführender gewesen.> Gestalte den Schwellvert als Variable und überlege, wie man diese von> außen stellbar machen kann.> Im Prinzip tut das Dein "Programm" ja schon.> Porti, Taster, Drehencoder, da gibt es sicher tausende Besipiele.
Darüber habe ich mir wie gesagt Gedanken gemacht, und auch
Experimentiert, leider habe ich es eben nicht hinbekommen, d.h die
Frage.
U. M. schrieb:> was heißt das den praktisch?>> Soll mit einem Lichtempuls ausgelöst werden oder soll beim> Unterschreiten oder überschreiten einer bestimmten Helligkeitsschwelle> ausgelöst werden?> Woher kommt dann das Helligkeitssignal?>> Für den ersten Fall braucht man keine Einstellerei. Das sollte man eher> hardwaremäßig lösen, indem z.B. ein Differenzierglied benutzt und die> Empfangselektronik so baut, dass sie bei Tag und Nacht funktioniert.>>> Nun ist die Frage wie ich also die Empfindlichkeit des Lichtauslößers,>> möglichst einfach verstellbar gestalten kann.> Erkläre mal genauer, was du eigentlich damit bezwecken willst.> Gruß Öletronika
Also, z.b soll die Kamera dann Auslösen wenn ein kleiner Feuerball
entsteht.
Das Signal kommt also z.b von Feuer, einem Streichholz oder auch einem
anderen Blitz.
Jetzt habe ich ja aber logischerweise verschieden Lichsituationen. Im
Studio z.b ist es deutlich heller als Nachts draußen, und genau dieses
Hintergrundlicht will ich mit dieser Schwelle ignorieren.
Im Grund möchte ich also so lange die Empfindlichkeit verstellen bis das
Umgebungslicht ignoriert wird, so das dann jeder anstieg in der
Helligkeit zum Umgebungslicht regestriert und zum auslösen genutzt wird.
Das ganze klappt auch echt gut, allerdings muss ich eben die Variable
>500 am Pc verstellen, und da suche ich eine Möglichkeit entweder das
Eingangs signal an A0 regelbar zu machen, oder eben die Variable zu
verändern.
Also ja, im grunde soll er immer reagieren wenn ein Schwellenwert
überschritten wird
Dieter S. schrieb:> Der einfachste Weg ist einen Schalter einzusetzen, den du auf Low> abfragst und per Switch/Case die unterschiedlichen Werte des Sensors> zuordnest.>> Beschäftige dich mit den Basics, da wirst du alles dazu finden.
Einen Schalter ? wie denn das ? ich hatte kurz an einen 12 Poligen
Schalter gedacht mit verschieden Widerständen, aber da ich ja auch bei
einem Poti am Seriell Monitor keinen unterschied an A1 beim drehen
messe, hab ich das für wenig vielversprechend gehalten.
Leider habe ich in den Grundlagen und Beispielen dazu nichts passendes
gefunden.
Gruß
Carsten
Du solltest einfach anfangen und das mit einem Schalter an einem Port
starten und das langsam erweitern. Als Schalter kannst du Dipschalter
nehmen.
Und wenn das läuft, kannst du es mit einem Taster und Zähler bauen.
Hallo,
> Carsten L. schrieb:> Das Signal kommt also z.b von Feuer, einem Streichholz oder auch einem> anderen Blitz.
Aha, also willst du das Hintergrundlicht gar nicht auswerten, sondern
eigentlich ganz weg haben.
Das macht eben genau eine Schaltung, die nur die schnelle Änderung ,
also den Blitz durchläßt, aber das Gleichlicht eben nicht.
> Jetzt habe ich ja aber logischerweise verschieden Lichsituationen. Im> Studio z.b ist es deutlich heller als Nachts draußen, und genau dieses> Hintergrundlicht will ich mit dieser Schwelle ignorieren.
Die Herangehensweise ist suboptimal.
> Im Grund möchte ich also so lange die Empfindlichkeit verstellen bis das> Umgebungslicht ignoriert wird, so das dann jeder anstieg in der> Helligkeit zum Umgebungslicht regestriert und zum auslösen genutzt wird.
Das ist eben Fummelei, die du kaum benötigst.
> Also ja, im grunde soll er immer reagieren wenn ein Schwellenwert> überschritten wird
Nö, es soll eigentlich reagieren, wenn ein rel. schnelles Ereignis
eintritt sich also etwas reändert. Langsamer Änderungen willst du ja gar
nicht auswerten.
Mit einer Schaltung nach dem Prinzip wie hier kann man das erreichen:
http://uwiatwerweisswas.schmusekaters.net/Uwi/ELEKTRONIK/Opto_Laser/Fotoverst%e4rker.PDF
Der linke Teil (mit U1A, D1) ist der eigentliche Fotodetektor
(Transimpedanzverstärker).
Mit R2 kann man die Verstärkung einstellen. C4/C5 unterdücken die
Schwingneigung der Schaltung. Bei Tageslicht darf die Schaltung noch
nicht übersteuern. Entsprechend ist R2 nicht zu groß zu machen.
Wie empfindlich das reagiert, hängt dann auch von der Optik ab. Die
Optik muß ja nicht in die Sonne blicken, sondern sollte in den Bereich
schauen, wo das der Lichtblitz zu erwarten ist und andere Bereich eher
ausblenden.
Der Spannungsteiler R3 + R4 + R5 ist schon etwas spezieller und in den
meisten Schaltungen zum Transimpedanzverst. nicht zu finden.
Damit kann man Wechsellicht mehr verstärken als das Gleichlicht, weil
der Spannungsteiler als Hochpass kein Gleichlicht durchlässt.
Im weiteren geht das Signal über das Differenzierglied C6 zum OPV U1B
weiter. C6 läßt auch kein Gleichsignal durch, so dass U1B nur Änderungen
der Helligkeit verstärken kann. C7 macht hinten nochmal das gleiche.
Die Grenzfrequenz für die Gleichtlichtunterdrückung kann man durch
Einstellen der Werte für C5, C6 und C7 und auch durch die Werte R3/R4
verändern.
Mit dem Poti R7 kann man auch nochmal die Ansprechempfindlichkeit
festlegen. Wenn die Schaltung zu empfindlich wird, dann reagiert sie
auch schon auch winzigste Änderungen der Helligkeit.
So kannst du die Emfindlichkeit gegen einen Lichtblitz um das
tausendfache empfindlicher machen als gegen das Gleichlicht und mußt
dazu nix umstellen.
Gruß Öletronika
Servus,
Du schreibst: Das klappt auch alles wunderbar.
Dann würde ich das softwaremäßig lösen.
z.b.
Einmalig beim Start, Reset oder auch Knopfdruck
eine variable mit
int umgebungslicht = analogRead(1);
setzen.
dann in deiner Hauptschleife
int val = analogRead(1);
if (val > umgebungslicht + 30)
auf plötzliche Lichterhöhung reagieren.
gruß Harald
Harald schrieb:> Servus,>> Du schreibst: Das klappt auch alles wunderbar.>> Dann würde ich das softwaremäßig lösen.> z.b.> Einmalig beim Start, Reset oder auch Knopfdruck>> eine variable mit>> int umgebungslicht = analogRead(1);>> setzen.>> dann in deiner Hauptschleife>> int val = analogRead(1);> if (val > umgebungslicht + 30)>> auf plötzliche Lichterhöhung reagieren.>> gruß Harald
Hallo,
Ich hab das heute mal Versucht, da es sehr schlüssig klingt. Leider
schein ich was Falsch zu machen.
Denn er lößt dauer aus, ergo ich muss immer noch per hand verstellen,
als würde er das "umgebungslicht" ignorieren.
1
voidloop()
2
//Begin des Lichtprogrammes
3
{{
4
intval=analogRead(1);
5
if(val>umgebungslicht+50)
6
{
7
digitalWrite(ledpinlicht,HIGH);
8
digitalWrite(flashPin,HIGH);
9
Serial.println(val);
10
}
11
else
12
{
13
digitalWrite(ledpinlicht,LOW);
14
digitalWrite(flashPin,LOW);
Natürlich steht vor dem Setup :
1
intumgebungslicht=analogRead(1);
Jemand eine Idee warum er das ignoriert ?
Gruß
Carsten
Deklariere die Variable außerhalb der geschweiften Klammern. Und im
setup setzt du umgebunglicht, so wie du es gemacht hast, ohne int
vorne.
int umgebungslicht
Muss vor allem außerhalb der geschweiften klammer stehen.
Powerbank schrieb:> int umgebungslicht> Muss vor allem außerhalb der geschweiften klammer stehen.
da wird es auch stehen sonst lässt sich das Programm nicht kompilieren
(wenn es denn der wirkliche Quelltext ist)