Skaner

Zadaniem tego robota było przeskanowanie podanej kartki papieru formatu A4 i wyświetlenie wyników skanowania na ekranie LCD. Aby to osiągnąć musiałem skonstruować dwa mechanizmy:

  • Jeżdżący wózek z czujnikiem koloru do skanowania.
  • Wałek przesuwający kartkę

Najtrudniej skonstruować było wózek. Musiał jeździć dokładnie prosto, bez zacinania się i podskakiwania. Osiągnąłem to przez umieszczenie jego części w szynie, tak aby nie wypadał. Jak się później okazało taka konstrukcja zapewniała pożądaną stabilność czujnika koloru.

Wałek przesuwający został zrobiony z dwóch współosiowych kół połączonych bezpośrednio z silnikiem.

Jako że przy skanowaniu nie wymagana była precyzja, ale szybkość zdecydowałem się na rozdzielczość skanowania równą rozdzielczości ekranu kostki NXT. Skanowanie zajmuje kilkadziesiąt sekund, jednak okupione jest to bardzo małą czułością sensora. Skanowane obrazy musiały być duże i wyraźne, a wszystkie linie grube na około 1 cm. Efekty są dość zadowalające, co można zobaczyć na tym filmie.

Wideo

Galeria

Galeria 3D

Obrazy w tej galerii możesz oglądać jedynie przy użyciu specjalnych czerwono-niebieskich okularów. Można je nabyć w wielu sklepach internetowych za bardzo małe pieniądze.


Kod programu

//author: Krzysztof Kapusta, All rights reserved // SENSOR 1 - ColorSensor // MOTOR A - the shaft which moves a piece of paper // MOTOR B - the trolley with color sensor that scans task main() { SetSensor(S1, SENSOR_COLORFULL); const int LENGTH = 525; // degrees that the troller can move from left to right const int MAX_X = 100; // width of the screen const int MAX_Y = 64; // height of the screen ColorSensorReadType csr; csr.Port = S1; ClearScreen(); bool right = true; for (int y = MAX_Y-1; y&gt;=0; y--) { // for every row in the screen if (right) OnFwd(OUT_B, 80); // start moving the trolley right or left else OnFwd(OUT_B, -80); for (int x = 0; x&lt;MAX_X; x++) { // and for every point in the row SysColorSensorRead(csr); // read the color if (csr.Result == NO_ERR) if (csr.ColorValue == INPUT_BLACKCOLOR) if (right) PointOut(x, y); // and if the color is black and there were no errors put the pixel on the screen else PointOut(SZER-x+2, y); // the number +2 was working the best with my robot (theoretically it should be -1) if(right) { // then wait for the trolley to move to the next pixel float ang = ((1.0/MAX_X)+1)*x*LENGTH/MAX_X; while(MotorRotationCount(OUT_B) < ang) {} } else { float ang = ((1.0/MAX_X)+1)*(MAX_X-x-1)*LENGTH/MAX_X; while(MotorRotationCount(OUT_B) >= ang) {} } } Off(OUT_B); // turn off the trolley motor RotateMotor(OUT_A, -20, LENGTH/MAX_X*1.5); // and move the piece of paper forward (the number 1.5 helps to fit most of the image in the screen) right = !right; } while (!ButtonPressed(BTNCENTER, false)) {} // when the scanning ends the program should wait for pressing the center button (you can still see a scanned image) }

Pokaż/ukryj cały kod

Komentarze

someone same as solving the code error? Thank you

Dodane przez: jorge | 2017-10-17

Do you program that in c++ or in java?

Dodane przez: pulp fiction | 2017-10-17

bardzo fajne . Udostępnij instrukcje budowy.

Dodane przez: jaanonim | 2017-08-21

whats the trolley ?

Dodane przez: Efe Aksoy | 2017-07-31

And you do not know what is there an error?

Dodane przez: john | 2015-04-09

Zobacz wszystkie

Dodaj swój komentarz