[Casecon] Light Glass [Worklog]

Hallo noname!
Das ist doch mal ein Wort! xd
Erstmal willkommen im Pcgh Forum.

Ich denke es interessiert auch andere Mitleser wie sich mein ganzes Projekt so aufbaut, wenn es dir aber lieber ist kann ich mich auch per PN melden.

Gestern habe ich mich wie erwähnt mit der IR FB auseinander gesetzt, sah soweit alles ganz plausibel aus, hatte mir nur die Liberary und den Schaltplan im Arduino Forum durchgelesen.
Ich werde es erstmal selbst testen bevor ich anfange dumme Fragen zu stellen.

Was ich halt gestern leider feststellen musste ist das die ersten 2 Nanos sich nicht mehr programieren lassen. Er versucht die verbindung von baud 1-10 aufzubauen aber kein erfolg. zu dem fehlercode finde ich auch keine weiteren infos im netz. Die Tx led die sonst beim hochladen kräftig leuchtet, blitzt nun nur einmal schwach auf und mehr nicht.
Mein dritter Nano lässt sich unter gleichen Bedingungen problemlos beschreiben. Hab mir zwar schon nachschub bestellt, würde aber vor weiteren versuchen doch gerne wissen was ich falsch gemacht habe oder woran es liegt.

Der Motor lief ja vorgestern anstandslos. Habe ihn da mit 12v von einem alten pc Netzteil betrieben und den Nano(ohne Usb) auch über den Vin pin.
was ich bis dato nicht wusste ist das die treiber nicht für so einen Dauerbetrieb geeignet sind(die werden mächtig heiß), weil ich kurz 1h weg musste und vergaß das Nt auszuschalten.
Soll ich damit nun die Nanos geschrottet haben oder sind die Nanos so empfindlich das ich unbedingt mit einer Antistatikmatte und diesen Armband arbeiten muss?
Als nachschub habe ich mir einen Uno geordert weil ich irgendwo las das die einen Überlastungsschutz haben welcher der nano nicht besitzt.
Oder liegt mein Problem an dem Netzteil, zwecks zuviel Ampere.
 
sehr gerne natülich hier schreiben.

Zu deinen kaputten Nanos kann ich leider nicht viel sagen, dafür ist es bei mir nur zu sehr Hobby. Ich hab mal einen zerschossen, indem ich zu viele Leds drangehängt habe. An ging er dann noch, hat aber ein ähnliches Verhalten gezeigt wie bei dir. Irgendwas wird da überlastet worden sein.
Das die Nanos (oder der Uno) empfindlich sind und eine Antistatikmatte bräuchten kann ich nicht bestätigen.
Bezüglich Netzteil müsste man mal schauen, was der Motor so braucht, aber so klein wie der ist, kann ich mir nicht vorstellen, dass das NT das Problem ist.

Wie kommst du denn mit dem ULN2003 zurecht? Mein erstes googeln hat behauptet, das dieser nicht so problemlos mit Libraries läuft. Ich habe bei meinem Projekt den Pololu A4988 Treiber (Pololu A4988 Schrittmotortreiber - Watterott electronic) verwendet und bin eigentlich sehr begeistert davon. Das einstellen der Strombegrenzung ist da etwas frickelig, aber wenn das mal passt, dann macht das Teil echt Spaß. Mit der entsprechenden Library kann man den sehr komfortabel ansteuern. Einzelschritte vorgeben, bestimmte Geschwindigkeiten fahren, sogar Beschleunigungsprofile lassen sich einfach programmieren. Ich glaub ich hab hier sogar noch einen (mit kleinem Motor) rumliegen den ich nicht mehr brauche, falls Interesse besteht.

Was hast du denn an weiteren Komponenten geplant? Welches Keypad? Wie den Rechner an und ausschalten? Dann müsste der Arduino ja dauerhaft laufen. Das mit dem Zahlencode stell ich mir grad noch etwas kompliziert aber mit entsprechendem Konzept machbar vor. Sollen die Codes auch über das Keypad änderbar sein?

Zur Komplexität der Programmierung. Ich würde auch erst mal alle Einzellfunktionen zum laufen bringen, und dann anfangen alles Schritt für Schritt zu kombinieren. Hier würde ich dir das Thema Funktionen ans Herz legen. https://www.arduino.cc/en/Reference/FunctionDeclaration
Jedes Einzelelement wird in eine Funktion gepackt, und im main loop wird dann nur noch zu den entsprechenden Funktionen gesprungen wenn es etwas zu tun gibt.

Was mir noch am Anfang in meiner Arduino Zeit über den weg gelaufen ist, ist, dass sehr häufig mit der Delay Funktion gearbeitet wird. Dies ist eine sehr einfache aber auch problematische Lösung. Denn während der Arduino wartet bis das Delay durch ist, kann man nichts andere mehr machen. Etwas komplizierter ist es Zeitabhängige Dinge über die millis Funktion zu lösen. Das Thema kam mir nur grad, weil ich in einigen Beispielen zu deinem Treiber das Delay gesehn habe.... Versuch das wo es geht zu vermeiden.

Ansonsten wars das erstmal.... Moment, weiß grad nicht mehr in welchem Tagebuch ich das gelesen hatte, hattest du über die Anschaffung von Beleuchtung für die Fotos nachgedacht? Eventl. kann ich hier auch Tipps geben.

Jetzt aber... Lieben Gruß
 
Also, Phir0n Danke.

Ok das mit dem defekten Arduino reicht mir schon. Da sie ja nur max 100mA aushalten und das NT mehr hat wird das der Grund sein.
Der Motor wird zwar auch nur mit 5V angegeben aber mit dem USB lässt er sich nicht betreiben.Später sollte auch alles über pc NT versorgt werden außer der Arduino evtl über eine kleine Batterie, falls sich das mit dem Starten übers Tasten feld realisieren lässt.

Nächste Frage: so fortgeschrittenen bin ich noch gar nicht;-) . Ich hab ein paar Liberarys durchprobiert und der Stepper samt treiber lief, wie ich die Steps und geschwindigkeit ändern konnte fand ich auch raus.

Das Bedienfeld wäre dieses:

image.jpeg

damit habe ich mich aber noch nicht befasst.
Fürs erste sollte alles so unkompliziert wie möglich sein, also der Code muss gar nicht änderbar sein.
Wichtig ist die Tür zum laufen zu kriegen und digitales LED lauflicht. Wie ich das dann alles noch erweitere werde ich sehen.
Das Case sebst bekommt für die Slights Rgb led die aber unabhänging vom Arduino laufen.
Die digitalen Leds sollen eher als Unterboden Beleuchtung wie eine Alarmanlage laufen.( Ich hab da auch einen Distanzsensor xd) aber wie gesagt,erstmal nicht so kompliziert, bevor ich das so halbwegs verstehen.

Gut danke für die anderen Tips, die verknüpfung der Loops lag mir auch schon am herzen, dann weiß ich gleich wo ich infos dazu finde.

Stimmt den delay hatte ich auch in einer der getesteten Liberarys, hab ich aber gleich rausgelöscht, da nicht benötigt.

Zum thema Fotolicht kann sein das das einer meiner Logs war, habe mir im November ein Studioset gekauft.( 2 fotoleuchten, hintergrund mit stativen)
 
Ok das mit dem defekten Arduino reicht mir schon. Da sie ja nur max 100mA aushalten und das NT mehr hat wird das der Grund sein.
Kann ich mir eigentlich nicht vorstellen, außer du hattest was am Arduino hängen, das zu viel Strom zieht. Die I/O Pins schaffen so 40mA. Strom liefert das Netzteil ja nur so viel wie gebraucht wird, ob ich jetzt z.B. an meinem Netzteil mit 30A einen LED Streifen betreibe, der max. 3,6A zieht oder 2 Streifen mit max. 7,2A ist ja egal solange der Strom den das Netzteil bereitstellen kann ausreicht. Wenn theoretisch auch mehr, sprich die 30A, bereitgestellt werden könnten, dann macht das den Geräten die weniger verbrauchen nichts aus.
Ich hoffe ich hab hier jetzt kein Müll verzapft oder dich falsch verstanden :ugly:
Später sollte auch alles über pc NT versorgt werden außer der Arduino evtl über eine kleine Batterie, falls sich das mit dem Starten übers Tasten feld realisieren lässt.
Ich weiß nicht, ob das jedes Mainboard hat, aber mit meinem Asus M8 Ranger kann ich USB (abgesehen von der Datenübertragung:P) auch nutzen wenn der Rechner aus ist. Vielleicht kannst du den Arduino ja dann so laufen lassen.
Fürs erste sollte alles so unkompliziert wie möglich sein, also der Code muss gar nicht änderbar sein.
Digital code lock using arduino. Circuit diagram, program and theory.
Vielleicht kannst du hier mal reinschauen.
Stimmt den delay hatte ich auch in einer der getesteten Liberarys, hab ich aber gleich rausgelöscht, da nicht benötigt.
Delay ist deshalb nicht optimal, weil es eine blockende Funktion ist. Alles während dieser Zeit wird geblockt. Hier ist mal ein Beispiel, wie man ne LED ohne Delay blinken lässt: https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
 
Danke Madpolygon!
Iwie hab ich das glaub schon falsch geschaltet. Ist doch ganz schön schwer das Thema, momentan brummt mir der Kopf. Mensch ich bin Maler.:ugly:
Verbring schon jede freie Minute mit dem einlesen in die Materie aber mit meinem Job hat das nicht viel zu tun:D, ist für mich alles nur Fachchinesisch.
Und beim Englisch hörts bei mir erst recht auf. Bin froh wenn ich es halbwegs verstehe ohne einen Translater zu benutzen aber bei diesem Thema kostet mich das nur noch mehr unnütze Zeit wenn ich noch zusätzlich übersetzen muss was ich nicht mal auf deutsch verstehe.

Irgendwann ist das Fass auch voll aber egal ich bleib am Ball.
Abgesehen von einem 4h Fachgespräch zu dem Thema sitz ich heute seit 15.00Uhr dran. Wieder ordentlich was gelernt.:D

Also die Fernbedienung läuft auch, die Codes habe ich mir alle notiert und eine LED bekomme ich per FB nun auch ein und ausgeschaltet. Uhhhhhhhhh :ugly:

Da Benny ,und ich übrigens auch, unbedingt den Motor laufen sehen will, habe ich die meiste Zeit versucht rauszukriegen wie ich den Motor Sketch mit dem IR Sketch verbinden kann.
Aber ohne Erfolg, die ganze Reihenfolge des Sketchaufbaus ist mir in diesem Fall noch etwas unklar. Manche Sketche sind auch enorm unterschiedlich obwohl sie die selbe Funktion erfüllen, das bring nur noch mehr Fragezeichen.

@Noname Den Link zur Komplexität der Programmierung habe ich auch auf deutsch gefunden, ich denke darum geht es in deinem Link oder?
Ich hab es mir auf jeden fall ausgedruckt und werde es mir ein paar mal durchlesen und schauen was so alles hängen bleibt. ;)
 
stimmt schon, möglichst einfach ist für den Anfang am besten. Erweitern kann man es immer noch wenn es dann mal läuft.

Cool, dass die Fernbedienung funktioniert!

Magst du mir mal die Sketche zum Motor via Nachricht schicken? Dann kuck ich mal drüber und versehe es etwas mit Kommentaren?
Ich hab mir am Anfang auch sehr schwer getan mit der Programmier Logik, das kommt aber mit der Zeit. Und fremde Skripte zu verstehen ist besonders schwer wenn nichts kommentiert ist.
Das würde ich dir auch empfehlen! Gewöhne dir an in deinen Skripten alles(!) zu kommentieren. Manchmal weiß man einen Tag später nicht mehr was man sich dabei gedacht hat.

Zu meinem Link, was du gefunden hast ist nicht das was ich meine. Auf die schnelle hab ich leider nichts vernünftiges dazu auf deutsch gefunden..
Funktionen deklarieren, oder Methoden sind die Stichwörter dazu.
Es geht darum, dass du deine Einzelteile in eigenen Funktionen außerhalb des Loops "kapselst". So könntest du die Funktionen "Keypad einlesen" haben, oder "Led leuchten lassen", "Tür bewegen" usw. Im Loop steht dann nur noch, wenn die Tür aufgehen soll "Tür-öffnen();" und das Programm verlässt dann an dieser Stelle den Loop, springt in die Funktion und führt diese aus. Wenn fertig gehts zurück in den Loop und die nächste Zeile Code wird ausgeführt. Mann kann auch Informationen an die Funktion übergeben, zum Beispiel könntest du schreiben "Tür-öffnen(Richtung);". In der Variable Richtung steh dann ob geöffnet oder geschlossen werden soll und die Funktion reagiert entsprechend.
Der Vorteil des ganzen, auch wenn es am Anfang viel komplizierter aussieht, ist, dass der Loop und somit der Gesamtablauf deutlich übersichtlicher wird.

Für den Anfang halte ich es schon für sinnvoll sich durch Pdfs wie das was du gefunden hast zu arbeiten. Das ist vor allem hilfreich den Arduino an sich aber vor allem die Programmiersprache C kennenzulernen. Ab einem gewissen Punkt hat es mir aber vor allem geholfen nur noch nach den Dingen zu suchen die aktuell das Problem waren.

Lass dich von der kleinen Platine nicht unterkriegen, ich kenn das nur zu gut, das man das Ding des öfteren aus dem Fenster werfen möchte... Aber am Ende läufts dann doch irgendwie. Und meist hat man irgendwo nur ein ; vergessen...

Lieben Gruß
 
Danke Madpolygon!
Iwie hab ich das glaub schon falsch geschaltet. Ist doch ganz schön schwer das Thema, momentan brummt mir der Kopf. Mensch ich bin Maler.:ugly:
Verbring schon jede freie Minute mit dem einlesen in die Materie aber mit meinem Job hat das nicht viel zu tun:D, ist für mich alles nur Fachchinesisch.
Und beim Englisch hörts bei mir erst recht auf. Bin froh wenn ich es halbwegs verstehe ohne einen Translater zu benutzen aber bei diesem Thema kostet mich das nur noch mehr unnütze Zeit wenn ich noch zusätzlich übersetzen muss was ich nicht mal auf deutsch verstehe.

Irgendwann ist das Fass auch voll aber egal ich bleib am Ball.
Abgesehen von einem 4h Fachgespräch zu dem Thema sitz ich heute seit 15.00Uhr dran. Wieder ordentlich was gelernt.:D

Also die Fernbedienung läuft auch, die Codes habe ich mir alle notiert und eine LED bekomme ich per FB nun auch ein und ausgeschaltet. Uhhhhhhhhh :ugly:

Da Benny ,und ich übrigens auch, unbedingt den Motor laufen sehen will, habe ich die meiste Zeit versucht rauszukriegen wie ich den Motor Sketch mit dem IR Sketch verbinden kann.
Aber ohne Erfolg, die ganze Reihenfolge des Sketchaufbaus ist mir in diesem Fall noch etwas unklar. Manche Sketche sind auch enorm unterschiedlich obwohl sie die selbe Funktion erfüllen, das bring nur noch mehr Fragezeichen.

@Noname Den Link zur Komplexität der Programmierung habe ich auch auf deutsch gefunden, ich denke darum geht es in deinem Link oder?
Ich hab es mir auf jeden fall ausgedruckt und werde es mir ein paar mal durchlesen und schauen was so alles hängen bleibt. ;)

Kein Ding;)
Ich kann mal versuchen noch Sachen auf deutsch zu finden, englischsprachig findet man halt einiges mehr, weshalb ich quasi ausschließlich auf englisch google, egal was ;). Aber als Tipp, das offizielle Arduino Forum bietet auch einen deutschen Forenbereich an.

Zur Reihenfolge innerhalb der Sketche:
Als erstes bindest du die Bibliotheken ein die du benutzen willst, schließlich muss der Compiler z.B. den Befehl "DrehDichEinmal" aus der Bilbiothek "Servo" irgendwoher kennen. Die Bibliothek ist dann quasi sowas wie ein Nachschlagewerk für den Compiler.
Danach kannst du z.B. verschiedene Variablen und Konstanten deklarieren was in deinem Fall z.B. dem Code zum Öffnen der Tür entsprechen würde.
Würde dann wie folgt aussehen:
Code:
const int CodeToOpenDoor =  1234;
// "const" bedeutet das es sich um eine nicht veränderbaren Wert handelt, also Konstante. Ist optional.
// "int" ist der Datentyp, in dem Fall integer, was einer 32-Bit Zahl entspricht. Gibt natürlich noch viele weitere, wie "boolean", "String" (S groß weil kein primitiver Datentyp), "byte" etc.
// "CodeToOpenDoor" ist logischerweise der Name
// mit "=" erfolgt eine Wertezuweisung in dem Fall von "1234"

In der Setup Funktion werden Sachen "eingerichtet" wie z.B. festgelegt welche Pins als In-/Output funktionieren sollen usw.
Die Loop Funktion wird andauernd durchlaufen (heißt ja auch Loop :ugly:) von hier aus kannst du zu anderen selbst geschriebenen Funktionen springen. Ist diese Funktion dann durchlaufen wird wieder zum Loop zurückgekehrt.

Das die Sketches sich so unterscheiden liegt einfach daran, dass es in der Programmierung normalerweise kein "Richtig" und "Falsch" gibt. Es führen eben viele Wege nach Rom. Der eine ist effizienter, dafür schwerer befahrbar, der andere leichter zu befahren, dafür musst du aber Umwege in Kauf nehmen:D.


Hier hab ich aus dem Arduino Forum mal ein Sketch herausgesucht, wo quasi mehrere Sachen gleichzeitig gemacht werden (aber eben nur quasi, echte Parallelität beherrscht der Arduino eben nicht mit nur einem Kern):
Code:
// SeveralThingsAtTheSameTime.ino

// An expansion of the BlinkWithoutDelay concept to illustrate how a script
//  can appear to do several things at the same time


// this sketch does the following
//    it blinks the onboard LED (as in the blinkWithoutDelay sketch)
//    it blinks two external LEDs (LedA and LedB) that are connected to pins 12 and 11.
//    it turns another Led (buttonLed connected to pin 10) on or off whenever a button
//       connected to pin 7 is pressed
//    it sweeps a servo (connected to pin 5) back and forth at different speeds




//  One leg of each LED should be connected to the relevant pin and the other leg should be connected to a
//   resistor of 470 ohms or more and the other end of the resistor to the Arduino GND. 
//   If the LED doesn't light its probably connected the wrong way round.


//  On my Uno and Mega the "button" is just a piece of wire inserted into pin 7. 
//   Touching the end of the wire with a moist finger is sufficient to cause the switching action
//   Of course a proper press-on-release-off button switch could also be used!


//  The Arduino is not capable of supplying enough 5v power to operate a servo
//    The servo should have it's own power supply and the power supply Ground should
//      be connected to the Arduino Ground.


// The sketch is written to illustrate a few different programming features.
//    The use of many functions with short pieces of code. 
//       Short pieces of code are much easier to follow and debug
//    The use of variables to record the state of something (e.g. onBoardLedState) as a means to
//       enable the different functions to determine what to do.
//    The use of millis() to manage the timing of activities
//    The definition of all numbers used by the program at the top of the sketch where 
//       they can easily be found if they need to be changed




//========================================


// ----------LIBRARIES--------------


#include <Servo.h>


// --------CONSTANTS (won't change)---------------


const int onBoardLedPin =  13;      // the pin numbers for the LEDs
const int led_A_Pin = 12;
const int led_B_Pin = 11;
const int buttonLed_Pin = 10;


const int buttonPin = 7; // the pin number for the button


const int servoPin = 5; // the pin number for the servo signal


const int onBoardLedInterval = 500; // number of millisecs between blinks
const int led_A_Interval = 2500;
const int led_B_Interval = 4500;


const int blinkDuration = 500; // number of millisecs that Led's are on - all three leds use this


const int buttonInterval = 300; // number of millisecs between button readings


const int servoMinDegrees = 20; // the limits to servo movement
const int servoMaxDegrees = 150;




//------------ VARIABLES (will change)---------------------


byte onBoardLedState = LOW;             // used to record whether the LEDs are on or off
byte led_A_State = LOW;           //   LOW = off
byte led_B_State = LOW;
byte buttonLed_State = LOW;


Servo myservo;  // create servo object to control a servo 


int servoPosition = 90;     // the current angle of the servo - starting at 90.
int servoSlowInterval = 80; // millisecs between servo moves
int servoFastInterval = 10;
int servoInterval = servoSlowInterval; // initial millisecs between servo moves
int servoDegrees = 2;       // amount servo moves at each step 
                            //    will be changed to negative value for movement in the other direction


unsigned long currentMillis = 0;    // stores the value of millis() in each iteration of loop()
unsigned long previousOnBoardLedMillis = 0;   // will store last time the LED was updated
unsigned long previousLed_A_Millis = 0;
unsigned long previousLed_B_Millis = 0;


unsigned long previousButtonMillis = 0; // time when button press last checked


unsigned long previousServoMillis = 0; // the time when the servo was last moved




//========================================


void setup() {


  Serial.begin(9600);
  Serial.println("Starting SeveralThingsAtTheSameTimeRev1.ino");  // so we know what sketch is running
  
      // set the Led pins as output:
  pinMode(onBoardLedPin, OUTPUT);
  pinMode(led_A_Pin, OUTPUT);
  pinMode(led_B_Pin, OUTPUT);
  pinMode(buttonLed_Pin, OUTPUT);
  
      // set the button pin as input with a pullup resistor to ensure it defaults to HIGH
  pinMode(buttonPin, INPUT_PULLUP);
  
  myservo.write(servoPosition); // sets the initial position
  myservo.attach(servoPin);
 
}


//========================================


void loop() {


      // Notice that none of the action happens in loop() apart from reading millis()
      //   it just calls the functions that have the action code


  currentMillis = millis();   // capture the latest value of millis()
                              //   this is equivalent to noting the time from a clock
                              //   use the same time for all LED flashes to keep them synchronized
  
  readButton();               // call the functions that do the work
  updateOnBoardLedState();
  updateLed_A_State();
  updateLed_B_State();
  switchLeds();
  servoSweep();


}


//========================================


void updateOnBoardLedState() {


  if (onBoardLedState == LOW) {
          // if the Led is off, we must wait for the interval to expire before turning it on
    if (currentMillis - previousOnBoardLedMillis >= onBoardLedInterval) {
          // time is up, so change the state to HIGH
       onBoardLedState = HIGH;
          // and save the time when we made the change
       previousOnBoardLedMillis += onBoardLedInterval;
          // NOTE: The previous line could alternatively be
          //              previousOnBoardLedMillis = currentMillis
          //        which is the style used in the BlinkWithoutDelay example sketch
          //        Adding on the interval is a better way to ensure that succesive periods are identical


    }
  }
  else {  // i.e. if onBoardLedState is HIGH
  
          // if the Led is on, we must wait for the duration to expire before turning it off
    if (currentMillis - previousOnBoardLedMillis >= blinkDuration) {
          // time is up, so change the state to LOW
       onBoardLedState = LOW;
          // and save the time when we made the change
       previousOnBoardLedMillis += blinkDuration;
    } 
  }
}


//========================================


void updateLed_A_State() {


  if (led_A_State == LOW) {
    if (currentMillis - previousLed_A_Millis >= led_A_Interval) {
       led_A_State = HIGH;
       previousLed_A_Millis += led_A_Interval;
    }
  }
  else {
    if (currentMillis - previousLed_A_Millis >= blinkDuration) {
       led_A_State = LOW;
       previousLed_A_Millis += blinkDuration;
    } 
  }    
}


//========================================


void updateLed_B_State() {


  if (led_B_State == LOW) {
    if (currentMillis - previousLed_B_Millis >= led_B_Interval) {
       led_B_State = HIGH;
       previousLed_B_Millis += led_B_Interval;
    }
  }
  else {
    if (currentMillis - previousLed_B_Millis >= blinkDuration) {
       led_B_State = LOW;
       previousLed_B_Millis += blinkDuration;
    }
  }    
}


//========================================


void switchLeds() {
      // this is the code that actually switches the LEDs on and off


  digitalWrite(onBoardLedPin, onBoardLedState);
  digitalWrite(led_A_Pin, led_A_State);
  digitalWrite(led_B_Pin, led_B_State);
  digitalWrite(buttonLed_Pin, buttonLed_State);
}


//========================================


void readButton() {


      // this only reads the button state after the button interval has elapsed
      //  this avoids multiple flashes if the button bounces
      // every time the button is pressed it changes buttonLed_State causing the Led to go on or off
      // Notice that there is no need to synchronize this use of millis() with the flashing Leds
  
  if (millis() - previousButtonMillis >= buttonInterval) {


    if (digitalRead(buttonPin) == LOW) {
      buttonLed_State = ! buttonLed_State; // this changes it to LOW if it was HIGH 
                                           //   and to HIGH if it was LOW
      previousButtonMillis += buttonInterval;
    }
  }


}


//======================================


void servoSweep() {


      // this is similar to the servo sweep example except that it uses millis() rather than delay()


      // nothing happens unless the interval has expired
      // the value of currentMillis was set in loop()
  
  if (currentMillis - previousServoMillis >= servoInterval) {
        // its time for another move
    previousServoMillis += servoInterval;
    
    servoPosition = servoPosition + servoDegrees; // servoDegrees might be negative


    if (servoPosition <= servoMinDegrees) {
          // when the servo gets to its minimum position change the interval to change the speed
       if (servoInterval == servoSlowInterval) {
         servoInterval = servoFastInterval;
       }
       else {
        servoInterval = servoSlowInterval;
       }
    }


    if ((servoPosition >= servoMaxDegrees) || (servoPosition <= servoMinDegrees))  {
          // if the servo is at either extreme change the sign of the degrees to make it move the other way
      servoDegrees = - servoDegrees; // reverse direction
          // and update the position to ensure it is within range
      servoPosition = servoPosition + servoDegrees; 
    }
    
        // make the servo move to the next position
    myservo.write(servoPosition);
        // and record the time when the move happened


  }
  
}


//========================================END
Is halt wieder auf Englisch, aber den dazugehörigen Thread findest du hier: Demonstration code for several things at the same time
Hier ist auch noch ein Projekt: http://www.letsarduino.com/project-20-arduino-door-lock-using-4x4-keypad-and-servo-motor/

Wenn du willst kannst du mir auch die Sketches schicken oder Sachen per PN fragen. Versuche zu helfen soweit ich kann.


Haha... wie kam ich drauf, dass es sowas noch nicht fertig gibt....
Naja, es gibt quasi alles, man muss es nur finden :ugly:
 
Das schaff ich ja gar nicht abzuarbeiten, hab gestern noch so lange gemacht bzw. gab es da ne Nervensäge bis um 3Uhr heut morgen XD(ne nur spass;) , wer das wohl war? ) und hab heut gleich mal den ganzen Tag verpennt. :nene:

Für mich selbst muss ich wohl doch erst mal mehrere Sachen probieren bevor ich mich in die Richtung weiter waage, mir sind doch noch zu viele Sachen unklar bzw. muss ich auch alles erst mal richtig verinnerlichen.

Den Ansatz (Madpolyg0n) hatte ich gestern auch schon als ich sah das die IR ja auf eine Bibliothek zugreift. Da dacht ich mir das muss der doch mit dem Servo auch machen können. ;)
Mein Sketch ist aber auch aus dem Netz.
Mir ist schon klar das man alles findet und nur richtig suchen muss, was ich ja schon die ganze Zeit mache. Ich lese mir auch viel Englisch durch muss ich ja, es ist nur in dem Fall leicht Kontraproduktiv.

Ui deinen langen Sketch würde ich ja ´gerne mal austesten, muss aber gleich los, mal schauen ob ich noch dazu komme.

Also momentan habe ich für den Motor diesen Sketch, hab dort nur mal ca. 2 rechts und dann links Umdrehungen eingestellt, die genauen Werde kann ich dann anpassen wenn ein Zahnrad drauf ist und ich den Motor verbaut habe.
Code:
//Schrittmotorsteuerung für 28BYJ-48 5VDC mit ULN2003A

#define NrOfMotorOutputs 4 //Anzahl der Ausgänge zur Ansteuerung des Motors
#define NrOfPatternsOneStep 8 //Anzahl der Muster zur Ansteuerung eines Schritts

//Variabeln für Drehrichtung definieren
const byte MotorOff = 0;
const byte DirMotorRight = 1;
const byte DirMotorLeft = 2;

unsigned int ActStepNr = 0; //Aktueller Schritt

//Schrittmuster definieren
byte StepPattern[NrOfPatternsOneStep][NrOfMotorOutputs] =
{
{ 0, 0, 0, 1 },
{ 0, 0, 1, 1 },
{ 0, 0, 1, 0 },
{ 0, 1, 1, 0 },
{ 0, 1, 0, 0 },
{ 1, 1, 0, 0 },
{ 1, 0, 0, 0 },
{ 1, 0, 0, 1 },
} ; 

//Motor Pins für Ausgänge 1-4 definieren
byte MotorOutputPin[NrOfMotorOutputs] = {8,9,10,11};

void setup()
{
//Alle Pins als Ausgänge setzen und auf LOW schalten
for (byte i=0; i < NrOfMotorOutputs; i++)
{
pinMode((MotorOutputPin[i]), OUTPUT);
digitalWrite(MotorOutputPin[i], LOW);
}
}

// the loop routine runs over and over again forever:

void loop()
{

//Beispielprogramm zur Ansteuerung
MotorMove(DirMotorRight,1, 8192); // MotorMove(Drehrichtung, MotorSpeed, Anzahl Schritte)
delay(10);
MotorMove(DirMotorLeft,1, 8192);
MotorMove(MotorOff,0, 0); //Motor stromlos Pin 1-4 = LOW
delay(10);

}

/////////////// Funktion für Motoransteuerung Anfang //////////////////
void MotorMove(byte MotorDir, unsigned int MotorSpeed, unsigned int StepsToGo)
{ 

//Motor Stop alle Ausgänge auf LOW schalten
if (MotorDir == MotorOff)
{
for (byte i=0; i < NrOfMotorOutputs; i++)
{
digitalWrite(MotorOutputPin[i], LOW);
}
}

//Motor Rechtsdrehung
else if (MotorDir == DirMotorRight)
{
for (int i=0; i < StepsToGo; i++)
{
ActStepNr++;
if (ActStepNr == NrOfPatternsOneStep) ActStepNr = 0;
for (byte j=0; j < NrOfMotorOutputs; j++)
{
digitalWrite(MotorOutputPin[j], StepPattern[ActStepNr][j]);
}
delay(MotorSpeed); //Verweilzeit um die Geschwindigkeit zu beeinflussen, für schnellere Ansteuereung ev. delayMicroseconds
}
}

//Motor Linksdrehung
else if (MotorDir == DirMotorLeft)
{
for (int i=0; i < StepsToGo; i++)
{
if (ActStepNr == 0) ActStepNr = NrOfPatternsOneStep-1;
else ActStepNr-=1;
for (byte j=0; j < NrOfMotorOutputs; j++)
{
digitalWrite(MotorOutputPin[j], StepPattern[ActStepNr][j]);
}
delay(MotorSpeed);
}
}
}
/////////////// Funktion für Motoransteuerung Ende //////////////////

und für die IR FB den hier, total clean und auch für mich voll verständlich xd

Code:
#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

 

void setup()

{

Serial.begin(9600);
 
 
 

pinMode (13, OUTPUT);

 
 

digitalWrite(13, LOW);

irrecv.enableIRIn();

}

 
 
 
 

void loop() {

if (irrecv.decode(&results)) {

Serial.println(results.value, DEC);
 
 
 

if (results.value == 16724175) 

{digitalWrite (13, HIGH);}

 

if (results.value == 16718055) 

{digitalWrite (13, LOW);}

irrecv.resume(); // Receive the next value

}

}

Hey vielen Dank für eure Hilfe, echt der Wahnsinn :hail::hail:


Ist denn das Tastenfeld nur für Codeeingabe vorgesehen oder kann man die auch wie eine FB einstellen?
Ich muss glaub etwas schauen das mir die Pins auch für die Belegung reichen.
Motor = 4Pins
IR = 1Pin
RGB Digital Stripe = 1Pin(denke plus minus muss nicht an den arduino)
Tastenfeld = 8Pin
Distanzsensor = 4 Pin

Den Distanzsensor wollte ich als Alarm haben wenn man zu dicht ans Case kommt, mit 15° Abstrahlwinkel könnte man ihn doch aber bestimmt auch als eine Art kapazitiven Schalter einsetzen oder?
So wie bei Bang & Olovsen, wenn man mit der Hand ohne zu berühren vorm Case langstreicht öffnet sich die Tür. Wenn man ihn im Boden Richtung Himmel zeigend montiert sollte das doch gehen.
Flugverkehr hab ich in meinem Wohnzimmer keinen und wenn krallt sich den die Katze :lol:
15m Reichweite ist zwar heftig aber wird ja nicht durch Wände gehen und kann man bestimmt auch einstellen.
Aber egal gar nicht drauf eingehen, das ist mir zu viel, immer eins nach dem anderen.
Ich wollte es nur sagen, wenn ihr euch schon so Lieb mit mir den Kopf zerbrecht sollte ich euch auch über mein ganzes Vorhaben informieren, bzw. was mir gefällt was nicht oder was wichtig ist und was nicht.

Mein 3D Modell diente ja auch nur als grobe Vorlage wie das Projekt später aussehen soll.
Denn ich werde jetzt zusätzlich zu dem Case und dem Sockel noch eine Bodenplatte mit 1cm Plexi verbauen hinter der die RGB LEDs(das lauflicht) verbaut werden.
Die Pleixplatte bekommt dann oben und unten eine Aluplatte als Abdeckung und 4 Edelstahl Füße (werde Ronde verwenden 50mm evtl) und einen Edelstahlstab zur Befestigung, möglichst Flach dezent. ;)
Ich wollte auch erst Edelstahl statt Alu verwenden zur Abdeckung der Plexiplatte aber der Stahllook wird sich mit dem Silber im Mod beißen.
3Farben ist das Maximum. Weiß Schwarz und Silber.
Übrigens soll sich nächste Woche die Hardware auf den Weg zu mir machen (hab ich gestern mal so nebenbei erfahren).
Dann bekommt ihr dazu auch mehr Infos.:rollen::sabber:

Für die die es noch nicht wissen, Ich nehme auch an dem wohl größten Event im Jahr teil. Die Cooler Master World Series
Das heißt mein Projekt sollte bis ende 6/2016 fertig sein, also noch ausgiebig Zeit.:nicken:

PS: Achso nicht das ich mir von der World Series etwas erhoffe aber es kost ja nix. xd
 
Das schaff ich ja gar nicht abzuarbeiten
Zu viel Information... Hirn überlastet... Hirn wird nun abgeschaltet :ugly:. Kenn ich nur zu gut, man will etwas hinbekommen und ließt und macht und tut, aber zumindest ich übernhem mich beim ersten Anlauf immer und brauch dann so ne Weile bis ich die ganzen Informationen untereinander verknüpfen kann :D

Mir ist schon klar das man alles findet und nur richtig suchen muss, was ich ja schon die ganze Zeit mache. Ich lese mir auch viel Englisch durch muss ich ja, es ist nur in dem Fall leicht Kontraproduktiv.
Wie gesagt das Arduino Forum hat auch nen deutschen Bereich, da kannste bestimmt auch Sachen fragen ;)

Ist denn das Tastenfeld nur für Codeeingabe vorgesehen oder kann man die auch wie eine FB einstellen?
Wie meinst du das genau? Klar kannst du für verschiedene Tasten Kürzel Funktionen festlegen, z.B. dass falls die Taste "A" gedrückt wird ein Transistor den POWER+ und POWER- Pin aufm Mainboard für einen Moment kurzschließt und somit den PC startet

Ich muss glaub etwas schauen das mir die Pins auch für die Belegung reichen.
Motor = 4Pins
IR = 1Pin
RGB Digital Stripe = 1Pin(denke plus minus muss nicht an den arduino)
Tastenfeld = 8Pin
Distanzsensor = 4 Pin
Der Nano bietet 14 Digitale I/O-Pins und 8 Analoge Pins. Die analogen kannst du bis auf Pin A6 und A7 auch als digitale I/O Pins nutzen.
Plus und Minus vom LED Streifen auf keinen Fall an den Arduino, der fackelt dir ab, außer du nutzt nur 3,4 LEDs, aber ich denke es werden mehr sein:ugly:. Welche Streifen hast du nochmal? Wenn es welche sind mit 3 Lötstellen "GND", "5V", "DIN" dann reicht es einfach "DIN" an den Arduino zu packen.
Die Pins reichen denke ich, da dir ja 22 Pins insgesamt zur Verfügung stehen, wovon du 20 als digitale I/O-Pins nutzen kannst und wenn ich mich nicht verzählt habe brauchst du davon 18.
Den Distanzsensor wollte ich als Alarm haben wenn man zu dicht ans Case kommt, mit 15° Abstrahlwinkel könnte man ihn doch aber bestimmt auch als eine Art kapazitiven Schalter einsetzen oder?
So wie bei Bang & Olovsen, wenn man mit der Hand ohne zu berühren vorm Case langstreicht öffnet sich die Tür. Wenn man ihn im Boden Richtung Himmel zeigend montiert sollte das doch gehen.
Hast du nen Ultraschallsensor dafür? Wenn ja ist das für die Katze vielleicht nicht so angenehm :). Aber keine Ahnung wie stark das Teil ist.
Flugverkehr hab ich in meinem Wohnzimmer keinen und wenn krallt sich den die Katze :lol:
Stell dir vor im Sommer kommt ein Moskito oder ne Mücke hinter den Mechanismus und ärgert dich die ganze Zeit. Tür auf, Tür zu, Tür auf...:lol:
15m Reichweite ist zwar heftig aber wird ja nicht durch Wände gehen und kann man bestimmt auch einstellen.
"Aktivierungsdistanz" sollte man einstellen können. Die Distanzsensoren arbeiten ja alle mit Reflektion eines vorher ausgesendeten Signals. Die können dann schon erkennen wie nah etwas ist basierend auf der Rücklaufzeit des Signals.
Aber egal gar nicht drauf eingehen, das ist mir zu viel, immer eins nach dem anderen.
Gekonnt ignoriert:P

Für die die es noch nicht wissen, Ich nehme auch an dem wohl größten Event im Jahr teil. Die Cooler Master World Series
Das heißt mein Projekt sollte bis ende 6/2016 fertig sein, also noch ausgiebig Zeit.:nicken:

PS: Achso nicht das ich mir von der World Series etwas erhoffe aber es kost ja nix. xd
Dann mal viel Erfolg dabei ;)
 
Also für das berührungslose Betätigen hätte ich hier was für dich:

[Tutorial] kapazitiver Sensor - Teil 1 (Taster)

Eric Cartmann hat das in seinem Mod zum Starten vom PC benutzt - ich ebenfalls. Wenn man den 4N35 als Optokoppler einsetzt, läuft der Sensor sogar bei ~3V Versorgungsspannung einwandfrei. Empfindlichkeit ist dabei einstellbar.

Hier noch zwei Youtube-Links zu dem Sensor:

Video vom Entwickler: https://www.youtube.com/watch?v=QhnLMvj3mVE
Video von Eric Cartmann: https://www.youtube.com/watch?v=sMwHxu9v_1o
 
phuuu, merke grad, das ich schon ne Weile keinen Code mehr gelesen habe....

Also... Ich kann gerade noch nicht so einschätzen wie gut du die Programmiersprache kennst, oder wie weit du die ganzen Konstrukte da im Code verstehen möchtest.
Daher gehe ich erst mal nur grob auf das Thema ein.

Zum IR Thema kann ich auch noch nix sagen,da ich mir die Bibliothek noch nicht angesehen habe. Aber wenn das eh funktioniert ist das super, und das scheint auch echt sehr einfach aufgebaut zu sein. Über "if (irrecv.decode(&results))" kann du immer prüfen ob etwas angekommen ist, und mit den folgenden If + Zahlencode Zeilen kannst du einfach Dinge anstoßen. Sieht einfach und gut aus. Da wird alles komplizierte schön in einer Bibliothek versteckt.
Beim Motortreiber könntest du auch so etwas auch verwenden, aber das Internet behauptet, dass das nicht sehr gut läuft. Daher findet man diese selbst geschriebene Lösung um den Motor abzutreiben. Eigentlich finde ich diese Lösung echt cool, da man sich da richtig gut mit der Funktionsweise eines Schrittmotors beschäftigen kann. Aber ich denke das ist hier nicht das Ziel...
Der Code zum Motor sieht für mich auch erst mal soweit ok aus, einzig die Deklarationen am Anfang bringen mich ins grübeln, ob die Zahlen da so stimmen.
Übrigens werden da auch die von mir erwähnten Funktionen verwendet.

Insgesamt bin ich aber von dem Treiber nicht sehr angetan. Irgendwie ist mir das zu kompliziert... Ich hab heute mal in meiner Bastelkiste gesucht und tatsächlich noch den Treiber (A4988) mit kleinem Motor gefunden. Wenn du magst schick ich dir den und du probierst mal damit rum. Ich bin von dem Treiber sehr begeistert, weil er sehr einfach anzusteuern ist und er hervorragend mit der AccelStepper Bibliothek funktioniert. Er braucht nur 2 Pins, einen für die Richtung und einen für die Schritte. Wenn du den Zustand auf dem Schritt Pin änderst macht der Motor einen Schritt, den Rest macht der Treiber. Und über die Bibliothek kannst du ihn sehr einfach im Code einbinden und kannst eine Delayyfreie Geschwindigkeitsvorgabe machen. Die Bib kann noch viel mehr, aber das meiste braucht man nicht... Aber vor allem wäre der ganze Codewust zum ansteuern aus deinem Code und Kopf.


Mehr kann ich grad nicht schreiben, da ich dringen ins Bett muss, nachdem ich heute Abend schon zu lange an der Erweiterung meiner ersten Wakü gebastelt habe :)

Lieben Gruß
 
@MadPolygon
den Deutschen Arduino Bereich kannte ich schon, also schon mehrere Suchtreffer in dem Forum gehabt.
Ich schaffe noch nicht mal eure Tips zu verarbeiten, da wird ich mich hüten noch mehr dumme Fragen im Netz zu stellen.
Zumal die Leutz im Arduino Forum auch von mehr Grundkenntnis ausgehen, so weit bin ich noch nicht:ugly:

Das Tastenfeld :
Es ist ja nur für Showzwecke, ich werde den Kram zu Haus sowieso ausschalten.
Es soll zwar aussehen wie ein Codeeingabefeld aber im Grunde nur die FB ersetzen.
Nachdem ich letztens den Code gesehen habe den du verlinkt hattest, war mir das glei zu viel.
Ist zwar lustig,kommt mir aber für den Anfang zu komplex vor und wenn ich darüber mehrere Befehle ausführen will müssten massig Codes einprogrammiert werden.
Wenn jede Taste nur einen Befehl bekommt sollte die Programmierung bedeutend kürzer ausfallen.
Also eher :
A = Ein/Aus
B = Reset
C =Tür auf
D = Tür zu
0-9 = verschiedene RGB Effekte

Ultraschallsensor:
Ja scheint einer zu sein. Die Katze hat aber gemütlich weiter geschlafen :D
Hier ich habe gestern mal etwas damit experimentiert.
Das erste mal das ich Zeilen selbst geschrieben habe und danach auch alles funktioniert hat.
Ursprünglich hatte der Sketch nur eine LED, jetzt leuchten 2 verschiedenen je nach kontakt oder nicht.:rollen:

Eingebundener Inhalt
An dieser Stelle findest du externe Inhalte von Youtube. Zum Schutz deiner persönlichen Daten werden externe Einbindungen erst angezeigt, wenn du dies durch Klick auf "Alle externen Inhalte laden" bestätigst: Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit werden personenbezogene Daten an Drittplattformen übermittelt.
Für mehr Informationen besuche die Datenschutz-Seite.

@HighEnd111
Ja die Toturials hatte ich schon mal gesehen, möchte ich aber nicht verbauen, bin jetzt schon überfordert.
War ja nur eine Idee von mir.
Außerdem muss ich auch echt an den Zeitrahmen denken, den ich noch habe und den ich schon investiert habe.
Schließlich plane und arbeite ich an dem Projekt schon seit Mitte letzten Jahres.

Und ich weiß wie es läuft, wenn ich erst mal fertig bin geht's erst richtig los, weil mir dieses und jenes nicht gefällt oder unstimmig wirkt.

@noname252
Meine Kenntnisse? sind nach wie vor miserabel, ich fange zwar nach und nach an mehr zu verstehen aber da Gesamtbild ist immer noch mehr als verschwommen.:nene:

Mit deinem Treiber experimentiere ich gerne etwas rum, bevor er bei dir einstaubt. :D


Also neuer Tag neues Glück.
ebend wieder etwas nach Sketchen gesucht und gleich fündig geworden:P
Dieser Sketch greif auf die IRremote h und die Stepper h liberary .
Damit ist der Sketch etwas übersichtlicher. Da eine andere FB benutzt wurde habe ich einfach mal die Codes meiner FB eingegeben und "it works" :D
An den anderen Werten habe ich noch nichts verändert, werde ich aber jetzt noch etwas tun.

Code:
#include "Stepper.h"
#include "IRremote.h"

/*----- Variables, Pins -----*/
#define STEPS  32   // Number of steps per revolution of Internal shaft
int  Steps2Take;  // 2048 = 1 Revolution
int receiver = 6; // Signal Pin of IR receiver to Arduino Digital Pin 6

/*-----( Declare objects )-----*/
// Setup of proper sequencing for Motor Driver Pins
// In1, In2, In3, In4 in the sequence 1-3-2-4

Stepper small_stepper(STEPS, 8, 10, 9, 11);
IRrecv irrecv(receiver);    // create instance of 'irrecv'
decode_results results;     // create instance of 'decode_results'

void setup()
{ 
  irrecv.enableIRIn(); // Start the receiver
}

void loop()
{
if (irrecv.decode(&results)) // have we received an IR signal?

  {
    switch(results.value)

    {

      case 16724175: // forward pressed
                      small_stepper.setSpeed(500); //Max seems to be 700
                      Steps2Take  =  2048;  // Rotate CW
                      small_stepper.step(Steps2Take);
                      delay(2000); 
                      break;

      case 16718055: // backwards button pressed
                      small_stepper.setSpeed(500);
                      Steps2Take  =  -2048;  // Rotate CCW
                      small_stepper.step(Steps2Take);
                      delay(2000); 
                      break;
                      
    }
    
      irrecv.resume(); // receive the next value
  }  


}/* --end main loop -- */

Der Unterschied zwischen zu dem IR Sketch verwirrt mich zwar schon wieder aber wird schon seinen Grund haben.

Code:
if (results.value == 16724175) 

{digitalWrite (13, HIGH);}

am breadboard sind noch andere Sachen angeschlossen( von anderen Tests) nicht wundern

Eingebundener Inhalt
An dieser Stelle findest du externe Inhalte von Youtube. Zum Schutz deiner persönlichen Daten werden externe Einbindungen erst angezeigt, wenn du dies durch Klick auf "Alle externen Inhalte laden" bestätigst: Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit werden personenbezogene Daten an Drittplattformen übermittelt.
Für mehr Informationen besuche die Datenschutz-Seite.

Wat soll ick sagen : Der Motor läuft per IR! Zeit den Motor zu verbauen:D
Erstes wirkliches Erfolgserlebniss. Nun bin ich gespannt ob der Motor überhaupt stark genug ist.
Abgesehen von dem Tastenfeld wird es Zeit sich mit den Digitalen RGB Led´s auseinander zu setzen.

Irgendjemand fragte glaub welche LED´s das sind? Diese hier
 
Sieht doch schon mal nice aus :daumen:. Hast du den "Aktivierungsabstand" des Sensors auch schon einstellen können?

Der Unterschied zwischen den beiden Sketches ist einfach, dass zwei verschiedene Arten der Verzweigung genutzt wurden. Nämlich if-else bzw. switch-case.

Jap, ich hab gefragt welche LEDs du hast. Die passen, einfach Kabel an das "DI" Lötpad und an den Arduino hängen. die beiden anderen für die Stromversorgung ans Netzteil.
 
Zurück