• Herzlich willkommen im "neuen" DSLR-Forum!

    Wir hoffen, dass Euch das neue Design und die neuen Features gefallen und Ihr Euch schnell zurechtfindet.
    Wir werden wohl alle etwas Zeit brauchen, um uns in die neue Umgebung einzuleben. Auch für uns ist das alles neu.

    Euer DSLR-Forum-Team

  • In eigener Sache!

    Liebe Mitglieder, liebe Besucher und Gäste
    ich weiß, es ist ein leidiges Thema, aber ich muss es ansprechen: Werbung, Werbeblocker und Finanzierung des Forums.
    Bitte hier weiterlesen ...

  • DSLR-Forum Fotowettbewerb neu erfunden!
    Nach wochenlanger intensiver Arbeit an der Erneuerung des Formates unseres internen Fotowettbewerbes ist es Frosty als Moderator
    und au lait als Programmierer gelungen, unseren Wettbewerb auf ein völlig neues Level zu heben!
    Lest hier alle Infos zum DSLR-Forum Fotowettbewerb 2.0
    Einen voll funktionsfähigen Demowettbewerb kannst du dir hier ansehen.
  • Neuer Partner: AkkuShop.de
    Akkus, Ladegeräte und mehr (nicht nur) für Digitalkameras und Drohnen
  • Neuer Gutscheincode unseres Partners Schutzfolien24:
    DSLR-Forum2024
    Dauerhaft 10% Rabatt auf alle Displayschutzfolien der Eigenmarken "Upscreen", "Brotec", "Savvies".
    Der Code ist für alle Geräteklassen gültig.
  • Stimmt ab über die Sieger des DSLR-Forum Fotowettbewerbs April 2024.
    Thema: "Sprichwörtlich"

    Nur noch bis zum 30.04.2024 23:59!
    Jeder darf abstimmen!
    Zur Abstimmung und Bewertung hier lang
WERBUNG

Bastelanleitung: Arduino-basierter Lichtschranken-Trigger

Könnte mal jemand den Timelaps-Modus mit IR-Auslöser testen? Würde mich sehr interessieren. Könnte man evtl. noch ein Menüpunkt einpflegen LCD Backlight ON/OFF? Müsste doch eigentlich nur PIN 10 auf low/high geschalten werden. (beim LCD-Keypad-Shield)
Ich würde es ja selber machen und habs auch schon probiert, hab aber keinen Ansatz gefunden wo man es überall hinzufügen muß.
 
Die LCD-Bibliothek ist doch die Liquid Crystal, oder?
Die hatte ich natürlich schon eingebunden.

Wie hast Du sie eingebunden? Die entsprechende Zeile sollte so aussehen: #include <LiquidCrystal.h>

Manchmal hilft es auch, am Kontrastregler zu drehen, freilich nur, wenn das Programm richtig funktioniert;)

fG Ralf
 
Ich habe folgendes mal im Mainprogramm eingefügt:
Code:
// LCD-Backlight
#define LCD_BACKLIGHT_PIN       10  
#define LCD_BACKLIGHT_OFF()     digitalWrite( LCD_BACKLIGHT_PIN, LOW )
#define LCD_BACKLIGHT_ON()      digitalWrite( LCD_BACKLIGHT_PIN, HIGH )
#define LCD_BACKLIGHT(state)    { if( state ){digitalWrite( LCD_BACKLIGHT_PIN, HIGH );}else{digitalWrite( LCD_BACKLIGHT_PIN, LOW );} }
Und das hier im lcd_funktions:
Code:
// Startet das LCD und zeigt das Bootlogo
void lcdInit() {
  digitalWrite( LCD_BACKLIGHT_PIN, LOW ); 
  pinMode( LCD_BACKLIGHT_PIN, OUTPUT );  
  lcd.begin(16,2);                        // LCD initialisieren
  lcd.setCursor(0,0);  
  lcd_print_P(PSTR("crazyMachine"));      // Programmnamen ausgeben
  lcd_print_string(PSTR("Version 0.4 beta")); // Programmversion ausgeben
  delay(1000);                            // 1 Sekunde verzögern
  lcd.clear();                            // Display löschen
}
So bleibt das Backlight aus. Jetzt hätte ich gern noch ein Menü-Eintrag zum aus und einschalten.

Hier mal ein Testsketch um das Display an-und auszuschalten

Code:
#include <LiquidCrystal.h> 

#define LCD_BACKLIGHT_PIN       10  
#define LCD_BACKLIGHT_OFF()     digitalWrite( LCD_BACKLIGHT_PIN, LOW )
#define LCD_BACKLIGHT_ON()      digitalWrite( LCD_BACKLIGHT_PIN, HIGH )
#define LCD_BACKLIGHT(state)    { if( state ){digitalWrite( LCD_BACKLIGHT_PIN, HIGH );}else{digitalWrite( LCD_BACKLIGHT_PIN, LOW );} }

LiquidCrystal lcd( 8, 9, 4, 5, 6, 7 );   

void setup()
{
   digitalWrite( LCD_BACKLIGHT_PIN, LOW ); 
   pinMode( LCD_BACKLIGHT_PIN, OUTPUT );    
   lcd.begin( 16, 2 );
   lcd.setCursor( 0, 0 ); 
   lcd.print( "CRAZY-TEST" );

}

void loop()
{
   byte button;
   byte timestamp;
  
        digitalWrite( LCD_BACKLIGHT_PIN, LOW );
        delay( 5000 );
        digitalWrite( LCD_BACKLIGHT_PIN, HIGH );
        delay( 5000 );
        
     
}
 
Zuletzt bearbeitet:
Wie hast Du sie eingebunden? Die entsprechende Zeile sollte so aussehen: #include <LiquidCrystal.h>

Manchmal hilft es auch, am Kontrastregler zu drehen, freilich nur, wenn das Programm richtig funktioniert;)

fG Ralf

eigentlich genau so. :confused:
Habs auch schon versucht in dem ich die anderen Bibliotheken hinzufüge.

#include <LiquidCrystal.h>

void loop() {
lcd.print("test");
navigate_menus();
}


-->

sketch_jul08a.cpp: In function 'void loop()':
sketch_jul08a:3: error: 'lcd' was not declared in this scope
sketch_jul08a:4: error: 'navigate_menus' was not declared in this scope
 
@omek77:
Ich finde die Lösung über #define nicht sonderlich gut, dafür würde ich lieber eine neue Funktion einführen.

Einen neuen Menüpunkt einzupflegen ist nicht sonderlich kompliziert.

Ich hab die nötigen Änderungen mal kurz zusammengefasst. Da Du Dich ja scheinbar schon ganz gut im Quellcode zurechtfindest, sollte es für Dich kein Problem sein, diese einzupflegen. Habs jetzt nicht getestet, aber eigentlich sollte es funktionieren.

EDIT: Hatte noch was vergessen, steht jetzt ganz unten
EDIT2: Hab die beiden Zeilen von omek von ein paar Posts weiter unten noch eingebaut

Code:
// LCD Backlight PIN festlegen
// am Anfang des Programms bei den diversen defines einfügen
#define LCD_BACKLIGHT_PIN 10

// Boolesche Variable, die den aktuellen Status des LCD-Backlights speichert
// am Anfang des Programms einfügen (bei den Variablendeklaration bietet es sich an)
boolean lcd_backlight_state_on = true;

// Zwei Zeilen um den Pin fürs LCD-Backlight zu initialisieren
// Gehört am ehesten in die void setup() Funktion
pinMode(LCD_BACKLIGHT_PIN, OUTPUT); 
digitalWrite(LCD_BACKLIGHT_PIN, HIGH);

// Funktion um das LCD-Backlight an- und auszuschalten
// an beliebiger Stelle im Quellcode platzieren (z.B. unter lcd_functions)
void lcd_backlight_toggle() {
  if (lcd_backlight_state_on) {
    digitalWrite(LCD_BACKLIGHT_PIN, LOW);    
  }
  else {
    digitalWrite(LCD_BACKLIGHT_PIN, HIGH);
  }
  lcd_backlight_state_on = !lcd_backlight_state_on;
}

// Text für den Menüpunkt fürs LCD Backlight
// im #ifdef für die jeweilige Sprache einfügen (#ifdef LANGUAGE_DE)
// passend wäre z.B. nach dem MIRRORLOCKUP
  PROGMEM const char MENUTEXT_SETTINGS_LCDBACKLIGHTTOGGLE[] =     "LCD Beleuchtung";
  
// der muss dann auch ins Menü, das kommt kurz danach im Quelltext
// (unter "MENÜSTRUKTUR ERSTELLEN")
/*     LCD Beleuchtung an/aus      BOOLEAN      */ MenuItem mi_lcdbacklighttoggle = MenuItem(MENUTEXT_SETTINGS_LCDBACKLIGHTTOGGLE);

// und zuletzt muss das dann ins tatsächliche Menü übernommen werden
// unter menu_functions die vorhandene Zeile um ein ".add(mi_lcdbacklighttoggle)" vor dem ; ergänzen:
  /* Menü 6) EINSTELLUNGEN samt Submenüs einfügen */ mi_preset.addRight(mi_settings).add(mi_load_defaults).add(mi_single_picture_timeout).add(mi_pictures_in_series).add(mi_picture_delay_in_series).add(mi_use_ir_trigger).add(mi_use_mirror_lockup).add(mi_mirror_lockup_time).add(mi_lcdbacklighttoggle);

// und unter menu_functions muss in der riesenlangen if-schleife noch ein else eingefügt werden (fast ganz unten würde es der Ordnung halber hingehören)
  else if (used.item.getName() == mi_lcdbacklighttoggle.getName()) {
    lcd_backlight_toggle();
  }
 
Zuletzt bearbeitet:
@Patele:
Du musst erst das LCD erst deklarieren, bevor Du es so benutzen kannst.

Füge mal die folgende Zeile ein:
Code:
  LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

Und dann musst Du die aufgerufene Funktion navigate_menus() auch noch deklarieren (oder die entsprechende Zeile rauslöschen). Probier testhalber mal folgende Zeilen:

Code:
void navigate_menus() {
  lcd.clear();
  delay(1000);
  lcd.write("Hallo Welt!");
  delay(1000);
}

Oder als ganzes Programm:
Code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// Eine Funktion, die in Abständen von 1 Sekunde jeweils das LCD löscht und dann "Hallo Welt!" aufs LCD schreibt
// Der Name der Funktion ist so natürlich etwas bescheuert ;)
void navigate_menus() {
  lcd.clear();
  delay(1000);
  lcd.write("Hallo Welt!");
  delay(1000);
}


// Die setup-Funktion muss existieren, sonst lässt sich das Programm nicht kompilieren
void setup() {
  lcd.begin(16,2);
}

// Das ist die Hauptschleife, die das Arduino so lange durchläuft, wie es mit Strom versorgt wird
void loop() {
  navigate_menus();
}
 
Zuletzt bearbeitet:
@Patele:
Du musst erst das LCD erst deklarieren, bevor Du es so benutzen kannst.

Füge mal die folgende Zeile ein:
Code:
  LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

Und dann musst Du die aufgerufene Funktion navigate_menus() auch noch deklarieren (oder die entsprechende Zeile rauslöschen). Probier testhalber mal folgende Zeilen:

:grumble:
Der Motzt immernoch:
core.a(main.cpp.o): In function `main':
/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/main.cpp:11: undefined reference to `setup'
 
Danke. Jetzt gehts Fehler gefunden.

:grumble: Der Poti ist defekt, der funktioniert nur ab und zu.
Fehler lag wo ganz anders.
Thx



Edit:
Mein Arduino hat die untere Pin Reihe anders herum Belegt (nicht AD7-AD1 sondern AD1-AD7)
Ich hab jetzt versucht die Pinbelegung zu ändern, jedoch funktioniert jetzt nur der nach rechts Knopf.
 
Zuletzt bearbeitet:
@Niggoh

klappt noch nicht, kompiliert aber sauber durch und der Menüpunkt erscheit auch an richtiger Stelle. Aber das LCD geht nicht aus. Vielleicht hast du noch ein Tip?
Dank dir aber erstmal für die Zeit die du opferst ;)(y)
EDIT, ES GEHT DOCH
hatte Zeilen aus der die lcd_funktion Datei unter "void lcdInit() { "voher entfernt, die werden aber benötigt!

digitalWrite( LCD_BACKLIGHT_PIN, HIGH );
pinMode( LCD_BACKLIGHT_PIN, OUTPUT );
Jetzt kann man sogar auswählen ob man mit dunklem oder hellen Display starten möchte(y)
 
Zuletzt bearbeitet:
Gratuliere, das hat ja schonmal gut funktioniert.

Hab leider seit Monaten praktisch keine Zeit, um mich der Weiterentwicklung des Programms zu widmen. Schön wenn da von anderen entsprechende Initiativen kommen.
 
Hallo
Komme morgen wieder in einen großen Elektrofachmarkt und wollte mal alles für eine Lichtschranke zusammenstellen..

Habe unten mal eine Zeichnung angehangen.
Die Wiederstände (kästchen) muss ich noch herausfinden...

Funktioniert der Aufbau so? Habe ich das richtig verstanden, dass wenn die Schranke durchbrochen wird ich eine Andere Spannung am Analogen Eingang messe als wenn sie nicht unterbrochen ist?

Könnte man die LED und den Phototransistor auch in 2 verschiedene Gehäuse einbauen und über ein längeres Kabel (1-2m) noch an den Arduino anschließen oder würde das nicht mehr funktionieren? Welchen Querschnitt sollte das Kabel haben?

Welchen Draht würdet ihr mir generell für solche Basteleien empfehlen (Querschnitt etc.)

Mal wieder ne menge Fragen...

Danke für jede Antwort ;)
 
@Paddy94
Ohne die Polung der Diode und des Fototransistors geprüft zu haben, funktioniert die Schaltung so, auch wenn man Widerstand mit ie schreibt.
Am Besten schaust Du Dir den Startbeitrag von Niggoh in diesem Thread an,
da sind auch möglicher Aufbau, Widerstandswerte und das Arduino-Programm zu erfahren. Sonderpreis für den informativsten Beitrag erhält heute "wider" mal jar;)

freundliche Grüße
Ralf
 
danke

Die Lichtschranke funktioniert soweit...
Habe Probleme mit dem Sound Trigger.

Art NR. des Summers : 715020 bei Con..

Wie muss ich den an den Arduino anschließen damit ich spannungsänderungen messen kann?(oder wie funktioniert das damit)

Ich bekomme immer nur 0 als Spanungswert aber keine Veränderung bei Klatschen, Ballon Platzen lassen etc
 
Art NR. des Summers : 715020 bei Con..

Wie muss ich den an den Arduino anschließen damit ich spannungsänderungen messen kann?(oder wie funktioniert das damit)

Das wird nicht funktionieren, weil ein Summer ein Tonsignal abgibt. Was Du brauchst, ist ein Mikrofon, gegebenfalls mit Verstärker.

fG Ralf
 
Ich hab den Summer jetzt mal wie unten abgebildet angeschlossen
Der Arduinio gibt als Spannungswert immer 0 aus egal was ich mache(klopfen etc)...:(
 
Ich hab den Summer jetzt mal wie unten abgebildet angeschlossen
Der Arduinio gibt als Spannungswert immer 0 aus egal was ich mache(klopfen etc)...:(

? wurde doch schon beantwortet

Summer != || <> Mikrofon

du sprichst ja auch nicht in den Lautsprecher und hörst über ein Mikrofon

mit dem Fernseher machst du auch keine Filme und mit einer Cam schaust du auch nicht DVD

in der Microwelle kühlst du nicht dein Gefriergut und an einer Holzkiste ist schlecht zu löten :lol:

was erwartest du nun ?

(klar ist mir bekannt das bei elektromagnetischen Systemen der Vorgang umkehrbar ist Lautsprecher - Mikrofon, aber der Wirkungsgrad ist zu mies um Erfolg zu bringen)

OK im vorigen Post sieht man das der Umkehreffekt benutzt werden kann, mit zusätzlichen Verstärkern
 
Zuletzt bearbeitet:
WERBUNG
Zurück
Oben Unten