Winkelberechnung mit Arduino UNO

Komischerweise habe ich den Fehler schon beim Teilen der Poti Einstellungen.

Hallo,

zeige mal bitte den lauffähigen Sketch der das Problem zeigt

Jetzt gehts. das mit dem 1* wars. Ich muss den Wert nur noch von 90° abziehen und der Winkel stimmt.

Danke danke für die Hilfe. Den Rest werde ich wohl auch noch schaffen. Händisch geht der Scanner ja. Nun muss ich mir überlegen, wie ich den Bogen in variablen Höhen konstruiere.

Moin moin aus HU.
Jetzt muss ich doch noch einmal Nerven.
Meine Stepper machen mit einer TR8 Gewindestange 2mm Höhe pro Umdrehung. Meine Potis ermitteln einen Wert von 0 bis 1023.

Der Potiwert soll die Höhe des zu scannenden Objekts angeben. Eine Umdrehung des Motors sind 6400 Steps. Wenn ich nun den Wert der Steps bei einer Höhe von zB. 1000 mm errechne, soll dann der Wert 1000* 6400/2 = 6400000 Steps betragen. Der Monitor zeigt mir aber einen kleineren Wert mit negativem Vorzeichen an.
Ist das nur ein Darstellungsproblem oder ein Rechenfehler.

Ohne einen aktuellen Stand Deines Sketches wird da keiner etwas sinnvolles sagen können.

Gruß Tommy

Meine Glaskugel zeigt: 16-Bit-Integer Überlauf, ist aber ziemlich verwaschen.

Ich habe long Variablen generiert, weil die Werte zu groß werden.

[
#define Poti 0                  // A0    Abort
#define Poti1 3                 // A3   CoolEn
#define Poti2 5                 // A5 separat angelötet
// --------------------PIN Benennung----------------------------------
int Kamera=10;                  // Kameraauslöser Servosteuerung alt Y Endstop
//int Servo2=11;                // frei                        alt Z endstop
int StepStpHoch=4;              // step Hoch                    alt step z
int StepStpDreh=3;              // Step Drehen  Dreehteller     alt step y 
int StepStpKipp=2;              // Step  Kippen                 alt step x  
int StepDirHoch=7;              // Die Hoch  Hoch               alt z Dir
int StepDirDreh=6;              // Drehteller                   alt y DIR
int StepDirKipp=5;              // Kippen                       alt x Dir
int StepAllEna=8;               // alle Stepper einschalten
int EndstopHoch=9;              // Endstop x Achse              alt Endstop X
int Start=15;                    // schwarz    A1              Hold
int TastePlusMinus=16;           // Gelb       A2               resum
int TasteHochtief=12;           // grün   Hoch/tief             alt enable spin
int TasteKippen=13;             // braun  Kippen                alt spin dir
//----------------------------Variablen----------------------------------
int Umdrehungssteps=6400;                 //6443 Umdrehungen Teller hier 2 x 360°  12886
int Tempo=10;                   // Umdrehungsgeschwindigkeit
int Hub=1;                      //Hubgeschwindigkeit
int Kipp=3;                     //Kippgeschwindigkeit
int Klick=0;
int Servopause=1500;            //Zeit für die Einstellung des Servos auf Klick
int Fotomenge=0;                // Fotos pro Umdrehung  
int Speicherpause=3500;         //Die Zeit. die ein Foto digital abgespeichert wird
int Bildmenge=0;                // bildmenge pro Umdrehung waehlen
int Hoehe = 0;                  // Hoehe des Modells
int Ebene = 0;                  //Fotoebenen
int Drehsegment=0;              // Menge der Schritte pro Foto
int Step =0;                    //Umdrehungszähler
float Winkel=0;
long Stepshoehe=0;              //Steps der Höhe
long Stepsentfernung = 0;       // Steps der Entfernung
long Kippwinkel = 0;            //Kamera kippen





void setup()                           

{
 Serial.begin(9600);
 pinMode(Poti,INPUT);             
 //--------------------Ausgabe/ Lesen/Schreiben--------------------------
  // Pin Funktion einstellen
  pinMode(Kamera, OUTPUT);        // rRXals digital für Kamerasteuerung
  pinMode(1, OUTPUT);             //TX als digital-   für Kamerasteuerung  
  pinMode(StepAllEna, OUTPUT);
  pinMode(StepDirHoch, OUTPUT);
  pinMode(StepStpHoch, OUTPUT); 
  pinMode(StepDirDreh, OUTPUT); 
  pinMode(StepStpDreh, OUTPUT);  
  pinMode(StepDirKipp, OUTPUT);  
  pinMode(StepStpKipp, OUTPUT); 
  pinMode(EndstopHoch,INPUT);      // Endstop für Spindel unten  alt X Endstop   
  pinMode(Start,INPUT);            // Start Knopf      alt Y Endstop
  pinMode(TastePlusMinus,INPUT);   // Plus Minus      alt Z endstop
  pinMode(TasteHochtief,INPUT);    // Hoch/tief       alt enable spin
  pinMode(TasteKippen,INPUT);      // Kippen          alt spin dir

  // Pullup Widerstände für die Tasten einschalten
  pinMode(EndstopHoch, INPUT_PULLUP);       //9 Pullup ein 
  pinMode(Start, INPUT_PULLUP);             //10 Pullup ein 
  pinMode(TastePlusMinus, INPUT_PULLUP);    //11 Pullup ein 
  pinMode(TasteHochtief,INPUT_PULLUP);      //12 Pullup ein 
  pinMode(TasteKippen, INPUT_PULLUP);       //13 Pullup ein  
  digitalWrite(StepAllEna,HIGH);            // set Ena aus 

}
//---------------------------------Programmablauf----------------------
void loop(){ 

//.................Anzeigen der Potieinstellungen..............
  int Schleifer =  analogRead(Poti)+10;     //+10));//10);        // Für Fotomenge
  int Schleifer1 = analogRead(Poti1);     // für Objekzhoehe
  int Schleifer2 = analogRead(Poti2);     // für objektentfernung
  Stepshoehe = Schleifer1 * 3200;            // 1mm Höhe je Analog Wert
  Stepsentfernung = Schleifer2 *3200;       // 1mm Entfernung je Analog Wert
  
  
  
  
  Serial.print("Hoehe: ");            //Anzeigen der Scannhöhe
  Serial.print("Steps ");            //Anzeigen der Scannhöhe
   Serial.print(Stepshoehe);              //Anzeigen der Scannhöhe
  Serial.print(" "); 
  Serial.print(Schleifer1);              //Anzeigen der Scannhöhein mm
  Serial.print("mm  ");

  Serial.print("Entfern: ");            //Anzeigen der Entfernung
  Serial.print(" Steps= ");
  Serial.print(Stepsentfernung);              //Anzeigen der Entfernung
   Serial.print(" ");
  Serial.print(Schleifer2); 
  Serial.print(" mm");



/code]
  int Schleifer1 = analogRead(Poti1);     // für Objekzhoehe
  int Schleifer2 = analogRead(Poti2);     // für objektentfernung
    Stepshoehe = Schleifer1 * 3200;            // 1mm Höhe je Analog Wert
    Stepsentfernung = Schleifer2 * 3200;       // 1mm Entfernung je Analog Wert

Wie wäre es mit

  Stepshoehe = Schleifer1 * 3200L;            // 1mm Höhe je Analog Wert
  Stepsentfernung = Schleifer2 * 3200L;       // 1mm Entfernung je Analog Wert

Hi

Warum L und nicht UL?
(werde negative Werte benötigt?)

MfG

Danke Danke. Das hat geholfen. Da wäre ich im Leben nicht drauf gekommen. Jetzt beim Nachlesen ist das klar.
Ja, es kommen auch negative Werte vor, wenn der Schlitten unter das Objekt fährt.

postmaster-ino:
Warum L und nicht UL?
(werde negative Werte benötigt?)

Keine Ahnung ob die benötigt werden, das Programm ist jedenfalls dafür ausgelegt

long Stepshoehe=0;              //Steps der Höhe
long Stepsentfernung = 0;       // Steps der Entfernung
  int Schleifer1 = analogRead(Poti1);     // für Objekzhoehe
  int Schleifer2 = analogRead(Poti2);     // für objektentfernung
  Stepshoehe = Schleifer1 * 3200;            // 1mm Höhe je Analog Wert
  Stepsentfernung = Schleifer2 *3200;       // 1mm Entfernung je Analog Wert

Da würde ein UL doch eher komisch wirken und u.U. Warnungen hervorrufen, da finde ich

 Stepshoehe = Schleifer1 * 3200L;            // 1mm Höhe je Analog Wert
  Stepsentfernung = Schleifer2 * 3200L;       // 1mm Entfernung je Analog Wert

logisch passender.

Mal zur Erklärung, was ich vor habe.
Das Objektive wird auf die Mitte des Objektes ausgerichtet, Dann fahre ich auf die halbe Höhe runter + 5cm.Dort den Winkel des Fotoapparates einstellen. Das Objekt macht eine 360° Umdrehung und dort werden dann die vordefinierten Fotomengen gemacht Danach fährt der Schlitten eine Strecke nach oben. Wie viel, weiß ich noch nicht. Dann wieder eine Fotosequenz. Das geht dann bis auf 5cm über das Objekt.
Händisch geht das ja schon alles, aber automatisch ist besser. Zudem will ich auch noch ein Display einbauen, wo ich die Höhe, Entfernung und Bildermenge ablesen kann. Mit dem Editor ist das lästig und nicht autonom.
Da werde ich Euch sicherlich noch mal nerven, wenn ich das nicht nachgelesen bekomme. Ich muss dafür wohl eine LIB einbinden wie bei meinem 3D Drucker. Schauen wir mal.

Hallo fridi,
vielleicht steht es ja schon irgendwo, aber bei soviel Formeln krieg ich eine Leseschwäche. Vermute ich richtig, dass Du Photogrammetrie vereinfachen willst ? Als glücklicher Besitzer von Agisofts PhotoScan habe ich mich bisher begnügt meine "Fotos" aus GoogleEarthPro zu beziehen, weil GE in meiner Gegend dazu geeignete Luftaufnahmen bietet.
Bis 500 Bilder habe ich schon zu einem druckbaren Objekt verarbeitet.

Bei kleinen Objekten, für die Dein Projekt für mich taugen würde, muss ich noch an der Aufnahmetechnik basteln. Da ich noch absoluter Arduino-Neuling bin hatte ich bisher an eine rein mechanische Lösung per Malteserkreuz gedacht. Da könnte es aber Probleme geben, weil sich die Bilder ja weder zu viel noch garnicht überlappen dürfen. Wer wissen will was ich meine, der findet bei Agisoft einschließlich Demo-Version alles Nötige (ausgenommen Speicherung als STL, OBJ usw. - das bleibt der Bezahlversion vorbehalten).

Auf alle Fälle bin ich auf Deine Erfolgsberichte gespannt !

p.s.: mein Drucker ist ein RF1000; da kämpfe ich gerade darum, neue Firmware aufzuspielen.

Moin Extruder. Ich bin auch hier drin. Low Budget 3D Scan | Facebook
Agisoft habe ich mir auch gekauft. Ist die beste Lösung. Alles in einem. Meine Scanns funzen händisch. Dh, ich stelle den Winkel und die Höhe händisch mit den Steppern ein und der Scann in der Ebene läuft automatisch. Ich meine, dich auch in diesem Forum schon gelesen zu haben.

Was ich jetzt festgestellt habe, ist, dass ich mit dem Uno an die PIN Grenzen komme. Ich werde jetzt auf den MEGA 2560 ausweichen Die sind Pin kompatibel.. Habe davon noch einige liegen. Das Einbinden des Displays scheint nicht so schwierig zu sein, nach dem, was ich nachgelesen habe.

fridi:
... Ich meine, dich auch in diesem Forum schon gelesen zu haben.

Ausgeschlossen - war mein erster Beitrag hier. Habe aber wohl richtig geraten.
Bin meistens hier : http://3d-drucker-community.de/ - da wird man zuverlässig über neue Beiträge informiert.
Dass hier die IP aller Welt preisgegeben wird ist ja ein Unding. Da werde ich mich in Zukunft lieber auf´s Lesen beschränken.

P_Extruder:
Dass hier die IP aller Welt preisgegeben wird ist ja ein Unding. Da werde ich mich in Zukunft lieber auf´s Lesen beschränken.

Dir ist schon aufgefallen, daß Du angemeldet nur Deine eigene IP siehst, die eh ÜBERALL mitgeloggt wird, egal wo im Netz?!

Gruß André

SpaghettiCode:
Dir ist schon aufgefallen, daß Du angemeldet nur Deine eigene IP siehst, die eh ÜBERALL mitgeloggt wird, egal wo im Netz?!

Gruß André

Die Frage wäre, ob ich alleine meine IP sehe und zu welchem Zweck.

Mich selbst interessiert diese IP nicht, weil sie dynamisch wechselt.

Ob jetzt irgendwer die IP solange missbrauchen kann, solange ich Online bin (also nicht nur hier im Forum), das entzieht sich meiner Kenntnis - macht aber ein ungutes Gefühl.

Wenn Kenntnis durch Gefühl ersetzt wird, ist das immer ungut.

Die IP siehst nur Du im Forum öffentlich. Bei den anderen steht logged.

Wenn Du Angst hast, dass Deine IP missbraucht wird, hilft Knipex an allen Leitungen.

Gruß Tommy

Tommy56:
Wenn Kenntnis durch Gefühl ersetzt wird, ist das immer ungut.

Gruß Tommy

Ist doch gut, dass ich das Gefühl habe, dass das Ironie sein soll ?

Dass Forumsbetreiber die IP in Erfahrung bringen können weiß ich seit ein Webmaster mal einem Stänkerer erlärte, dass er soviel verschiedene Nicknames verwenden kann wie er will, solange die IP immer die selbe ist.

Ich selbst hatte auf meiner Webseite mal ein Plugin installiert, von dem ich auch sowas erwartete. Angezeigt hat es mir dann allerdings auch immer nur meine eigene IP; war also nutzlos für mich.

Tja, und ich beurteile solche Kommentare auch vorzugsweise danach, was verschwiegen wird : in diesem Fall also der Zweck der Anzeige.
Da schweigt mein Gefühl leider :confused:

Hi

Diese Anzeige soll DIR zeigen, daß DU mit Deiner IP geloggt bist - wenn Du hier Mist baust, ist ganz schnell klar, WO Du gesessen hast und kurz darauf, durch die Herren in Grün ... äh, jetzt wohl eher Blau-Weiß, Wer Du wirklich bist.

Mehr ist's nicht.

Je nach Alter haben 'Sie' kurz davor Deinen Papa im Visier - da Ihm der Anschluß gehört.

Lasse Dir von Einem erzählen, Der eine eigene Seite über Jahre am Netz hatte - die Nutzer-Identifikation kann man auch über die IP machen - wenn Du ganz frisch im Geschäft bist, machst Du Das auch so.
Spätestens, wenn zwei User von gleichen Einwahl-Punkt kommen, ist Deine ganze Prüferei nämlich durchgefallen - Multi-Account erkannt, wo gar Keiner ist.

Wenn Du Mal auf Deine IP und auf mein 'Logged' klicken willst?
Für ganz Mutige gibt's noch wieistmeineip.de
(dort siehst Du dann auch, mit welchem Browser Du unterwegs bist - also so ziemlich ALLE Daten, Die Du selber ins Netz raus posaunst)

Also auch nur Zeug, Was Du eh JEDEM sendest, Dessen Seite Du besuchst.

MfG