HILFE! arduino schulprojekt

Liebe Leute , Bitte helft uns!!
Wir müssen in der Schule ein Projekt mit dem Arduino uno machen. Und zwar wollen wir, dass tagsüber eine Markise herausfährt. Diese wird mit einem Gleichstrommotor angetrieben. Ein LDR soll dem Motor sagen, ob die Markise herausfahren soll. Bei Dunkelheit soll die Markise wieder hineinfahren. Zum anderen haben wir LEDs die bei der Dunkelheit angehen und bei Tag ausgehen. Sie sind ebenfalls über den LDR gesteuert. Wir haben bereits herausgefunden, wie die LEDs über den LDR gesteuert werden und haben das auch verstanden, allerdings wissen wir nicht, wie das mit dem Motor ist. Wir wissen nicht wie man einen Sketch schreibt, da wir das nie im Unterricht gelernt haben... Bei dem Sketch sollte es möglich sein, dass sich der Motor nach links und rechts dreht und dass man die Drehgeschwindigkeit und die Drehzeit verändern kann.
Außerdem soll sowohl der Motor als auch die LEDs über den gleichen LDR gesteuert werden.
Wäre echt nett, wenn uns jemand helfen könnte, weil wir haben wirklich keine Ahnung von dem Ganzen, würden es aber gerne verstehen. Vielen Dank schon mal für die Hilfe.
Liebe Grüße mosaan :slight_smile:

Ein erster Tipp für die Suche: H-Bridge.

Welchen Gleichstrom-Motor setzt Ihr ein (Link zum Datenblatt)?

Wenn Ihr auch Hilfe beim Sketch braucht, postet mal, was Ihr schon habt.

Hallo auch...
Guckt euch mal das Tutorial in meiner Signatur an...

also das Video haben wir angeschaut (jetzt wissen wir wenigstens mal ein paar Grundlagen) vielen Dank! :slight_smile:
Und H-Bridge? Ist das sowas wie ein IC? Weil unser Lehrer hat gesagt wir sollen es mal damit probieren...
Welchen Gleichstrommotor wir benützen können wir erst sagen, wenn wir wieder Schule haben. Auswendig wissen wir das nicht.
Und der Sketch für die LEDs zusammen mit dem LDR:

/*
** Nightlight LDR test program
** Created 06 Feb 2010
**
** This example code is in the public domain.
** www.hobbytronics.co.uk
*/

int sensorPin = A0; // select the input pin for the ldr
unsigned int sensorValue = 0; // variable to store the value coming from the ldr

void setup()
{
 pinMode(13, OUTPUT);
 //Start Serial port
 Serial.begin(9600); // start serial for output - for testing
}

void loop()
{
 // read the value from the ldr:
 sensorValue = analogRead(sensorPin); 
 if(sensorValue<400) digitalWrite(13, HIGH); // set the LED on
 else digitalWrite(13, LOW); // set the LED on

 // For DEBUGGING - Print out our data, uncomment the lines below
 //Serial.print(sensorValue, DEC); // print the value (0 to 1024)
 //Serial.println(""); // print carriage return 
 //delay(500); 
}

Ist halt nicht selbst geschrieben sondern vom Internet, weil wir ja nicht gelernt haben wie man einen Sketch selbst schreibt. Wir haben aber schon herausgefunden, dass wenn wir bei voidloop den if Wert ändern, also ihn zum Beispiel größer machen, wir nicht mehr so viel Dunkelheit brauchen bis die LEDs leuchten, bzw. kleiner machen und dann mehr Dunkelheit brauchen bis die LEDs leuchten.

[EDIT] Code Tags eingeführt; Grüße Uwe[/EDIT]

Richtig, H-Bridge ist ein IC speziell um Gleichstrom-Motoren in 2 Richtungen steuern zu können.
( könnte man auch aus einzelnen Transistoren selber bauen, aber ihr habt mit dem Arduino schon genug zu tun.)

uncomment the lines below

Wenn ihr noch rauskriegt, was "uncomment" bedeutet, wie man es macht, was dann zu erwarten ist, und wofür man das sonst noch verwenden könnte,
seid ihr schon einen großen Schritt weiter beim Selber Programmieren.

Schaut euch auch die diversen Beispiele an aus der Arduino IDE dann werdet ihr auch schlauer.

Der Tip mit uncomment aus dem vorherigen Post ist schon gut :smiley:

Die Programmstruktur ist recht einfach

1=>Wenn LDR Wert größer als xxx // dann scheint die Sonne
2=>Motor z.B. Links drehen bis zum Erreichen der gewünschten Position // Markies rausfahren
3=>Wenn LDR Wert kleiner als xxx // Dann scheint die Sonne nicht und es ist fast dunkel
4=>Motor z.B. Rechts derehen bis zum Erreichen der gewünschten Position // Markiese reinfahren
5=>Wenn LDR Wert kleiner als xxx // es wird dunkel
6=>LED einschalten // LEDS anmachen
7=>Wenn LDR Wert größer als xxx // es wird wieder hell
8=>Motor z.B. Rechts derehen bis zum Erreichen der gewünschten Position //LEDs ausmachen

die Werte in Punkt 1und 3 müssen unterschiedlich sein damit sich eine Hysterese bildet damit die makiese nicht ständig raus und reinfährt wenn mal ne Wolke kommt.
Ebenso die Werte in 5 und 7 damit die LEDs nicht flacken.
Wenn dann da Grundprogramm steht könnt ihr es feintunen (Zeitverzögerungen beim Dunkelwerden) evtl dann mal einen Wind oder Regensensor.
Es ist ein schönes Einstiegsprogramm.
Ihr könnt nicht erwarten das euch hier das Progamm geschrieben wird. Euch wird aber mit garantie geholfen euer Progamm zu verbessern oder korrket umzusetzten.
Am besten Try and error. Alles auf dem Tisch mit nem kleinen Motor (modellbau) einem LDR und LED ausprobieren, wenn läuft ab an die "große" hardware.
Noch ein Tip zur Hardware:
Motortreiber L298D damit kann man einen Motor Ansteuern

Gruß
Der Dani

Noch ein Tip zur Hardware:
Motortreiber L298D damit kann man einen Motor Ansteuern

Oder ihr fragt, ob ihr gleich ein fertiges Shield für den Arduino mit L298 drauf kriegt:
Hier Watterott/Sparkfun fehlen wohl noch die Pins, damit es ein aufsteckbares Shield wird ( sowie Schraubklemmen )
Das hier z.B. bei Reichelt sollte komplett sein und ein Original wie aus dem Arduino Store .

"max. 2A" passt allerdings nur für einen kleineren DC Modellbau Motor und keine echte Markise von 5x2 m² oder so :wink: ...

Also auf unserem Gleichstrommotor steht nicht drauf wie der heißt...

7=>Wenn LDR Wert größer als xxx // es wird wieder hell
8=>Motor z.B. Rechts derehen bis zum Erreichen der gewünschten Position //LEDs ausmachen

und hier müsste doch eigentlich stehen: 8=>LED ausschalten //LEDs ausmachen
oder?
und das mit dem ,,uncomment the lines below'' verstehen wir nicht so ganz. Man soll für eine Fehlersuche die folgenden Zeilen kommentieren, oder wie ist das gemeint?

mosaan:
und das mit dem ,,uncomment the lines below'' verstehen wir nicht so ganz. Man soll für eine Fehlersuche die folgenden Zeilen kommentieren, oder wie ist das gemeint?

"uncomment" bedeutet nicht kommentieren, sondern die Kommentarzeichen // entfernen. Also auch nicht die gesamten Kommentarzeilen, sondern diese Zeilen so zum Debuggen nutzen:

Serial.print(sensorValue, DEC); // print the value (0 to 1024)
Serial.println(""); // print carriage return 
delay(500);

Dacht ichs mir doch, dass vieles was irgendwann selbstverständlich ist, am Anfang so nebulös ist, dass es gar nicht auffällt.

Die Suche nach "uncomment" in Wörterbüchern ist unbefriedigend, selbst mein geschätzter Leo gibt nur im Diskussionsforum sinnvolle Hilfe.

to comment ( "auskommentieren" ) aus einer Befehlszeile einen Kommentar machen
to uncomment ist dann das Gegenteil: die Kommentarzeichen wieder entfernen, damit der Programmteil aktiv wird.

Richtig :
// ist eine der zwei Kommentarmöglichkeiten ( bis zum Zeilenende )

/* Dies ist die andere Möglichkeit, um Teile einer Zeile oder mehrere Zeilen auszukommentieren */

Und Serial.println(variable); hilft sehr, zu verstehen was überhaupt abgeht, wenn man den Arduino SerialMonitor gestartet hat.

Also auf unserem Gleichstrommotor steht nicht drauf wie der heißt...

Ein nackter Motor ? ( zwei Drähte auf der einen Seite, eine Stummel-Achse auf der anderen ? )
Und das Getriebe ?

Die mechanisch-elektrische Aufgabe ist dann wohl der schwierigere Teil. :wink: