PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro Helligkeitsbestimmung



Tom95
07.06.2012, 16:03
Hallo,
ich bin neu hier und habe schon ein Problem:
Bei einfachen Programmen hat alles geklappt nun will ich jedoch ne Sortiermaschine bauen.

Wie kann ich es machen, dass sich der Motor dreht, bis sich die Helligkeit des linken Fototransistors ändert. Dannach soll die Helligkeit ausglesen werden und je nach Helligkeit sich der Motor nach Links oder Rechts drehen. Ich habe vor allem Probleme mit dem 1. Teil. Also zu programmieren, dass sich der Motor dreht, bis sich die Helligkeit des 1. Fototransistors ändert. Am besten sollte dies änderung eine Spanne sein, also nicht nur ein einzelner Wert. (Dieser 1 Wert wird schnell vom Umgebungslicht verfälscht.). Meine Versuche führen einfach zu keinem Ergebnis.
Könnte mir mal jemand nen Ansatz dafür Posten.
Gruß
Tom

Crysers
07.06.2012, 16:52
Probier mal sowas:


unsigned int data[2]
while(1) {
LineData(data);
while (!((data[0]>"wert1") && (data[0]<"wert2"))) { // dabei soll Wert 1 und Wert 2 die Spanne darstellen
MotorDir(FWD,FWD);
MotorSpeed(SpeedLeft,SpeedRight);
}
}

Tom95
07.06.2012, 21:05
So mein jetziges Programm:

#include "asuro.h"

int main(void)
{
Init();

while(1)
{
unsigned int data[2]; //Initialisiert zwei Int-werte hintereinander
{
MotorDir(FWD,FWD);
MotorSpeed(0,240); //Abwerfen des Steines
Msleep(1900);
MotorSpeed(0,0);

while(1) {
LineData(data);
while (!((data[0]>90) && (data[0]<110))) // dabei soll Wert 1 und Wert 2 die Spanne darstellen
{
MotorDir(FWD,FWD);
MotorSpeed(240,0); //Bewegung des Förderbands
}


LineData(data[0]); //werte auslesen

if (data[0] >= 400)
{
MotorSpeed(240,0);
Msleep(10000);
}
else
{
MotorDir(RWD,FWD);
MotorSpeed(240,0);
Msleep(10000);
}





}
return 0;
}

Nur kommt in der Letzten Zeile 2 Fehlermeldungen, obwohl da nur "}" steht. Die Meldung lautet: ../Halbjahresprojekt.c:45: error: expected declaration or statement at end of input.

Dieses Programm soll eine Sortiermaschine steueren, welches Steine nach Farben sortiert. Zu erst wird der Stein abgeworfen, dann dreht sich das Förderband, bis sich die helligkeit ändert( also bis der stein unter dem Sensor liegt). Je nach Helligkeit soll dann der Stein nach links oder rechts transportiert werden. Dies wird dann immer wieder Wiederholt.

Was habe ich falsch gemacht bzw. kann ich noch verbessern?

Gruß Tom

Edit: Ich habs: Am Ende hat noch }} gefehlt.
Trotzdem Danke

radbruch
07.06.2012, 22:43
Hallo

Ich hab mal etwas an deinem Programm rumgefummelt:

// asuro steuert Sortieranlage

// https://www.roboternetz.de/community/threads/58103-Asuro-Helligkeitsbestimmung

#include "asuro.h"

unsigned int data[2]; //Initialisiert zwei Int-werte hintereinander

int main(void)
{
Init();

MotorDir(BREAK,FWD); //Abwerfen des Steines
MotorSpeed(0,240);
Msleep(1900);
MotorSpeed(0,0); // Motor abbremsen
Msleep(500);

StatusLED(YELLOW); //Bewegung des Förderbands
MotorDir(FWD,BREAK);
MotorSpeed(240,0);

do
LineData(data);
while ((data[0]>90) && (data[0]<110)); // solange Helligkeit zwischen 90 und 110

Msleep(100); // Gegenstand erkannt. Noch etwas weiterfahren (wegen Kante)...
LineData(data); // und erneut den Wert einlesen

if (data[0] >= 400) // heller als 399? Richtigen Gegenstand erkannt, weiterfördern
{
StatusLED(GREEN);
// MotorSpeed(240,0);
Msleep(10000);
}
else // falsche Farbe, zurückfördern
{
StatusLED(RED);
MotorSpeed(0,0);
Msleep(500);
MotorDir(RWD,BREAK);
MotorSpeed(240,0);
Msleep(10000);
}

MotorSpeed(0,0); // Band anhalten
while(1){StatusLED(RED); Msleep(100); StatusLED(OFF); Msleep(300);} // Programmende
return 0;
}(ungetestet)

Ich hoffe, dass funzt so.

Gruß

mic

Tom95
08.06.2012, 11:22
Danke für deine Hilfe. Am Ende des Programms blinkt mein Asuro nur grün mit der Status LED, warum beginnt das Programm nicht wieder von neuem?
Gruß
Tom

radbruch
08.06.2012, 12:06
Hallo Tom

Schön, wenn es halbwegs funktioniert. Allerdings sollte die StatusLED rot blinken. Das ist aber nicht weiter schlimm.

Das Programm beginnt deshalb nicht von vorne, weil ich doch gar nicht weiß, was du noch alles einbauen willst. Eigentlich ging es doch nur darum:

Könnte mir mal jemand nen Ansatz dafür Posten.

Gruß

mic

Tom95
08.06.2012, 12:30
Okay danke. Ich glaube die StatusLED blinkt deshalb rot, da ich sie vermutlich falschherum eingelötet habe. Also den Pol für Rot und grün vertauscht habe.

Funktioniert es so in der Schleife? Das komplimieren klappt, der Roboter mach hingegen nichts, nur die StatusLED ist rot.

// asuro steuert Sortieranlage

// https://www.roboternetz.de/community/threads/58103-Asuro-Helligkeitsbestimmung

#include "asuro.h"

unsigned int data[2]; //Initialisiert zwei Int-werte hintereinander

int main(void)
{
Init();

while(1);
{
MotorDir(BREAK,FWD); //Abwerfen des Steines
MotorSpeed(0,240);
Msleep(1900);
MotorSpeed(0,0); // Motor abbremsen
Msleep(500);

FrontLED(ON); //Beleuchtung an
StatusLED(YELLOW); //Bewegung des Förderbands
MotorDir(FWD,BREAK);
MotorSpeed(240,0);

do
LineData(data);
while ((data[0]>22) && (data[0]<220)); // solange Helligkeit zwischen 22 und 79

Msleep(100); // Gegenstand erkannt. Noch etwas weiterfahren (wegen Kante)...
LineData(data); // und erneut den Wert einlesen

if (data[0] >= 80) // heller als 399? Richtigen Gegenstand erkannt, weiterfördern
{
FrontLED(OFF);
StatusLED(GREEN);
MotorSpeed(240,0);
Msleep(5000);
}
else // falsche Farbe, zurückfördern
{
FrontLED(OFF);
StatusLED(RED);
MotorSpeed(0,0);
Msleep(500);
MotorDir(RWD,BREAK);
MotorSpeed(240,0);
Msleep(6000);
}

MotorSpeed(0,0); // Band anhalten
StatusLED(OFF);
} // Programmende
return 0;
}

Gruß

radbruch
08.06.2012, 13:50
while(1);
______^______
Das Semikolon ; muss weg.

Tom95
08.06.2012, 15:36
Danke, jetzt funktioniert's.
Die Dioden sind wie auf dem Bild installiert. Sind sie so vom außenlicht unabhänging? Oder soll ich oben noch ne Abdeckung drauf machen?
22538

Gruß
Tom