Hoe kan ik een IR reflectance sensor array programmeren??

Hey,

Ik moet op school een arduino leonardo robot programmeren voor mijn project maar zit een beetje vast, ik heb namelijk niet zo veel uitleg over de arduino gehad en toch moet ik er een programmeren. :cold_sweat: En ik zou graag willen weten hoe ik de robot kan programmeren zodat hij een lijn volgt. Ik heb een voorbeeld programma gevonden en kan er niet zo veel aan uit en het liefst van al wil ik weten hoe ik de robot laat stoppen als de twee sensoren op het zelfde moment een lijn tegenkomen.

mvg
gokhan

Zal aan mij liggen, maar het is volgens mij de bedoeling van onderwijs dat de studenten zelfstandig onderzoek plegen en dingen uitzoeken..... En dan hier vragen voor de oplossing lijkt mij de verkeerde weg.......

Hey,

Was het maar zo simpel. Ik heb nooit arduino geprogrammeerd en op school heb ik het ook nooit gehad en mijn leerkracht kent er zelf niks van dan moet je ook niet verwachten dat ik een,twee,drie iets kan programmeren het is ook de bedoeling dat wij op school daar tenminste iets of wat van krijgen. Ze duwen het gewoon in ons pollen en los het op zonder enig kennis. Ik ben al blij dat mijn robot een lijn kan volgen dankzij een voorbeeld programma dat ik heb gevonden. Er zijn leerkrachten die er iets van kennen en zelfs zij zijn geschokt zijn dat ze zomaar zoiets in uw pollen duwen zonder enig kennis over te hebben gehad. Mijn broertje volgt zelf ICT en zelfs hij zegt dat het moeilijk is om zo iets programmeren zonder enig kennis en ik zelf volg elektromechanica.

mvg
gokhan

#include <QTRSensors.h>
#include <ZumoReflectanceSensorArray.h>

/*
This example is designed to be run an Arduino that is connected to a Zumo
Reflectance Sensor Array through a Zumo Shield.

The setup phase of this example calibrates the sensor for ten seconds and
turns on the pin 13 LED while calibration is going on. During this phase,
you should expose each reflectance sensor to the lightest and darkest
readings they will encounter. For example, if you are making a line
follower, you should slide the sensors across the line during the
calibration phase so that each sensor can get a reading of how dark the
line is and how light the ground is. Improper calibration will result in
poor readings. If you want to skip the calibration phase, you can get the
raw sensor readings (pulse times from 0 to 2500 us) by calling
reflectance.read(sensorValues) instead of
reflectance.readLine(sensorValues).

The loop function reads the calibrated sensor values. It also uses the
values to estimate the position of a line, in case you are using the Zumo
for line following. It prints the sensor values to the serial monitor as
numbers from 0 (maximum reflectance) to 1000 (minimum reflectance) followed
by the estimated location of the line as a number from 0 to 5000. A line
position of 1000 means the line is directly under sensor 1, 2000 means
directly under sensor 2, etc. 0 means the line is directly under sensor 0
or was last seen by sensor 0 before being lost. 5000 means the line is
directly under sensor 5 or was last seen by sensor 5 before being lost.
*/

ZumoReflectanceSensorArray reflectanceSensors;

// Define an array for holding sensor values.
#define NUM_SENSORS 6
unsigned int sensorValues[NUM_SENSORS];

void setup()
{
reflectanceSensors.init();

delay(500);
pinMode(13, OUTPUT);
digitalWrite(13, HIGH); // turn on LED to indicate we are in calibration mode

unsigned long startTime = millis();
while(millis() - startTime < 10000) // make the calibration take 10 seconds
{
reflectanceSensors.calibrate();
}
digitalWrite(13, LOW); // turn off LED to indicate we are through with calibration

// print the calibration minimum values measured when emitters were on
Serial.begin(9600);
for (byte i = 0; i < NUM_SENSORS; i++)
{
Serial.print(reflectanceSensors.calibratedMinimumOn*);*

  • Serial.print(' ');*

  • }*

  • Serial.println();*

  • // print the calibration maximum values measured when emitters were on*

  • for (byte i = 0; i < NUM_SENSORS; i++)*

  • {*
    _ Serial.print(reflectanceSensors.calibratedMaximumOn*);_
    _
    Serial.print(' ');_
    _
    }_
    _
    Serial.println();_
    _
    Serial.println();_
    _
    delay(1000);_
    _
    }_
    void loop()
    _
    {_
    _
    // read calibrated sensor values and obtain a measure of the line position._
    _
    // Note: the values returned will be incorrect if the sensors have not been properly*_
    * // calibrated during the calibration phase.*
    * unsigned int position = reflectanceSensors.readLine(sensorValues);*
    * // To get raw sensor values instead, call: *
    * //reflectanceSensors.read(sensorValues);*
    * for (byte i = 0; i < NUM_SENSORS; i++)
    _
    {_
    _ Serial.print(sensorValues);
    Serial.print(' ');
    }
    Serial.print(" ");
    Serial.println(position);*_

* delay(250);*
}
Dit is de programmatie die ik heb en ik moet er alleen nog toevoegen hoe ik de robot laat stoppen als die twee sensoren op het zelfde moment een lijn detecteren.
mvg
gokhan19

Hoi gokhan19, welkom.

AUB eerst even de forum gebruiksaanwijzing (klik !) lezen, en dat ook te volgen.
Dus ook wanneer je code plaatst, deze in [code] [/code] tags te zetten.

Ik zal wel iets niet door hebben, maar ik zie in de code die je geplaatst hebt nergens iets staan over het aansturen van motoren.
Het is niet zo heel ingewikkeld om iets anders te doen als er twee lijnen tegelijkertijd gezien worden.
Als je de code plaatst die nu in je robot zit, kan er vast wel iemand een hint geven over hoe je dit zou kunnen aanpakken.
De oplossing moet je zelf bedenken en uitwerken, want anders leer je er niets van en het is nou juist de bedoeling dat je hier leert.

ik moest ook even puzzelen hoor, je ziet een lijn door het verschil in tijd die het kost voordat de phototransistor aan gaat.

dus als je op een lijn staat is er een sensor die afwijkt van de rest.
als er twee lijnen onder door lopen dan zie je er dus 2 of meer die anders zijn.
hou ruime marges aan, ik zou bijna zeggen deel minimum en max in drie delen zodat het midden dus twijfel niet gezien wordt.
je kunt nu dus gewoon zeggen als er twee in de buurt van max zijn dan twee lijnen etc.

als het werkt kun je zelfs een soort barcode naast je lijn zetten om een positie te zien.
en dan kun je dus een puzzel maken en door het plakken van wzwarte vlakken bepalen welke kant de rover heengaat.

wat in jouw code staat is alleen het calibreren van de array.
lees de handleiding van de library door, dat zal je helpen.

Merci voor de tips kan het goed gebruiken.

en natuurlijk mag je vragen stellen, nico zal niet gelijk antwoord geven, want (en hij heeft gelijk het is jullie die er wat van moeten leren.

Ik weet het maar als de tijd begint te dringen begin je wel raadeloos te worden daarom dat ik misschien iets of wat hulp kon vragen op de forum. Tis gewoon niet simpel om aan zo iets te beginnen zonder enig uitleg en kennis ervan.

Ik weet niet welk onderwijs het betreft, maar ik begrijp iets niet.... Er wordt een opdracht gegeven door een docent.... Die opdrachten worden door docenten verzonnen.... Dus hoe kan een docent vervolgens zeggen dat hij van niets weet. Wat overigens weer iets zegt over de kwaliteit van de docent..... Een opdracht die zomaar uit de blauwe hemel komt vallen.....

en ben je er nu achter hoe de lijn gezien wordt en waarom de robot een richting opgaat, als er een andere sensor de lijn ziet.

Heb jij nooit zulke docenten gehad, Nico ?

Die, die je na een toets om de oren kunt slaan met verkeerde beoordelingen doordat ie aannam dat een bepaald antwoord correct was (maar het in werkelijkheid dus net ff anders zat, door een enkel woord in de vraag), en daarop het antwoord van de hele groep goed rekende maar dat van jou niet ?
Ik dus wel.
Het cijfer voor die toets was gebaseerd op het gemiddelde van de klas, en daar kwam een andere fout uit.
Want een 11 kon niet gegeven worden.
Die docent vond mij niet meer zo sympathiek, maar ik weet niet of dat daarna pas ontstaan is.

@Mas: Nope.... Wel eens een verschil van mening gehad en de discussie aangegaan. Soms mijn gelijk gekregen en soms niet. Cést la vie. Maar het ging meestal om 8-10 dus maakte nooit zoveel uit :grin: Wel ooit eens een vraag gehad bij een van de examens Avond HEAO over Cobol of iets goed of fout was. Het antwoord was niet netjes maar wel goed.... :grin:
Waar ik mij een beetje aan stoor is mensen die het altijd "overkomt" dat ze iets niet gehad hebben en dan tot de ontdekking komen dat "Google is not your Friend".
Ik ben ook wel eens naar de directie gestapt omdat er onterechte zaken plaatsvinden. En ook nu zijn daar nog steeds protocollen voor. Er is niets in deze wat de student tegenhoud om formeel protest aan te tekenen (Oh wat genoot ik van de bezetting van het Maagdenhuis... eindelijk na 40 jaar weer eens mensen die durven voor hun rechten op te komen...).
Dit hele verhaal komt mij erg ongeloofwaardig over..... Een zin als deze

k heb namelijk niet zo veel uitleg over de arduino gehad en toch moet ik er een programmeren.

Is alle reden om door te vragen als je iets niet snapt of tijd en energie te steken om meer kennis op te bouwen. Dat noemen ze studeren.... Ik zie al jaren de kwaliteit van de studenten gemiddeld teruglopen.... Ik begrijp nu wel waarom.....