INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Projekt Sortiermaschine
05.04.2016, 19:44 (Dieser Beitrag wurde zuletzt bearbeitet: 05.04.2016 21:16 von derdemo.)
Beitrag #1
Question Projekt Sortiermaschine
Hallo Zusammen, Heart
Bin neu hier im Forum und wollte nun meinen ersten Eintrag scheiben.
Es handelt sich um ein Problem im Projekt einer Sortieranlage, welche über den Arduino gesteuert wird.

KonzeptzeichnungBlush

   
Prinzip
Becher mit den 3 unterschiedlichen Farben rot, blau und weiß laufen über ein Band.
Die erste Station liest die Farbe des Bechers aus. Der Arduino lässt dann den Becher an der jeweiligen Station ausschieben oder wie bei weiß durchfahren.

Schaltplan

   
Paint lässt Grüßen Big Grin

Nun habe ich einen Code geschrieben der auch fast funktioniert
Code:
// Libraries einbinden
#include <Wire.h>
#include "Adafruit_TCS34725.h"



// Color Sensor-Objekt initialisieren
// Parameter siehe: https://learn.adafruit.com/adafruit-color-sensors/program-it
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);

const int Pin2 =  2;
const int Pin3 =  3;
const int Pin4 =  4;
const int Pin5 =  5;



int PinState2 = HIGH;
int PinState3 = HIGH;
int PinState4 = HIGH;
int PinState5 = HIGH;

unsigned long previousMillis1 = 0;
unsigned long previousMillis2 = 0;
unsigned long previousMillis3 = 0;
unsigned long previousMillis4 = 0;

unsigned long infiniteinterval = 9999999999;

unsigned long interval1 = infiniteinterval;
unsigned long interval2 = infiniteinterval;
unsigned long interval3 = infiniteinterval;
unsigned long interval4 = infiniteinterval;



// setup() wird einmal beim Start des Arduino ausgeführt
void setup() {

pinMode(Pin2, OUTPUT);
pinMode(Pin3, OUTPUT);
pinMode(Pin4, OUTPUT);
pinMode(Pin5, OUTPUT);


// Serielle Kommunikation zur Ausgabe der Wert im seriellen Monitor
Serial.begin(9600);
// Überprüfen, ob Color Sensor sich auch zurückmeldet
if (tcs.begin()) {
// Alles OK
Serial.println("Sensor gefunden");
} else {
// Kein Sensor gefunden. Programm an dieser Stelle einfrieren
Serial.println("TCS34725 nicht gefunden ... Ablauf gestoppt!");
while (1); // Halt!
}
}

// loop() wird wiederholt, solange der Arduino läuft
void loop()
{
  unsigned long currentMillis1 = millis();
  unsigned long currentMillis2 = millis();
  unsigned long currentMillis3 = millis();
  unsigned long currentMillis4 = millis();
  
PinState2 = HIGH;
PinState3 = HIGH;
PinState4 = HIGH;
PinState5 = HIGH;

        //SENSOR AUSLESE
                   // Der Sensor liefert Werte für R, G, B und einen Clear-Wert zurück
                   uint16_t clearcol, red, green, blue;
                   float average, r, g, b;
                   delay(100); // Farbmessung dauert c. 50ms
                   tcs.getRawData(&red, &green, &blue, &clearcol);
                  
                   // Durchschnitt von RGB ermitteln
                   average = (red+green+blue)/3;
                  
                   // Farbwerte durch Durchschnitt,
                   // alle Werte bewegen sich jetzt rund um 1
                   r = red/average;
                   g = green/average;
                   b = blue/average;
                  
                   // Clear-Wert und r,g,b seriell ausgeben zur Kontrolle
                   // r,g und b sollten sich ca. zwischen 0,5 und 1,5
                   // bewegen. Sieht der Sensor rot, dann sollte r deutlich über 1.0
                   // liegen, g und b zwischen 0.5 und 1.0 usw.
                   Serial.print("\tClear:"); Serial.print(clearcol);
                   Serial.print("\tRed:"); Serial.print(r);
                   Serial.print("\tGreen:"); Serial.print(g);
                   Serial.print("\tBlue:"); Serial.print(b);
  

//ZEITSTATIONEN
  if (currentMillis1 - previousMillis1 >= interval1)
  {
    PinState2 = LOW;
    interval1=infiniteinterval;
  }

  if (currentMillis3 - previousMillis3 >= interval3)
  {
    PinState3 = LOW;
    interval3=infiniteinterval;
  }
  if (currentMillis2 - previousMillis2 >= interval2)
  {
    PinState3 = LOW;
    interval2=infiniteinterval;
  }


// ROT bei 1. Becher
   if ((r < 2) && (r > 1.3) && (g < 0.9) && (g > 0.5) && (b < 0.9) && (b > 0.5))
   {
   Serial.print("\tROT");
   previousMillis1 = currentMillis1;
   interval1=1000;
   }


//BLAU bei 1. Becher
   else if ((r < 0.99) && (r > 0.3) && (g < 1.1) && (g > 0.8) && (b < 1.8) && (b > 1.1) && (interval2 != 3000))
   {
  
   Serial.print("\tBLAU");
   previousMillis2 = currentMillis2;
   interval2=3000;
   }
  
  
//BLAU Bei 2. Becher
   else if ((r < 0.99) && (r > 0.3) && (g < 1.1) && (g > 0.8) && (b < 1.8) && (b > 1.1) && (interval2 == 3000))
   {
  
   Serial.print("\tBLAU");
   previousMillis3 = currentMillis3;
   interval3=3000;
   }


  
//WEIß/NICHTS
   else
   {
   Serial.print("\tDURCHLAUF");
   }
  
    
  
  
   digitalWrite(Pin2, PinState2);
   digitalWrite(Pin3, PinState3);
   digitalWrite(Pin4, PinState4);
   digitalWrite(Pin5, PinState5);
    
   // Zeilenwechsel ausgeben
   Serial.println("");
}

ProblemHuh
Wie man sehen kann liest der Arduino die Werte des Farbsensors aus und lässt je nach Wert einen Timer ablaufen bzw. bei Weiß keinen ablaufen, bis die Relaiskarte angesprochen wird und der Becher ausgestoßen wird.
Das funktioniert bis jetzt auch und auch, wenn zwei blaue Becher hintereinander kommen.

folgendes Problem stellt sich mir nun:
Der Sensor liefert in einem bestimmten Takt dauerhaft Werte.

Das sieht so aus:
Code:
Clear:704    Red:1.26    Green:0.85    Blue:0.89    DURCHLAUF
    Clear:664    Red:1.41    Green:0.79    Blue:0.80    ROT
    Clear:778    Red:1.44    Green:0.77    Blue:0.78    ROT
    Clear:583    Red:1.12    Green:0.89    Blue:0.99    DURCHLAUF
    Clear:650    Red:0.96    Green:0.94    Blue:1.10    BLAU
    Clear:750    Red:0.90    Green:0.95    Blue:1.15    BLAU
    Clear:726    Red:0.91    Green:0.94    Blue:1.15    BLAU
    Clear:615    Red:0.98    Green:0.92    Blue:1.10    BLAU
    Clear:532    Red:1.14    Green:0.88    Blue:0.98    DURCHLAUF
    Clear:680    Red:1.39    Green:0.79    Blue:0.82    ROT
    Clear:760    Red:1.44    Green:0.77    Blue:0.79    ROT
    Clear:597    Red:1.23    Green:0.85    Blue:0.93    DURCHLAUF
    Clear:706    Red:0.88    Green:0.92    Blue:1.20    BLAU
    Clear:825    Red:0.81    Green:0.94    Blue:1.26    BLAU
    Clear:827    Red:0.81    Green:0.94    Blue:1.25    BLAU
    Clear:833    Red:0.80    Green:0.94    Blue:1.26    BLAU
    Clear:661    Red:0.99    Green:0.91    Blue:1.10    DURCHLAUF
    Clear:737    Red:1.32    Green:0.81    Blue:0.88    ROT
    Clear:828    Red:1.39    Green:0.78    Blue:0.83    ROT
    Clear:646    Red:1.09    Green:0.88    Blue:1.04    DURCHLAUF
    Clear:843    Red:0.79    Green:0.94    Blue:1.27    BLAU
    Clear:903    Red:0.77    Green:0.94    Blue:1.29    BLAU
    Clear:925    Red:0.75    Green:0.94    Blue:1.31    BLAU
    Clear:864    Red:0.78    Green:0.94    Blue:1.29    BLAU
    Clear:638    Red:0.98    Green:0.91    Blue:1.11    BLAU
    Clear:763    Red:1.38    Green:0.79    Blue:0.83    ROT
    Clear:703    Red:1.30    Green:0.83    Blue:0.87    ROT
    Clear:814    Red:1.10    Green:0.93    Blue:0.97    DURCHLAUF
    Clear:1285    Red:0.99    Green:1.01    Blue:1.00    DURCHLAUF


wenn nun nur ein blauer Becher kommt werden beide Intervalle gestartet, obwohl es ja nur ein Becher ist. Dies hat zufolge, dass bei einem blauen Becher der Timer abläuft aber am Ende zwei mal der Pin 3 angesprochen wird.
Wie bekomme ich es nun hin, dass bei einem Becher auch wirklich nur ein Timer gestartet wird??? Huh
ich hoffe es gibt hier einige Leute, die mehr Ahnung haben als ich, aber ich bin zuversichtlich. Shy

EDIT: Extern verlinkte Bilder bitte in Zukunft DIREKT hier per Upload einbinden ! Wink Habe ich gerade für dich erledigt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.04.2016, 21:01
Beitrag #2
RE: Projekt Sortiermaschine
Ich versuche deinen Sketch zu verstehen, kann aber nicht nachvollziehen, warum ein blauer Becher 2 mal geprüft wird, der rote nur einmal. Ich vermute mal, darüber musst du nochmal nachdenken.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.04.2016, 14:07
Beitrag #3
RE: Projekt Sortiermaschine
(05.04.2016 21:01)hotsystems schrieb:  Ich versuche deinen Sketch zu verstehen, kann aber nicht nachvollziehen, warum ein blauer Becher 2 mal geprüft wird, der rote nur einmal. Ich vermute mal, darüber musst du nochmal nachdenken.
Spielt theoretisch noch keine Rolle erst, wenn die Anlage zusammengebaut wird.
Diese doppelt Überprüfung ist wie gesagt da, um einen geregelten Ablauf zu haben, wenn zwei gleichfarbige Becher hintereinander kommen.
Da der Rote Becher an erster Stelle ausgeworfen wird ist es wahrscheinlich nicht nötig eine doppelte Überprüfung einzubauen.
Wenn die Sortieranlage steht wird beim Feintuning und Kalibrieren dies noch einmal überprüft Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.04.2016, 14:56
Beitrag #4
RE: Projekt Sortiermaschine
(06.04.2016 14:07)Tizzle schrieb:  Spielt theoretisch noch keine Rolle erst, wenn die Anlage zusammengebaut wird.
Diese doppelt Überprüfung ist wie gesagt da, um einen geregelten Ablauf zu haben, wenn zwei gleichfarbige Becher hintereinander kommen.
Da der Rote Becher an erster Stelle ausgeworfen wird ist es wahrscheinlich nicht nötig eine doppelte Überprüfung einzubauen.
Wenn die Sortieranlage steht wird beim Feintuning und Kalibrieren dies noch einmal überprüft Smile

Aber das sollte er doch durch das "Zählen" erledigen können.
Ich vermute dadurch holst du dir den Fehler rein.

Ist denn der Abstand der Becher zueinander groß genug, um festzustellen, dass ein nächster Becher kommt?

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.04.2016, 21:33
Beitrag #5
RE: Projekt Sortiermaschine
(06.04.2016 14:56)hotsystems schrieb:  
(06.04.2016 14:07)Tizzle schrieb:  Spielt theoretisch noch keine Rolle erst, wenn die Anlage zusammengebaut wird.
Diese doppelt Überprüfung ist wie gesagt da, um einen geregelten Ablauf zu haben, wenn zwei gleichfarbige Becher hintereinander kommen.
Da der Rote Becher an erster Stelle ausgeworfen wird ist es wahrscheinlich nicht nötig eine doppelte Überprüfung einzubauen.
Wenn die Sortieranlage steht wird beim Feintuning und Kalibrieren dies noch einmal überprüft Smile

Aber das sollte er doch durch das "Zählen" erledigen können.
Ich vermute dadurch holst du dir den Fehler rein.

Ist denn der Abstand der Becher zueinander groß genug, um festzustellen, dass ein nächster Becher kommt?

solange eine Unterbrechung zwischen den beiden Bechern ist funktioniert alles.
Das Problem ist halt, dass bei nur einem Becher trotzdem zwei timer laufen, da Der Sensor nunmal in einem Gewissen Takt die Werte ausgibt.
Der Abstand ist demnach irrelevant solange es einen Anstand gibt.
Es funktioniert halt auch alles bis auf das Problem, das der Pin bei einem blauen Becher 2 mal auf High gesetzt wird. (bzw. hier auf LOW, da die Relaiskarte dies Umformt)Confused
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.04.2016, 08:57
Beitrag #6
RE: Projekt Sortiermaschine
Sorry, ich habe versucht, deinen Sketch zu verstehen, aber geht nicht.

Du solltest den ein wenig strukturieren, damit wir den besser verstehen.
Also Dinge die du aus der Loop startest, in Funktionen packen.
Pins, die bestimmten Arbeiten (z.B. OutputRot oder RelaisRot) zugewiesen sind, auch danach benennen. Dann ist das alles übersichtlicher.

So steige ich leider nicht durch.

Eine Vermutung:
Du setzt am Anfang der Loop alle "Pinstate auf HIGH", wenn die nicht auf Low gesetzt werden, passiert das, was du bemängelst.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Programmierer gesucht (einfaches Uni-Projekt) grt35a 2 275 12.08.2016 11:36
Letzter Beitrag: grt35a
  [Suche] Library Programmierer/in für privates Projekt avoid 8 578 19.05.2016 15:01
Letzter Beitrag: avoid
  Projekt Infotainmentsystem inschenieur 5 435 02.04.2016 16:11
Letzter Beitrag: rkuehle
Question Auto Projekt dglvnc 2 631 10.06.2015 15:09
Letzter Beitrag: gregors
  Arduino Mega-Projekt mit EEPROM auf Arduino Due portieren Foto-Ralf 17 3.144 16.03.2015 12:06
Letzter Beitrag: Foto-Ralf
  Arduino Projekt, Hilfe! maxime22 1 2.414 11.11.2013 19:48
Letzter Beitrag: Tobii

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste