{"id":2850,"date":"2025-06-16T12:26:33","date_gmt":"2025-06-16T11:26:33","guid":{"rendered":"https:\/\/www.newstem-kutina.info\/?page_id=2850"},"modified":"2025-06-20T09:57:26","modified_gmt":"2025-06-20T08:57:26","slug":"edukacija-robotike-stem-moslavina-2025","status":"publish","type":"page","link":"https:\/\/www.newstem-kutina.info\/en\/edukacija-robotike-stem-moslavina-2025\/","title":{"rendered":"Edukacija robotike &#8211; Stem moslavina 2025"},"content":{"rendered":"<h2 class=\"wp-block-heading\">ESP 32 &#8211; Kontroler<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p><a href=\"https:\/\/hr.szks-kuongshun.com\/info\/mastering-the-esp32-a-comprehensive-guide-88876427.html\">https:\/\/hr.szks-kuongshun.com\/info\/mastering-the-esp32-a-comprehensive-guide-88876427.html<\/a><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"ast-oembed-container\" style=\"height: 100%;\"><iframe loading=\"lazy\" title=\"Arduino To ESP32: How to Get Started!\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/RiYnucfy_rs?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Kako kora\u010dni motor radi:<\/h2>\n\n\n\n<p><a href=\"https:\/\/cnc-centar.ba\/aktuelnosti\/sta-je-step-koracni-motor\/\">https:\/\/cnc-centar.ba\/aktuelnosti\/sta-je-step-koracni-motor\/<\/a><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"ast-oembed-container\" style=\"height: 100%;\"><iframe loading=\"lazy\" title=\"How does a Stepper Motor work?\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/eyqwLiowZiU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Simulator za stepper motore:<\/h2>\n\n\n\n<p><a href=\"https:\/\/wokwi.com\/projects\/433915938304722945\">https:\/\/wokwi.com\/projects\/433915938304722945<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const int dirPin = 4;\nconst int stepPin = 5;\nconst int stepsPerRevolution = 200;\n \nvoid setup()\n{\n  \/\/ Declare pins as Outputs\n  pinMode(stepPin, OUTPUT);\n  pinMode(dirPin, OUTPUT);\n}\nvoid loop()\n{\n  \/\/ Set motor direction clockwise\n  digitalWrite(dirPin, HIGH);\n \n  \/\/ Spin motor slowly\n  for(int x = 0; x &lt; stepsPerRevolution; x++)\n  {\n    digitalWrite(stepPin, HIGH);\n    delayMicroseconds(2000);\n    digitalWrite(stepPin, LOW);\n    delayMicroseconds(2000);\n  }\n  delay(1000); \/\/ Wait a second\n  \n  \/\/ Set motor direction counterclockwise\n  digitalWrite(dirPin, LOW);\n \n  \/\/ Spin motor quickly\n  for(int x = 0; x &lt; stepsPerRevolution; x++)\n  {\n    digitalWrite(stepPin, HIGH);\n    delayMicroseconds(1000);\n    digitalWrite(stepPin, LOW);\n    delayMicroseconds(1000);\n  }\n  delay(1000); \/\/ Wait a second\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><div class=\"crayon-pre\" style=\"font-size: 14px !important; line-height: 22px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;\"><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-1\"><span class=\"crayon-m\">const<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">int<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">dirPin<\/span><span class=\"crayon-h\"> <\/span>=<span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">2<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-2\"><span class=\"crayon-m\">const<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">int<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">stepPin<\/span><span class=\"crayon-h\"> <\/span>=<span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">3<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-3\"><span class=\"crayon-m\">const<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-t\">int<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">stepsPerRevolution<\/span><span class=\"crayon-h\"> <\/span>=<span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">200<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-4\">&nbsp;<\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-5\"><span class=\"crayon-t\">void<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">setup<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-6\"><span class=\"crayon-sy\">{<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-7\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-c\">\/\/ Declare pins as Outputs<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-8\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-e\">pinMode<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">stepPin<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">OUTPUT<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-9\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-e\">pinMode<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">dirPin<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">OUTPUT<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-10\"><span class=\"crayon-sy\">}<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-11\"><span class=\"crayon-t\">void<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-e\">loop<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-12\"><span class=\"crayon-sy\">{<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-13\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-c\">\/\/ Set motor direction clockwise<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-14\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-e\">digitalWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">dirPin<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">HIGH<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-15\">&nbsp;<\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-16\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-c\">\/\/ Spin motor slowly<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-17\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-st\">for<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-t\">int<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">x<\/span><span class=\"crayon-h\"> <\/span>=<span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">x<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-h\">&lt;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">stepsPerRevolution<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">x<\/span>++<span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-18\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">{<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-19\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">digitalWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">stepPin<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">HIGH<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-20\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">delayMicroseconds<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">2000<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-21\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">digitalWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">stepPin<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">LOW<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-22\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">delayMicroseconds<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">2000<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-23\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">}<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-24\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-e\">delay<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">1000<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-c\">\/\/ Wait a second<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-25\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-26\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-c\">\/\/ Set motor direction counterclockwise<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-27\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-e\">digitalWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">dirPin<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">LOW<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-28\">&nbsp;<\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-29\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-c\">\/\/ Spin motor quickly<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-30\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-st\">for<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-t\">int<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">x<\/span><span class=\"crayon-h\"> <\/span>=<span class=\"crayon-h\"> <\/span><span class=\"crayon-cn\">0<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">x<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-h\">&lt;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">stepsPerRevolution<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">x<\/span>++<span class=\"crayon-sy\">)<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-31\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">{<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-32\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">digitalWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">stepPin<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">HIGH<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-33\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">delayMicroseconds<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">1000<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-34\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">digitalWrite<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-i\">stepPin<\/span><span class=\"crayon-sy\">,<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-i\">LOW<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-35\"><span class=\"crayon-h\">&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span class=\"crayon-e\">delayMicroseconds<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">1000<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-36\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-sy\">}<\/span><\/div><div class=\"crayon-line\" id=\"crayon-684fd885c303b731042519-37\"><span class=\"crayon-h\">&nbsp;&nbsp;<\/span><span class=\"crayon-e\">delay<\/span><span class=\"crayon-sy\">(<\/span><span class=\"crayon-cn\">1000<\/span><span class=\"crayon-sy\">)<\/span><span class=\"crayon-sy\">;<\/span><span class=\"crayon-h\"> <\/span><span class=\"crayon-c\">\/\/ Wait a second<\/span><\/div><div class=\"crayon-line crayon-striped-line\" id=\"crayon-684fd885c303b731042519-38\"><span class=\"crayon-sy\">}<\/span><\/div><\/div><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Izrada robota kontroler i stepper motor:<\/h2>\n\n\n\n<p><a href=\"https:\/\/how2electronics.com\/control-stepper-motor-with-a4988-driver-arduino\/\">https:\/\/how2electronics.com\/control-stepper-motor-with-a4988-driver-arduino\/<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Instalacija kontrolera:<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-random-nerd-tutorials wp-block-embed-random-nerd-tutorials\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"qyNGga9iKN\"><a href=\"https:\/\/randomnerdtutorials.com\/installing-the-esp32-board-in-arduino-ide-windows-instructions\/\">Installing the ESP32 Board in Arduino IDE (Windows, Mac OS X, Linux)<\/a><\/blockquote><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;Installing the ESP32 Board in Arduino IDE (Windows, Mac OS X, Linux)&#8221; &#8212; Random Nerd Tutorials\" src=\"https:\/\/randomnerdtutorials.com\/installing-the-esp32-board-in-arduino-ide-windows-instructions\/embed\/#?secret=8vXmON0p3r#?secret=qyNGga9iKN\" data-secret=\"qyNGga9iKN\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Pokretanje robota<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;AccelStepper.h&gt;\n\n\/\/ Pinovi za prvi motor\n#define dirPin1 25\n#define stepPin1 26\n\n\/\/ Pinovi za drugi motor\n#define dirPin2 27\n#define stepPin2 14\n\n\/\/ Tip drajvera (1 = DRIVER)\n#define motorInterfaceType 1\n\n\/\/ Kreiranje objekata za oba motora\nAccelStepper motor1(motorInterfaceType, stepPin1, dirPin1);\nAccelStepper motor2(motorInterfaceType, stepPin2, dirPin2);\n\nvoid setup() {\n  \/\/ Postavi maksimalnu brzinu za oba motora\n  motor1.setMaxSpeed(1000);\n  motor2.setMaxSpeed(1000);\n\n  \/\/ Postavi istu brzinu naprijed za oba motora\n  motor1.setSpeed(300);\n  motor2.setSpeed(300);\n}\n\nvoid loop() {\n  \/\/ Pokreni oba motora unaprijed\n  motor1.runSpeed();\n  motor2.runSpeed();\n}\n<\/code><\/pre>\n\n\n\n<p>Kretanje robota i skretanje<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;AccelStepper.h&gt;\n#include &lt;math.h&gt;\n\n\/\/ Motor pinovi i postavke\n#define dirPinLeft 25\n#define stepPinLeft 26\n#define dirPinRight 27\n#define stepPinRight 14\n#define motorInterfaceType 1\n\nAccelStepper motorLeft(motorInterfaceType, stepPinLeft, dirPinLeft);\nAccelStepper motorRight(motorInterfaceType, stepPinRight, dirPinRight);\n\n\/\/ Parametri robota\nconst float promjerKotaca = 6.4; \/\/ cm\nconst float opsegKotaca = 3.1416 * promjerKotaca;\nconst int koraciPoOkretaju = 200;\nconst int mikrostep = 16;\nconst float koraciPoCm = (koraciPoOkretaju * mikrostep) \/ opsegKotaca;\nconst float razmakIzmeduKotaca = 12.0; \/\/ cm\n\n\/\/ Trenutna pozicija robota\nfloat pozX = 0.0, pozY = 0.0, orijentacija = 0.0;\n\nvoid setup() {\n  motorLeft.setMaxSpeed(1000);\n  motorRight.setMaxSpeed(1000);\n}\n\nvoid loop() {\n  idiDo(0, 20);   \/\/ Idi naprijed 20 cm\n  delay(1000);\n\n  idiDo(20, 20);  \/\/ Skreni desno i idi 20 cm\n  delay(1000);\n\n  idiDo(20, 0);   \/\/ Skreni opet i idi dolje\n  delay(5000);\n}\n\nvoid idiNaprijed(float cm) {\n  long koraci = cm * koraciPoCm;\n\n  motorLeft.setCurrentPosition(0);\n  motorRight.setCurrentPosition(0);\n\n  motorLeft.setSpeed(300);     \/\/ naprijed\n  motorRight.setSpeed(-300);   \/\/ naprijed (zrcalno)\n\n  while (abs(motorLeft.currentPosition()) &lt; koraci || abs(motorRight.currentPosition()) &lt; koraci) {\n    if (abs(motorLeft.currentPosition()) &lt; koraci) motorLeft.runSpeed();\n    if (abs(motorRight.currentPosition()) &lt; koraci) motorRight.runSpeed();\n  }\n}\n\nvoid skreniDesno(float stupnjeva) {\n  float putanja = (3.1416 * razmakIzmeduKotaca) * (stupnjeva \/ 360.0);\n  long koraci = putanja * koraciPoCm;\n\n  motorLeft.setCurrentPosition(0);\n  motorRight.setCurrentPosition(0);\n\n  motorLeft.setSpeed(300);    \/\/ naprijed\n  motorRight.setSpeed(300);   \/\/ unatrag (zrcalno montiran)\n\n  while (abs(motorLeft.currentPosition()) &lt; koraci || abs(motorRight.currentPosition()) &lt; koraci) {\n    if (abs(motorLeft.currentPosition()) &lt; koraci) motorLeft.runSpeed();\n    if (abs(motorRight.currentPosition()) &lt; koraci) motorRight.runSpeed();\n  }\n}\n\nvoid skreniLijevo(float stupnjeva) {\n  float putanja = (3.1416 * razmakIzmeduKotaca) * (stupnjeva \/ 360.0);\n  long koraci = putanja * koraciPoCm;\n\n  motorLeft.setCurrentPosition(0);\n  motorRight.setCurrentPosition(0);\n\n  motorLeft.setSpeed(-300);   \/\/ unatrag\n  motorRight.setSpeed(-300);  \/\/ naprijed (zrcalno montiran)\n\n  while (abs(motorLeft.currentPosition()) &lt; koraci || abs(motorRight.currentPosition()) &lt; koraci) {\n    if (abs(motorLeft.currentPosition()) &lt; koraci) motorLeft.runSpeed();\n    if (abs(motorRight.currentPosition()) &lt; koraci) motorRight.runSpeed();\n  }\n}\n\nvoid idiDo(float x, float y) {\n  float dx = x - pozX;\n  float dy = y - pozY;\n  float d = sqrt(dx * dx + dy * dy);\n  float kut = atan2(dx, dy) * 180.0 \/ 3.1416;\n\n  float deltaKut = kut - orijentacija;\n  while (deltaKut &gt; 180) deltaKut -= 360;\n  while (deltaKut &lt; -180) deltaKut += 360;\n\n  if (deltaKut &gt; 0) {\n    skreniDesno(deltaKut);\n    orijentacija += deltaKut;\n  } else {\n    skreniLijevo(-deltaKut);\n    orijentacija += deltaKut;\n  }\n\n  while (orijentacija &lt; 0) orijentacija += 360;\n  while (orijentacija &gt;= 360) orijentacija -= 360;\n\n  idiNaprijed(d);\n\n  pozX = x;\n  pozY = y;\n}<\/code><\/pre>\n\n\n\n<p>Ultrazvu\u010dni senzor<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;AccelStepper.h>\n\n\/\/ Pinovi za motore\n#define DIR_L 25\n#define STEP_L 26\n#define DIR_R 27\n#define STEP_R 14\n\nAccelStepper motorL(1, STEP_L, DIR_L);\nAccelStepper motorR(1, STEP_R, DIR_R);\n\n\/\/ Ultrazvu\u010dni senzor\n#define TRIG 32\n#define ECHO 13\n\nconst int brzina = 300;         \/\/ Konstantna brzina kretanja\nconst float prag = 15.0;        \/\/ Prag udaljenosti u cm\n\nvoid setup() {\n  Serial.begin(115200);\n  pinMode(TRIG, OUTPUT);\n  pinMode(ECHO, INPUT);\n\n  motorL.setMaxSpeed(brzina);\n  motorR.setMaxSpeed(brzina);\n}\n\nfloat izmjeriUdaljenost() {\n  digitalWrite(TRIG, LOW);\n  delayMicroseconds(2);\n  digitalWrite(TRIG, HIGH);\n  delayMicroseconds(10);\n  digitalWrite(TRIG, LOW);\n\n  long trajanje = pulseIn(ECHO, HIGH);\n  return trajanje * 0.034 \/ 2;\n}\n\nvoid loop() {\n  float udaljenost = izmjeriUdaljenost();\n  Serial.print(\"Udaljenost: \");\n  Serial.print(udaljenost);\n  Serial.println(\" cm\");\n\n  if (udaljenost > prag) {\n    motorL.setSpeed(brzina);\n    motorR.setSpeed(brzina); \/\/ Oba motora naprijed\n  } else {\n    motorL.setSpeed(0);\n    motorR.setSpeed(0);      \/\/ Zaustavi se\n  }\n\n  motorL.runSpeed();\n  motorR.runSpeed();\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;AccelStepper.h>\n\n\/\/ Pinovi za motore\n#define DIR_L 25\n#define STEP_L 26\n#define DIR_R 27\n#define STEP_R 14\n\nAccelStepper motorL(1, STEP_L, DIR_L);\nAccelStepper motorR(1, STEP_R, DIR_R);\n\n\/\/ Ultrazvu\u010dni senzor\n#define TRIG 32\n#define ECHO 13\n\nconst int brzina = 1000;        \/\/ Konstantna brzina kretanja\nconst float prag = 15.0;        \/\/ Prag udaljenosti u cm\n\nvoid setup() {\n  Serial.begin(115200);\n  pinMode(TRIG, OUTPUT);\n  pinMode(ECHO, INPUT);\n\n  motorL.setMaxSpeed(brzina);\n  motorR.setMaxSpeed(brzina);\n}\n\nfloat izmjeriUdaljenost() {\n  digitalWrite(TRIG, LOW);\n  delayMicroseconds(2);\n  digitalWrite(TRIG, HIGH);\n  delayMicroseconds(10);\n  digitalWrite(TRIG, LOW);\n\n  long trajanje = pulseIn(ECHO, HIGH);\n  return trajanje * 0.034 \/ 2;\n}\n\nvoid loop() {\n  float udaljenost = izmjeriUdaljenost();\n  Serial.print(\"Udaljenost: \");\n  Serial.print(udaljenost);\n  Serial.println(\" cm\");\n\n  if (udaljenost > prag) {\n    motorL.setSpeed(brzina);\n    motorR.setSpeed(brzina); \/\/ Ide ravno naprijed\n  } else {\n    motorL.setSpeed(0);\n    motorR.setSpeed(0);\n  }\n\n  motorL.runSpeed();\n  motorR.runSpeed();\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;AccelStepper.h>\n\n\/\/ PINS za motore\n#define dirPin1 25\n#define stepPin1 26\n#define dirPin2 27\n#define stepPin2 14\n\n\/\/ Ultrazvu\u010dni senzor\nconst int trigPin = 32;\nconst int echoPin = 13;\n\n\/\/ Parametri za motor\n#define motorInterfaceType 1\nAccelStepper motorDesni(motorInterfaceType, stepPin1, dirPin1);\nAccelStepper motorLijevi(motorInterfaceType, stepPin2, dirPin2);\n\n\/\/ Parametri robota\nconst float korakaPoOkr = 200.0;\nconst float promjerKotacaCM = 6.4;\nconst float opsegKotaca = 3.1416 * promjerKotacaCM;\n\n\/\/ Senzor udaljenosti\n#define SOUND_SPEED 0.034\n#define SAFE_DISTANCE_CM 20.0  \/\/ minimalna udaljenost za zaustavljanje\n\nlong duration;\nfloat distanceCm;\n\n\/\/ Pretvori cm u korake\nint cmUKorake(float cm) {\n  return int(cm * korakaPoOkr \/ opsegKotaca);\n}\n\n\/\/ Funkcija za mjerenje udaljenosti\nfloat mjeriUdaljenostCm() {\n  digitalWrite(trigPin, LOW);\n  delayMicroseconds(2);\n  digitalWrite(trigPin, HIGH);\n  delayMicroseconds(10);\n  digitalWrite(trigPin, LOW);\n \n  duration = pulseIn(echoPin, HIGH, 20000); \/\/ Timeout 20ms\n  float udaljenost = duration * SOUND_SPEED \/ 2;\n  return udaljenost;\n}\n\n\/\/ Idi naprijed s provjerom udaljenosti\nvoid idiNaprijedSigurno(float cm, int brzina = 500) {\n  int koraci = cmUKorake(cm);\n  motorDesni.setSpeed(brzina);\n  motorLijevi.setSpeed(brzina);\n  for (int i = 0; i &lt; koraci; i++) {\n    distanceCm = mjeriUdaljenostCm();\n    if (distanceCm &lt; SAFE_DISTANCE_CM) {\n      motorDesni.setSpeed(0);\n      motorLijevi.setSpeed(0);\n      Serial.println(\"? Prepreka detektirana! Zaustavljanje.\");\n      break;\n    }\n    motorDesni.runSpeed();\n    motorLijevi.runSpeed();\n  }\n}\n\n\/\/ Postavi okretanje, bez provjere udaljenosti\nvoid okreniLijevo(int koraka, int brzina = 500) {\n  motorDesni.setSpeed(brzina);\n  motorLijevi.setSpeed(-brzina);\n  for (int i = 0; i &lt; koraka; i++) {\n    motorDesni.runSpeed();\n    motorLijevi.runSpeed();\n  }\n}\n\nvoid okreniDesno(int koraka, int brzina = 500) {\n  motorDesni.setSpeed(-brzina);\n  motorLijevi.setSpeed(brzina);\n  for (int i = 0; i &lt; koraka; i++) {\n    motorDesni.runSpeed();\n    motorLijevi.runSpeed();\n  }\n}\n\nvoid setup() {\n  Serial.begin(115200);\n  motorDesni.setMaxSpeed(1000);\n  motorLijevi.setMaxSpeed(1000);\n\n  pinMode(trigPin, OUTPUT);\n  pinMode(echoPin, INPUT);\n\n  Serial.println(\"? Pokretanje robota...\");\n}\n\nvoid loop() {\n  Serial.println(\"\u27a1\ufe0f Kre\u0107em naprijed 100 cm\");\n  idiNaprijedSigurno(100);  \/\/ poku\u0161aj i\u0107i 100 cm naprijed, ali stani ako ima prepreka\n  delay(1000);\n\n  Serial.println(\"\u21aa\ufe0f Okret udesno\");\n  okreniDesno(cmUKorake(10));\n  delay(1000);\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;AccelStepper.h&gt;\n\n\/\/ Motor pinovi\n#define dirPinLeft 25\n#define stepPinLeft 26\n#define dirPinRight 27\n#define stepPinRight 14\n#define motorInterfaceType 1\n\nAccelStepper motorLeft(motorInterfaceType, stepPinLeft, dirPinLeft);\nAccelStepper motorRight(motorInterfaceType, stepPinRight, dirPinRight);\n\n\/\/ Ultrazvu\u010dni pinovi\nconst int trigPin = 32;\nconst int echoPin = 13;\n\n\/\/ Parametri motora i kota\u010da\nconst int koraciPoOkretaju = 200;\nconst int mikrostep = 4;          \/\/ prilagodi mikrostep postavku\nconst float promjerKotaca = 6.4;  \nconst float opsegKotaca = 3.1416 * promjerKotaca;\nconst float koraciPoCm = (koraciPoOkretaju * mikrostep) \/ opsegKotaca;\n\n\/\/ Brzina i prag za zaustavljanje\nconst int brzinaKoraka = 1500;\nconst float pragUdaljenostiCm = 15.0;  \/\/ robot staje ako je prepreka bli\u017ee od 15 cm\n\nlong duration;\nfloat distanceCm;\n\nvoid setup() {\n  Serial.begin(115200);\n\n  motorLeft.setMaxSpeed(brzinaKoraka);\n  motorLeft.setAcceleration(1500);\n\n  motorRight.setMaxSpeed(brzinaKoraka);\n  motorRight.setAcceleration(1500);\n\n  pinMode(trigPin, OUTPUT);\n  pinMode(echoPin, INPUT);\n}\n\nfloat izmjeriUdaljenost() {\n  digitalWrite(trigPin, LOW);\n  delayMicroseconds(2);\n  digitalWrite(trigPin, HIGH);\n  delayMicroseconds(10);\n  digitalWrite(trigPin, LOW);\n  \n  duration = pulseIn(echoPin, HIGH);\n  distanceCm = duration * 0.034 \/ 2;\n  return distanceCm;\n}\n\nvoid loop() {\n  float udaljenost = izmjeriUdaljenost();\n  Serial.print(\"Udaljenost: \");\n  Serial.print(udaljenost);\n  Serial.println(\" cm\");\n\n  if (udaljenost &gt; pragUdaljenostiCm) {\n    motorLeft.setSpeed(brzinaKoraka);\n    motorRight.setSpeed(-brzinaKoraka);\n  } else {\n    motorLeft.setSpeed(0);\n    motorRight.setSpeed(0);\n  }\n  \n  motorLeft.runSpeed();\n  motorRight.runSpeed();\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;AccelStepper.h&gt;\n#include &lt;math.h&gt;\n\n\/\/ Motor pinovi i postavke\n#define dirPinLeft 25\n#define stepPinLeft 26\n#define dirPinRight 27\n#define stepPinRight 14\n#define motorInterfaceType 1\n\nAccelStepper motorLeft(motorInterfaceType, stepPinLeft, dirPinLeft);\nAccelStepper motorRight(motorInterfaceType, stepPinRight, dirPinRight);\n\n\/\/ Parametri robota\nconst float promjerKotaca = 6.4; \/\/ cm\nconst float opsegKotaca = 3.1416 * promjerKotaca;\nconst int koraciPoOkretaju = 200;\nconst int mikrostep = 16;\nconst float koraciPoCm = (koraciPoOkretaju * mikrostep) \/ opsegKotaca;\nconst float razmakIzmeduKotaca = 12.0; \/\/ cm\n\n\/\/ Trenutna pozicija robota\nfloat pozX = 0.0, pozY = 0.0, orijentacija = 0.0;\n\nvoid setup() {\n  motorLeft.setMaxSpeed(1000);\n  motorRight.setMaxSpeed(1000);\n}\n\nvoid loop() {\n  idiDo(0, 20);   \/\/ Idi naprijed 20 cm\n  delay(1000);\n\n  idiDo(20, 20);  \/\/ Skreni desno i idi 20 cm\n  delay(1000);\n\n  idiDo(20, 0);   \/\/ Skreni opet i idi dolje\n  delay(5000);\n}\n\nvoid idiNaprijed(float cm) {\n  long koraci = cm * koraciPoCm;\n\n  motorLeft.setCurrentPosition(0);\n  motorRight.setCurrentPosition(0);\n\n  motorLeft.setSpeed(300);     \/\/ naprijed\n  motorRight.setSpeed(-300);   \/\/ naprijed (zrcalno)\n\n  while (abs(motorLeft.currentPosition()) &lt; koraci || abs(motorRight.currentPosition()) &lt; koraci) {\n    if (abs(motorLeft.currentPosition()) &lt; koraci) motorLeft.runSpeed();\n    if (abs(motorRight.currentPosition()) &lt; koraci) motorRight.runSpeed();\n  }\n}\n\nvoid skreniDesno(float stupnjeva) {\n  float putanja = (3.1416 * razmakIzmeduKotaca) * (stupnjeva \/ 360.0);\n  long koraci = putanja * koraciPoCm;\n\n  motorLeft.setCurrentPosition(0);\n  motorRight.setCurrentPosition(0);\n\n  motorLeft.setSpeed(300);    \/\/ naprijed\n  motorRight.setSpeed(300);   \/\/ unatrag (zrcalno montiran)\n\n  while (abs(motorLeft.currentPosition()) &lt; koraci || abs(motorRight.currentPosition()) &lt; koraci) {\n    if (abs(motorLeft.currentPosition()) &lt; koraci) motorLeft.runSpeed();\n    if (abs(motorRight.currentPosition()) &lt; koraci) motorRight.runSpeed();\n  }\n}\n\nvoid skreniLijevo(float stupnjeva) {\n  float putanja = (3.1416 * razmakIzmeduKotaca) * (stupnjeva \/ 360.0);\n  long koraci = putanja * koraciPoCm;\n\n  motorLeft.setCurrentPosition(0);\n  motorRight.setCurrentPosition(0);\n\n  motorLeft.setSpeed(-300);   \/\/ unatrag\n  motorRight.setSpeed(-300);  \/\/ naprijed (zrcalno montiran)\n\n  while (abs(motorLeft.currentPosition()) &lt; koraci || abs(motorRight.currentPosition()) &lt; koraci) {\n    if (abs(motorLeft.currentPosition()) &lt; koraci) motorLeft.runSpeed();\n    if (abs(motorRight.currentPosition()) &lt; koraci) motorRight.runSpeed();\n  }\n}\n\nvoid idiDo(float x, float y) {\n  float dx = x - pozX;\n  float dy = y - pozY;\n  float d = sqrt(dx * dx + dy * dy);\n  float kut = atan2(dx, dy) * 180.0 \/ 3.1416;\n\n  float deltaKut = kut - orijentacija;\n  while (deltaKut &gt; 180) deltaKut -= 360;\n  while (deltaKut &lt; -180) deltaKut += 360;\n\n  if (deltaKut &gt; 0) {\n    skreniDesno(deltaKut);\n    orijentacija += deltaKut;\n  } else {\n    skreniLijevo(-deltaKut);\n    orijentacija += deltaKut;\n  }\n\n  while (orijentacija &lt; 0) orijentacija += 360;\n  while (orijentacija &gt;= 360) orijentacija -= 360;\n\n  idiNaprijed(d);\n\n  pozX = x;\n  pozY = y;\n}<\/code><\/pre>","protected":false},"excerpt":{"rendered":"<p>ESP 32 &#8211; Kontroler https:\/\/hr.szks-kuongshun.com\/info\/mastering-the-esp32-a-comprehensive-guide-88876427.html Kako kora\u010dni motor radi: https:\/\/cnc-centar.ba\/aktuelnosti\/sta-je-step-koracni-motor\/ Simulator za stepper motore: https:\/\/wokwi.com\/projects\/433915938304722945 Izrada robota kontroler i stepper motor: https:\/\/how2electronics.com\/control-stepper-motor-with-a4988-driver-arduino\/ Instalacija kontrolera: Pokretanje robota Kretanje robota i skretanje Ultrazvu\u010dni senzor<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_eb_attr":"","site-sidebar-layout":"default","site-content-layout":"default","ast-global-header-display":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","footnotes":""},"_links":{"self":[{"href":"https:\/\/www.newstem-kutina.info\/en\/wp-json\/wp\/v2\/pages\/2850"}],"collection":[{"href":"https:\/\/www.newstem-kutina.info\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.newstem-kutina.info\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.newstem-kutina.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.newstem-kutina.info\/en\/wp-json\/wp\/v2\/comments?post=2850"}],"version-history":[{"count":24,"href":"https:\/\/www.newstem-kutina.info\/en\/wp-json\/wp\/v2\/pages\/2850\/revisions"}],"predecessor-version":[{"id":2896,"href":"https:\/\/www.newstem-kutina.info\/en\/wp-json\/wp\/v2\/pages\/2850\/revisions\/2896"}],"wp:attachment":[{"href":"https:\/\/www.newstem-kutina.info\/en\/wp-json\/wp\/v2\/media?parent=2850"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}