[Casecon] Light Glass [Worklog]

Alteeeeeeeer, Cap, du kannst bald Intensivkurse zum Programieren von Audrino und Co. geben, wenn du so weiter machst.
Aber in diesem Sinne, mach weiter so, weil dein Projekt ist wie schon erwähnt mega porn.
 
Wunderbar!

Alarmproblem gelöst!
Mein Verdacht mit dem Mantelstromfilter(Rückkoplung) war berechtigt.
Hab jetz mal mit der Belegung am Arduino etwas experimentiert, ein Wiederstand an den Signalpin gehangen wie es auch auf der Adafruit seite steht. So ein capacitor für + - könnte ich mir noch besorgen. Jedenfalls haben die Versuche meinen Verdacht immer mehr bestärkt. Jetzt wollt ich grad nen anderes Netzteil raussuchen, ach dacht ich , geh erst mal an einen anderen Strang vom aktuellen Netzteil und siehe da. Kein Rauschen/ brummen / schleifen mehr im Buzzer während die LEDs leuchten und der Alarm springt nun auch nicht mehr an. Die LEDs flackern auch nicht mehr TOP.
Das Prob mit der IR sollte ich auch hinkriegen wenn ich alle Codes drin hab und den Resume befehl überall einfüge.
Ich hoff mal ich freu mich nicht zu früh.
Jetzt erst mal drüber schlafen, morgen nochmal ausgiebig testen, sketch aufräumen ergänzen und dann kommen die nächsten dummen Fragen ;-).

SecretBiker Dank dir aber davon bin ich noch weit weg, glaub mir, selbst wenn ich alles verstehen würde könnte ich es noch lange nicht wieder geben weil mir dazu einfach die Ausbildung fehlt.

In diesem Sinne, war der Montag ja doch noch zu was gut xd. Gute Nacht euch alllen und vielen vielen Dank!
 
hui :) jetzt ist mir kurz dezent der Kopf geplatzt... also alles mal der reihe nach versuchen zu erklären..
uint8,16,32 sind alles teile der adafruit liberary, was mich Wochenende auch schon interessierte.

Das sind nur bestimmte Varianten des Integer Datentyps. Das normale int speichert ja einen 16-bit Wert, also von -32,768 to 32,767. Ein unsigned integer (uint) ist auch 16-Bit, lässt aber die negativen Zahlen weg, also mögliche Werte von 0 bis 65,535 (2^16) - 1).
Die Zahlen danach geben die Bittiefe an und das _t am Ende dient nur dazu, dass man es nicht mit Variablen verwechselt.
Diese Dinger sind also einfach nur Datentypen, und der Sinn davon ist die Variablen vom Speicherplatzbedarf anzupassen und nix zu verschwenden.

Bibliotheken lesen:
Im Instalations Ordner der Arduino IDE gibts einen libraries Ordner. Hier findest du alle installierten Bibliotheken. In den Ordnern gibt es dann mindestens 3 Dateien. Einmal die Keywords, die kannst du ignorieren. Die Datei mit der Endung .h beschreibt erst mal grob den Funktionsumfang, und die Datei mit .cpp an Ende die Funktionen im Detail. Jetzt mal am Beispiel der Stepper.h
Mit einem Text Editor, ich empfehle da sehr notepad++ (damit kann man auch super programmieren, bei Sprache einfach C++ einstellen und in der Arduino IDE bei den Einstellungen"externen Editor benutzen" anmachen), erst mal die .h Datei öffnen.
Neben viel Erklärung ist es hier ab Zeile 49 interessant. Hier wird die Klasse Stepper beschrieben. Den Public Teil kannst du nutzen, der Private Teil gehört der Bibliothek und an den kommst du auch nicht ran. In Zeile 52 steht wie der Construktor auszusehen hat (also wie man das Ding initialisiert). Dann kommen danach die Funktionen die der Klasse zur Verfügung stehen. In dem Fall sind das zwei, "setspeed" und "step".
Mit diesem Wissen öffnen wir jetzt die .cpp Datei und suchen danach.
In Zeile 122 finden wir die stepp Funktion wieder. Hier wird jetzt wunderbar mit millis() rumgewurschtelt und Zeitpunkte gespeichert, um herauszufinden ob schon wieder ein Schritt zu tun ist. Hier konnte ich die Delay Funktion nicht finden.
Das wärs damit dann auch schon...
Mal schaun ob dir das weiterhilft, wenn du die Neopixel Bobliothek anschaust.
Okay super das ich nicht vollkommen in die falsche Richtung arbeite.
Ich weiß nicht ob du es gesehen hattest aber ich hab den irrecv.resume(); Befehl unten bei den einzelnen Effekte eingefügt um es oben ebend übersichtlicher zu halten.
Somit sollte irrecv.resume(); ja nach jedem LED Effekt wieder aktiviert werden.
Genauso bin ich auch mit dem Orangenem Theaterchase für Motorlaufen verfahren. Ich habe es gar nicht mehr oben bei den Eingaben zu stehen sondern direkt beim void motorLaufen eingefügt.
Da das Orange ja nur für das öffnen/schließen da ist, startet es auch automatisch sobald motorlaufen aktiviert wird.

Jup, hab immer wieder welche entdeckt :) Aber... wie du schon schreibst, nach jedem LED Effekt soll das aufgerufen werden. Darauf würd ich noch bissl achten, dass diese Code Zeile auch wirklich immer erreicht wird. Will nur sagen, mach dir ein System, nachdem du arbeitetest, so dass du sicher sein kannst das nicht doch mal zu übersehen.
Das mit dem Theater im Motorlaufen Teil find ich auch ne ganz gute Idee, hält den Loop übersichtlich und gehört ja eh zusammen...
Theaterchase mit motorlaufen geht er danach aus, wenn ich ein theaterchase auf IR lege bleibt es an.
Ich möchte eigentlich beides für bestimmte Aufgabe, sollte nur wissen wie ich das genau steuer.
hmm, dafür kenn ich mit den Neopixel zu schlecht aus. Da hilft vielleicht tatsächlich ein Blick in die Biliothek (oder jemand der n Plan davon hat...)

Ja habs probiert aber während der Motor läuft(ohne LED, nur rein der Motor) geht nix, IR nimmt keine Befehle an, erst nachdem der Motor wieder still steht. Am KP selbiges.
Hab die IR mal komplett raus um nur über KP LED zu starten während der Motor läuft aber er blockiert definitiv.
Verdaaaaaaaaaaamt !!!!
!!
Da war ich mir recht sicher, dass das geht....

Mit Auskommentieren meine ich // in die Zeile am Anfang zu zu schreiben, damit es eben nicht berücksichtigt wird. So musst du den Teil nicht löschen, sondern kannst ihn nur auf "Pause" setzen. Wenn du das mit mehreren Zeilen machen möchtest, kannst du einen Kommentar mit /* starten und mit */ wieder schließen. Is auch recht praktisch.

Also erst mal hab den Code eingefügt aber ohne große Änderung.
%10 und <10 geht der Alarm trotzdem nach jedem LED Effekt an(nur bei den die manuell gestartet werden,bzw eigentlich nur bei dem weißen colorwipe( IR taste 0, KP Taste 1) bei einem grünen colorwipe auf IR 4 oder Öffnen schließen geht kein Alarm an.

Schadeee, das es nix gebracht hat. Ich würd mich jetzt aber erst mal noch auf einzelne Teile konzentrieren, dass die sauber laufen. Insgesamt ist das Projekt ja schon recht komplex, und einen Fehler gerade zu finden ist denke ich sehr schwer. Vor allem wenn sich an der Art wie Motor und LED laufen noch was ändern wird.

Okay also die Hausaufgabe ist heftig.
Hab schon etwas experimentiert aber das ist auch genau der Beispielsketch der nichtmal mit Delay bei mir läuft.

Und schon wieder ein verdammt ;) Dies ist das einzige Beispiel bisher das ich ohne Delay gefunden habe, und das auf verschiedenen Seiten...
Nach genauerer Code analyse gebe ich dir recht.... das Ding macht noch nix, bzw eventl. genau einmal und auch nur in diesem Skript... Dies ist halt das einfachste Lauflicht, dass sich recht einfach auf delay frei umschreiben lässt. Schade, dass es nicht mal mit delay läuft.... kann man also vergessen...
Die anderen Lauflichter sind durch die verschachtelten for Schleifen ziemlich schwer umzuschreiben. Ich würd mir das erst mal nicht (ohne großem Zeitlichen Aufwand) zutrauen.
Einen Versuch hätte ich noch mit dem colorwipe....
Code:
void loop(){
 laufColorWipe();
}

void laufColorWipe(){
if ((unsigned long)(millis() - previousMillis) >= interval) {
  previousMillis = millis();
  colorWipe2();
 }
} 

void colorWipe2(){
  strip.setPixelColor(currentPixel,currentColor);
  strip.show();
  currentPixel++;
  if(currentPixel == NUM_PIXELS){
    currentPixel = 0;
}
Das mal einarbeiten. Den Part vor dem Loop aus dem Link übernehmen. Und die Zeile im loop in deinem Programm an die entsprechende Stelle packen.
Die beiden Funktionen nach dem Loop wieder nach dem Loop einfügen.
So müsste das Ding zumindest etwas machen.

Abschließend.... Mir raucht der Schädel....
 
Muahaha... die Stepper.h ist doch blockierend.... so was aber auch..
Wenn man in die cpp Datei kuckt, dann hat man in Zeile 132 eine while schleife, in welcher Schritte runtergezählt werden und die erst verlassen wird, wenn alle Schritte getan sind...

Dann hab ich noch das hier gefunden, Arduino Projekte
Ne super Bibliothek nur für den Treiber..... die einfach nur eine blöde Kopie der Stepper.h ist, bei der man die Pins nicht mehr verdrehen muss...

Möööp.... AccelStepper it is....

Hab dann noch ein wenig gelötet...
2016-02-22 23.42.24-2.jpg
und Code ausprobiert....
Erstes Ergebniss, der Motor ist kaputt. Ich bekomme die Leds zum leuchten und der Motor vibriert, jedoch dreht sich nix.
Oder mache ich grad was anderes falsch? Du hast da schon mehr Erfahrungen damit Ronny.
Auf der anderen Seite, ich bekomme den Motor auch mit der Accelstepper zum vibrieren, nur seeehr langsam halt.

Da ich inzwischen sehr die AccelStepper empfehlen würde, wäre evetl ein Zeitpunkt meinen Treiber zu testen. Wenn du magst schick ich dir dazu ein Testskript.
 
Das Vibrieren des Motors hatte sich mit erweitern der Hardware vermehrt, an dem Punkt bin ich 5V an die 12V Leitung, seit dem ist Ruhe.
Wenn die 4 Motorpins falsch gesteckt sind äußert sich das Problem genauso.

Ein Testskript für deinen Treiber wäre nicht schlecht, genau wie eine Schaltung für das Schieberegister. Beim ULN2003 ist er ja schon vormontiert, also hab ich mich damit noch gar nicht befasst.

Ja ich kann gerne anfangen mich mit der accelstepper.h auseinandersetzten, wobei mich jetzt auch interessieren würde wie sich mein Skript verhält wenn alle Tasteb belegt sind und ich mal ordentlich aufräume. Das würde mich aber auch einen Abend kosten.
 
Mit deinem delay Problem hätte ich nun auch gesagt, schau mal nach ob du die LED's nicht alle einzeln ansteuern kannst und dann halt wirklich alle einzeln programmieren.
Auch wenn es mehr Aufwand ist sollte es dadurch dich besser laufen oder?
Und wenn ich noname richtig verstehe müsste das der "step" Befehl doch auch ausführen oder?

Wegen deinem brummen etc. wegen dem Analogwert. Das wird an Potentialunterschieden liegen, da es sich bei dem Messwert und einen aktiven Wert handelt.
Da es auf nem anderen Strang am Netzteil besser läuft, schließe ich daraus mal dass der erste Strang schlechter an den internen Spannungswandlern bzw. deren Masse angeschlossen ist.
 
Hi Benny, klar wäre das die effektivste Lösung aber ich glaub ich das ich dazu in der Lage bin, es wird bestimmt auch einen Grund geben warum offizielle RGB Liberarys mit dekay arbeiten denn den Nachteil stört ja jeden. Ich fühle mich der Aufgabe jedenfalls nicht gewachsen.

Was meinst du nun liegt es nur am Netzteil mit dem Buzzer neben Geräusch oder sollt ich noch irgendwas verbauen.
Das Netzteil stammt aus nem Pentium I, ist also nicht gerade das neueste.
 
Im Normalfall musst du nur dafür sorgen, dass Sensoren, Aktoren und verarbeitende Bausteine (Arduino) das gleiche Potential haben.
Somit solltest du einfach schauen, dass das Arduino (oder der Arduino? :D) am identischen Strang hängt wie deine restlichen Komponenten am Arduino. Somit solltest du eigentlich Potentialunterschiede direkt ausgleichen können.
 
Somit solltest du einfach schauen, dass das Arduino (oder der Arduino? :D) [...]

Ich sag meistens entweder "der" oder "die". "Die", weil es eine Platine ist, "der", weil es ein µC ist. Für "das" fällt mir spontan keine logische Begründung ein :D

Nebenbei: Echt cool, was hier so alles gemacht wird... ihr seid doch einfach irre :ugly: Aber jetzt weiß ich wenigstens, wen ich noch alles fragen kann, wenn ich Probleme beim Arduino-Programmieren hab :P
 
Na ich würde auch sagen DAS Arduinoboard DIE Arduinoplatine und DER Arduino :D:D

Nochmal kurz der Status, viel Zeit hatte ich nicht.
Ich habe mehrere( 3 oder 4 ) accelstepper sketche probiert die eigentlich direkt für meinen Motor und Treiber waren aber der Motor bewegt sich dort kein bisschen.

Zu dem letzten non blocking adafruit von Noname.
Ist echt komisch, der Sketch macht ja nicht mal Lauflicht, das ist ja das Problem.
Bei Aktivierung geht nur eine LED an.Beim 2.mal drücken die zweite LED und so weiter.
Als ich gestern diesen letzten Versuch von Noname anpassen wollte habe ich nochmal den Sketch geladen und plötzlich hatte ich ein Lauflicht.
Gut alles nochmal in meinen Komplettsketch integriert aber sobald ich den colorwipe mit etwas anderes vermische hab ich wieder nur eine LED.

Ich weiß nicht ob es sich lohnt damit noch weiter zu testen, da die Einstellungen für den non block colorwipe, global sind, dann gäbe es ein mächtiges Chaos, alles anzupassen, bzw. mehrmals zu schreiben für jeden gewünschten Effekt.
Ich muss schauen wie ich Zeit finde, die IR codes noch alle zu programmieren und einen kleinen Sketch für Power und Reset zu schreiben.
Muss heute noch was anderes Vorbereiten aber dazu später mehr. :rollen:
 
Auf jeden Fall hast du viel Arbeit in die Programmierung gesteckt und bisher ist doch was sehr schönes bei raus gekommen. :daumen:
Sowas könnte man vielleicht später noch in Angriff nehmen wenn es nicht so wichtig ist. Lieber an einer anderen Stelle weiter machen und vielleicht fällt einem noch ein, woran es liegen kann. ;)
 
Du hast es erkannt, muss auch langsam mal wieder was basteln aber ohne die Hardware komm ich auch nicht wirklich voran.
Sind alles nur Kleinigkeiten die ich machen kann, nix fertig aber alles angefangen :ugly:
Passt mir gar nicht aber was soll ich machen.
Ich wollte Hardware eigentlich gleich im Januar kaufen aber dann hat sich plötzlich was ergeben und nun warte ich...... immernoch.
Wenigstens habe ich heut nach 2 Wochen erfahren das das Packet heute rausgeht, i hope so.

Hoffe das ich dadurch nicht EK für dieses Projekt verliere, da man üblicherweise regelmäßig Status abliefern sollte, aber was soll ich sagen wenn nix sicher ist.
Dieses Jahr ist halt noch nicht wirklich viel passiert an diesem Projekt, wohl bemerkt in den Augen derer die ihre mods in einem Monat durchziehen. Das dem nicht so ist wisst ihr ja alle selbst.
Naja gut Ding will Weile haben. Ich hoffe nur das Beste.
Und Light Glass wird richtig ROCKEN das weiß ich jetzt schon :nicken:

Werd schauen das ich den Motor endlich mal verbaut bekomme, muß ja auch wissen ob er überhaupt was taugt.
Eine Halterung hatte ich die Tage schon zurecht geschnitten, muß nur noch die Löcher setzen und einbauen.
 
Ich sag meistens entweder "der" oder "die". "Die", weil es eine Platine ist, "der", weil es ein µC ist. Für "das" fällt mir spontan keine logische Begründung ein :D

Nebenbei: Echt cool, was hier so alles gemacht wird... ihr seid doch einfach irre :ugly: Aber jetzt weiß ich wenigstens, wen ich noch alles fragen kann, wenn ich Probleme beim Arduino-Programmieren hab :P


Für "das" gibt es auch eine herleitung, weil es effektiv ein Modul ist und ein Modul ist ein "das"
 
Ihr nu erst!:D
Also ich habe heute auf meiner Seite ein Gewinnspiel gestartet.
Gewinnen kann man Freikarten für die Cebit, pro Person 2Karten. 3 Gewinner werde ich ziehen.

Schaut einfach mal rein, der Andrang ist bestimmt nicht groß da die meisten ja Urlaub brauchen.
 
Hier auch wieder ein Lebenszeichen von mir...

Hab den Motor tatsächlich noch zum Laufen bekommen. Nicht mit der Stepper.h, und bei der Accelstepper.h nur mit einem einzigen Skript. Alle Versuche die ich gerade sonst mache laufen gerade ins leere.

Hier erst mal das Skript welches ich hier gefunden habe. arduino-info - SmallSteppers (das letzte Beispiel):
Code:
#include <AccelStepper.h>
/*-----( Declare Constants and Pin Numbers )-----*/
#define FULLSTEP 4
#define HALFSTEP 8
// motor pins    HIER EINTRAGEN
#define motorPin1  4     // Blue   - 28BYJ48 pin 1
#define motorPin2  5     // Pink   - 28BYJ48 pin 2
#define motorPin3  6     // Yellow - 28BYJ48 pin 3
#define motorPin4  7     // Orange - 28BYJ48 pin 4
                        // Red    - 28BYJ48 pin 5 (VCC)
                        
// NOTE: The sequence 1-3-2-4 is required for proper sequencing of 28BYJ48
AccelStepper stepper1(FULLSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

void setup()
{
  //stepper1.setMaxSpeed(10000.0);
  stepper1.setAcceleration(50.0);
  stepper1.setSpeed(1000);
  stepper1.moveTo(2048);  // 1 revolution 
  

}


void loop()
{
  //Change direction at the limits
  if (stepper1.distanceToGo() == 0) 
    stepper1.moveTo(-stepper1.currentPosition());
    
  stepper1.run();

}

Die Motorpins richtig eintragen und schon fährt der Motor mit Beschleunigung hin und her... Mit der Speed im Setup kann man noch spielen, aber so wirklich steige ich grad nicht dahinter wie man das jetzt für dein Projekt nutzt.

Skript für den anderen Treiber kommt später noch.

Lieben Gruß
David
 
Ja kein Streß, genau die Frage stelle ich mir auch ständig: wie nutze ich das dann später, so ein Endschalter wäre bestimmt schon ne feine Sache.
Jetzt sind aber alle Pins belegt, ich habs endlich geschafft. Hoffe ich hab nichts vergessen.
Hab die letzten 2 Pins mit dem Reset und Power belegt.
Die anderen IRcodes habe ich auch eingetragen, da kam ich ganz schön ins schwitzen weil die IR danach nicht mehr ging, kp warum aber ich musste reichlich einträge
wieder löschen, dann ging wieder alles.
Belegt sind nun auch erst mal alle Tasten der IR, zwar teils doppelt aber ohne Belegung gings dann iwie auch nicht.
Das Keypad ist nun noch komplett frei, jemand ne IDEE? Tetris oder Tontauben schießen :lol:

Ich finds richtig Mega das alles läuft und vor allem in verhältnismäßig kurzer Zeit.
Die IR blockiert zwar immer noch bei falscher Eingabe aber ich sehe da keine Notwendigkeit, deshalb alle Tasten noch auf lang gedrückt und pulsierend zu proggen.

Boah ich glaube das ganze taktisch klug und optisch schön auf eine Platine zu löten wird auch noch ein Spaß.
Dafür werde ich mir auf jeden fall erst mal nen Bauplan zeichnen. :ugly:

PS: LEON hast du jetzt wenigsten was dabei gelernt?
 
Komm hier nur echt langsam voran...
Kannst du deinen Motor mal mit diesem Code testen ob das läuft? Der Motor müsste sich konstant in eine Richtung drehen. Die max Speed liegt bei mir zw. 800 und 900.
Code:
#include <AccelStepper.h>

AccelStepper stepper(8, 4, 6, 5, 7);  //Die erste Zahl nicht ändern!!! die letzten 4 sind die Motorpins mit dem bekannten dreher drin...
void setup()
{  
   stepper.setMaxSpeed(1000);

   stepper.setSpeed(900);	
}

void loop()
{  
   stepper.runSpeed();
}

Wenn man jetzt noch Platz für zwei Endanschläge hätte wäre damit die Motorgeschichte zum Teil gelöst.
Kannst du mir nochmal kurz ne Liste schicken was du alles am Arduino hängen hast? Eventl kann man da noch was auf den 74hc595 packen, wobei ich befürchte, dass das nicht geht.

Testscript für den anderen Treiber wäre das selbe wie oben, nur tauscht du Zeile 3 aus gegen,
Code:
AccelStepper stepper(AccelStepper::DRIVER,5,4);
Wie rum die beiden Pins gemeint sind weiß ich nimmer, ich glaube erst Step, dann Dir. Wenn der Treiber geht, dann hätteste 2 Pins frei.
Hier gibt es ne Skizze wie man alles anschließt, Pololu - A4988 Stepper Motor Driver Carrier
 
Zurück