einfacher schalter, 2 sensoren

hallo liebe ardunio-community,

ich will mir einen kleinen einfachen controller für max/msp bauen und habe noch 1 analog-input übrig, möchte aber die möglichkeit haben, für diesen analog-input zwischen 2 sensoren auszuwählen. dafür würde ich einen schalter benutzen.
die sensoren sind ein piezo und ein fotowiderstand (4k-12k).

hier ein bild, wie ich mir das vorstellen würde mit dem schalter:

eine frage wäre: ist das so richtig mit dem potentiometer rechts, wo ich einfach den 2ten und 3ten pin miteinander verbunden habe? hab ich so im netz gefunden. grund: damit, wenn der schleifer aus mechanischen gründen mal keinen kontakt hat, der widerstand nicht unendlich wird.

die andere, eigentliche frage: kann ich so, wie ichs gezeichnet habe, zwischen 2 sensoren umschalten? leidet der analog-input-pin irgendwie dadurch? und habe ich vielleicht zwischen dem umschalten probleme mit zufälligen werten, die mir dann kurz werte geben, die ich gar nicht haben möchte?

grüße, danke für antwort!
jan

Hallo zehneinsvierzehn

Das Potentiometer so beschalten ist normal.

Das mit dem manuell umschalten gefällt mir nicht.
Mehr aus Prinzip als wegen Probleme.
Wenn Du einen Arduino mit SMD-ATmega nimmst, hat der 8 Analoge Eingänge statt 6, auch wenn die bei den meisten Arduinis/Clone nicht an die Stifleisten herausgeführt sind.
ZB der Seeeduino hier hat A7 und A8 herausgeführt:
http://www.watterott.com/de/Seeeduino-V221-Atmega-328P
Grüße Uwe

hi uwe,
also wenns nur das prinzip ist, dann freut mich das, dann mache ich das nämlich gerne so wie ichs hier auch vorgeschlagen habe

ich habe einen arduino uno hier, warum sollte ich mir jetzt noch einen anderen mikrocontroller kaufen?
hab auch alles schon auf die maße vom arduino uno abgestimmt, ist alles soweit schon fertig eingeplant, und ausserdem ist das auch wirklich ein möglichst-low-cost-ding (der uno wird noch nichtmals fest verbaut), wobei ich für die komponenten schon viel zu viel ausgegeben habe, mein budget eigentlich überschritten habe. will heissen: kein neuer controller mehr, der uno wird benutzt.

aber danke für den vorschlag, prinzipiell hast du natürlich recht.

wie sieht's denn jetzt aus mit den technischen nachteilen, dem jitter/zufall beim umschalten etc.?

Während dem Umschalten mißt Du natürlich Hausnummern.
Wie sagst Du dem Arduino eigentlich, was er gerade mißt? den Piezo oder den LDR?
Grüße Uwe

ich meße hausnummern... was heisst das genau? sorry, aber da kann ich gerad nur raten
also was ich mir vorstellen kann ist, dass ich eben in der kurzen zeit beim umschalten irgendwelche werte zwischen 0 und 1023 reinbekomme

  1. kann man irgendwas dagegen machen? so einen schalter irgendwie debouncen? in dem fall wohl nicht, oder?

also dem arduino sage ich auch überhaupt nicht, was er gerade mißt. aber ich weiß es ja, und kann in der software (max/msp) dann dementsprechend konfigurieren, wie sie die analog-daten auszuwerten hat
2. ich schätze mal, dass es auch da keine möglichkeit gibt, der software das noch irgendwie mitzuteilen, oder? könnte mir höchstens vorstellen, dass die software dann, wenn sie eher konstante spannungen über 0 misst, per algo sagt "fotowiderstand" und bei peaks/transienten eher "piezo" (piezo soll als knock sensor benutzt werden)

  1. hier noch eine dritte frage, die in dem rahmen aufgetaucht ist: beim piezo-testen und analog-in-werte-lesen bekomme ich zwar spitzen, wenn ich dem piezo schläge gebe, aber die spitzen tauchen nicht wie transienten als kurze impulse auf, nicht analog also zu dem tatsächlichen, mechanisch erzeugten signal, sondern ich kriege eine spitzenspannung und die spannung fällt dann nur langsam ab, als wäre noch lange ne spannung im schaltkreis, die erst allmählich nachlässt. dem audiosignal, das so ein piezo liefern sollte, entspricht das doch wohl in keinster weise!? (transienten sind ja eher millisekundenereignisse)

vielen dank für antworten und anregungen :slight_smile:

zehneinsvierzehn:
ich meße hausnummern... was heisst das genau?

Das war ein gängiger Ausdruck in meiner Schule; wußte nicht, daß er nicht allgemein bekannt ist.
Die Redewendung bedeutet, Du bekommst Zahlen bei der Messung, die aber gar nichts mit der Meßgröße zu tun haben, Also Zufallswerte, Hausnummern also, die sagen nichts aus, wo ein Haus steht, in 50m oder nach 200m.

zehneinsvierzehn:

  1. kann man irgendwas dagegen machen? so einen schalter irgendwie debouncen? in dem fall wohl nicht, oder?

Etwas dagegen machen kannst Du indem Du während dem Umschalten nicht mißt. Dazu brauchst Du entwedere die Information wann umgeschaltet wird oder Arduino bedient den Schalter, was aber ein PIN verbraucht. Da ist es einfacher 2 analoge Pins für die Messung der 2 Spannungen zu verwenden.

zehneinsvierzehn:
also dem arduino sage ich auch überhaupt nicht, was er gerade mißt. aber ich weiß es ja, und kann in der software (max/msp) dann dementsprechend konfigurieren, wie sie die analog-daten auszuwerten hat
2. ich schätze mal, dass es auch da keine möglichkeit gibt, der software das noch irgendwie mitzuteilen, oder? könnte mir höchstens vorstellen, dass die software dann, wenn sie eher konstante spannungen über 0 misst, per algo sagt "fotowiderstand" und bei peaks/transienten eher "piezo" (piezo soll als knock sensor benutzt werden)

Wie gesagt viiiiieeel einfacher ist es 2 Eingänge zu haben ohne Umschaltung. Alles andere sind Notbehelfe. Kannst Du nicht beim Rest der Schaltung ein Pin einsparen?

zehneinsvierzehn:
3. hier noch eine dritte frage, die in dem rahmen aufgetaucht ist: beim piezo-testen und analog-in-werte-lesen bekomme ich zwar spitzen, wenn ich dem piezo schläge gebe, aber die spitzen tauchen nicht wie transienten als kurze impulse auf, nicht analog also zu dem tatsächlichen, mechanisch erzeugten signal, sondern ich kriege eine spitzenspannung und die spannung fällt dann nur langsam ab, als wäre noch lange ne spannung im schaltkreis, die erst allmählich nachlässt. dem audiosignal, das so ein piezo liefern sollte, entspricht das doch wohl in keinster weise!? (transienten sind ja eher millisekundenereignisse)

Kannst Du uns das Modell des Piezo sagen (oder die Seite beim Anbieter); ich verstehe mal nicht genau was das ist.
Grüße Uwe

hmmm 1 analog-eingang einzusparen wird schwierig, da ich eben nur 6 zur verfügung habe, und das wichtigste die einfachen drehpotentiometer sind, von denen auch im gehäuse schon 5 stück drin stecken, macht 1 analog-eingang, der übrig bleibt.
ferner habe alle digital-pins schon eingeplant und dementsprechend komponenten im gehäuse stecken (2 schalter, 6 taster, 4 LEDs)
im gehäuse ist aber auch noch ein kippschalter eingebaut, der sonst keine funktion hat. da liegt es doch nahe, den dafür zu verwenden, um zwischen zwei analog-sensoren umzuschalten, anstatt sich jetzt auf einen zu beschränken - eine nette option.
das es nicht das bequemste ist ist mir klar, ich hoffe halt noch auf irgendwelche anregungen, wie man's in dem fall am sinnvollsten hinbiegt :wink:

der piezo ist der "DIGISOUND S-HRH-V" - leider finde ich kein datasheet dazu im netz, aber hier das angebot bei pollin.de:
Piezokeramischer Schallwandler Digisound S-HRH-V online kaufen | Pollin.de

weißt du denn, was ich meine, wenn ich sage: keine transienten, keine kurzen peaks, sondern zwar spannungsspitzen aber eben nur einen langsamen abfall der spannung danach, was eben nicht analog läuft zu meinem piezo-klopfen?

danke -
jan

Da ist Einsparungspotential:
Die 6 Taster könntest Du in eine Matrix 3x2 geben. sparst 1Pin
Die 4 Leds je eines von einem Ausgang auf +5V und das andere auf Masse, Du sparst 2 Pins.
Es erhöht sich die Komplexität der SW.
und Du hast 2 digitale Pins frei ( wahrscheinlich Pin 0 und 1)
Was soll der Arduino machen?
Grüße Uwe

hmmm, pins einzusparen wäre in dem fall zwar eine feine sache, aber ganz versteh ich's noch nicht...

  • wie benutzt man eine solche "3x2 matrix", gibt es sie als baustein oder ist das ein kleiner selbst gebauter schaltkreis?
  • das mit den 4 LEDs ("je eines von einem ausgang auf +5v und das andere auf masse") versteh ich leider gar nicht. ich will
    alle 4 LEDs unabhängig voneinander an-/ausschalten können per software, das ist klar, oder?
  • "es erhöht sich die komplexität der SW" - was ist die SW?

einen analogen pin kriege ich sowieso nicht mehr frei, aber wenn ich noch einen digitalen pin bekomme, würde ich den arduino bzw. die software gerne, wie du schon angedeutet hast, wissen lassen, von welchem analogen input gerade gelesen wird
(dazu bräuchte ich wahrscheinlich einen 2-poligen kippschalter... oder gibt's ne möglichkeit, den 1-poligen schalter noch gleichzeitig als digital high/low zu benutzen, während er auch meine analogen inputs umschaltet?)

zehneinsvierzehn:

  • wie benutzt man eine solche "3x2 matrix", gibt es sie als baustein oder ist das ein kleiner selbst gebauter schaltkreis?

Solch eine Tastermatrix musst du selbst aufbauen. Ist nicht weiter kompliziert, sondern im Endeffekt nur die Beschaltung der Taster untereinander.

  • das mit den 4 LEDs ("je eines von einem ausgang auf +5v und das andere auf masse") versteh ich leider gar nicht. ich will
    alle 4 LEDs unabhängig voneinander an-/ausschalten können per software, das ist klar, oder?

Alles klar! :wink: Die Beschaltung ist recht einfach: zwei Leuchtdioden (jeweils mit Vorwiderstand) in Reihe zwischen 5V und Masse, den "Verbindungspunkt" der beiden auf den Arduino-Ausgang. Wenn dieser nun auf High gesetzt wird, leuchtet die eine LED, setzt man den Ausgang auf Low, leuchtet die andere LED. Will man beide leuchten lassen, toggelt man einfach am Ausgang des Arduino zwischen High und Low hin und her. Wenn man das schnell genug macht (keine Delays verwenden!), nimmt man das als durchgehendes Leuchten wahr.
Eine Alternative zu dieser Beschaltung ist das relativ selten eingesetzte Charlieplexing.

  • "es erhöht sich die komplexität der SW" - was ist die SW?

Entsprechend der Hardware muss natürlich die Programmierung umgesetzt werden. SW = Software. :smiley:

einen analogen pin kriege ich sowieso nicht mehr frei, aber wenn ich noch einen digitalen pin bekomme, würde ich den arduino bzw. die software gerne, wie du schon angedeutet hast, wissen lassen, von welchem analogen input gerade gelesen wird
(dazu bräuchte ich wahrscheinlich einen 2-poligen kippschalter... oder gibt's ne möglichkeit, den 1-poligen schalter noch gleichzeitig als digital high/low zu benutzen, während er auch meine analogen inputs umschaltet?)

Einfacher ist sicher ein zweipoliger Schalter. Mit einem einpoligen könntest du aber ebenso ein zweipoliges Relais oder (noch günstiger) ein Schalter-IC wie das CMOS 4066 ansteuern. Zum Umschalten von analogen Signalen ist das wirklich ausgezeichnet geeignet.

Hallo zehneinsvierzehn
War mir nicht bewußt, daß ich zu kompliziert schreibe. Entschuldige bitte meinen Fehler.
sth77 hat ja schon alles erklärt, nur eines:

sth77:
Alles klar! :wink: Die Beschaltung ist recht einfach: zwei Leuchtdioden (jeweils mit Vorwiderstand) in Reihe zwischen 5V und Masse, den "Verbindungspunkt" der beiden auf den Arduino-Ausgang. Wenn dieser nun auf High gesetzt wird, leuchtet die eine LED, setzt man den Ausgang auf Low, leuchtet die andere LED. Will man beide leuchten lassen, toggelt man einfach am Ausgang des Arduino zwischen High und Low hin und her. Wenn man das schnell genug macht (keine Delays verwenden!), nimmt man das als durchgehendes Leuchten wahr.

Und wenn kein LED leuchten soll, dann das Pin als Eingang definieren
pinMode(pin, INPUT);

Anstatt den Piezo und den LDR zu multiplexen würde ich es mit 2 Drehreglern machen. (mit dem CD4066).

Grüße Uwe

Nach meinem Ermessen ist dieser Zustand aber problematisch, weil hier trotzdem ein geringer Strom über beide Vorwiderstände und beide LEDs fließt. Daher ist es möglich, dass beide LEDs vor sich hinglimmen. Man berichtige mich bitte, falls mir ein Denkfehler unterlaufen ist.

sth77:
Nach meinem Ermessen ist dieser Zustand aber problematisch, weil hier trotzdem ein geringer Strom über beide Vorwiderstände und beide LEDs fließt. Daher ist es möglich, dass beide LEDs vor sich hinglimmen. Man berichtige michbitte , falls mir ein Denkfehler unterlaufen ist.

Du meinst wenn das Pin als Ausgang geschaltet ist fließt ein Strom raus?
Ja aber der ist sehr klein; laut Datenblatt maximal 1µA. davon erleuchtet sich kein LED, auch nicht ein bißchen. (http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf Seite 313)
Grüße Uwe

Nein, anders. Denk dir mal den Arduino komplett weg. Nun hat man einen Stromfluss von der Versorgungsspannung (+5V) über einen Vorwiderstand durch die erste LED über die zweite LED mit ihrem Vorwiderstand zu Masse. Und dieser geringe Stromfluss kann eben zum Leuchten führen.

Hallo sth77

Du meinst den Leckstrom der LED in Sperrichtung?
Hab Datenblätter einiger roten LEDs kontrolliert. Der Leckstrom wird unter 10µA angegeben.

Grüße Uwe

Ich bin von der Beschaltung wie im Anhang dargestellt ausgegangen. Hier bspw. mit D8 als Arduino-Ausgang. Ist dieser High, dann leuchtet LED2. Bei Low leuchtet entsprechend LED1. D8 als (relativ hochohmiger) Eingang führt dazu, dass beide LEDs stromdurchflossen sind, sie also wie eine Serienschaltung verbaut sind. Durch die Vorwiderstände kommt natürlich ein ziemlich geringer Stromfluss zustande, aber dieser könnte für ein leichtes Leuchten ausreichen. Ich hoffe, damit sind unsere Missverständnisse behoben. :wink:

sth77:

Solch eine Tastermatrix musst du selbst aufbauen. Ist nicht weiter kompliziert, sondern im Endeffekt nur die Beschaltung der Taster untereinander.

hast du ein beispiel da?

Aber sicher: Electronic-Projects
Die im Link dargestellte Matrix ist zwar für mehr Tasten, du kannst die Beschaltung aber unkompliziert auf 2x3 verkleinern.