קורס RB10 , רובטיקס בלוקס : תרגול 009 – רמזור מעבר חציה UART esp32
תכנות רמזור מעבר חציה למכוניות – ושער משמרות זהב
1.שלב ראשון נבנה רמזור למכוניות ושער להוכלי רגל – תוכנית פשוטה
לתכונית יש מספר בגים ונשפר אותה בשלב השני .
התחלת התוכנית – מצב קמזור למכוניות ירוק – לילדים שער סגור
2.לחיצה על כפתור ירוק – פתיחה
3.לחיצה על כפץור ירק – סגירה
קישור לתוכנית : https://wokwi.com/projects/348859059935380052
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
// robotics blocks - Trafic light - Kids road Gase #include <ESP32Servo.h> const int servoPin = 18; int buttonOpenState; int buttonCloseState; #define ledRed 4 #define ledGreen 2 #define buttonOpen 12 #define buttonClose 14 int pos = 90; Servo servo; void setup() { // initialize serial for debugging Serial.begin(115200); Serial.println("start....system"); pinMode(buttonOpen, INPUT_PULLUP); pinMode(buttonClose, INPUT_PULLUP); pinMode(ledRed,OUTPUT); pinMode(ledGreen,OUTPUT); servo.attach(servoPin, 500, 2400); servo.write(90); digitalWrite(ledGreen,HIGH); Serial.println("Road Open- kids can not walk"); } void loop() { buttonOpenState = digitalRead(buttonOpen); buttonCloseState = digitalRead(buttonClose) ; if ( buttonOpenState==0) { // open gate digitalWrite(ledGreen, LOW); digitalWrite(ledRed, HIGH); for (pos =90; pos <= 180; pos = pos + 1) { servo.write(pos); // Serial.println(pos); digitalWrite(ledRed, HIGH); delay(15); } Serial.println("Road close- kids can walk"); } if(buttonCloseState==0) { // close gate for (pos =180; pos >= 90; pos =pos- 1) { servo.write(pos); // Serial.println(pos); delay(15); } digitalWrite(ledRed , LOW); digitalWrite(ledGreen,HIGH); Serial.println("Road Open- kids can not walk "); } } |
4. באלגוריתם התוכנה והמערכת קייים מספר בגים מה הם ?
רמז: (בדוק מה קורה אם לוחצים על הכפתור האדום בהתחלה במקום הירוק)
תוכנה לאחר תיקון הבאג
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
// robotics blocks - Trafic light - Kids road Gase #include <ESP32Servo.h> const int servoPin = 18; int buttonOpenState; int buttonCloseState; #define ledRed 4 #define ledGreen 2 #define buttonOpen 12 #define buttonClose 14 int pos = 90; Servo servo; char gateState=0; // 0= close , 1 = open void setup() { // initialize serial for debugging Serial.begin(115200); Serial.println("start....system"); pinMode(buttonOpen, INPUT_PULLUP); pinMode(buttonClose, INPUT_PULLUP); pinMode(ledRed,OUTPUT); pinMode(ledGreen,OUTPUT); servo.attach(servoPin, 500, 2400); servo.write(90); digitalWrite(ledGreen,HIGH); Serial.println("Road Open- kids can not walk"); } void loop() { buttonOpenState = digitalRead(buttonOpen); buttonCloseState = digitalRead(buttonClose) ; if ( (buttonOpenState==0) && (gateState==0)) { // open gate digitalWrite(ledGreen, LOW); digitalWrite(ledRed, HIGH); for (pos =90; pos <= 180; pos = pos + 1) { servo.write(pos); // Serial.println(pos); digitalWrite(ledRed, HIGH); delay(15); } gateState=1; Serial.println("Road close- kids can walk"); } if( (buttonCloseState==0) && (gateState==1) ) { // close gate if(pos>=180) // check if gate is already opemed { for (pos =180; pos >= 90; pos =pos- 1) { servo.write(pos); // Serial.println(pos); delay(15); } gateState=0; digitalWrite(ledRed , LOW); digitalWrite(ledGreen,HIGH); Serial.println("Road Open- kids can not walk "); } } } |
1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
// robotics blocks - Trafic light - Kids road Gase #include <ESP32Servo.h> const int servoPin = 18; int buttonOpenState; int buttonCloseState; #define ledRed 4 #define ledGreen 2 #define buttonOpen 12 #define buttonClose 14 int pos = 90; Servo servo; char gateState=0; // 0= close , 1 = open void setup() { // initialize serial for debugging Serial.begin(115200); Serial.println("start....system"); pinMode(buttonOpen, INPUT_PULLUP); pinMode(buttonClose, INPUT_PULLUP); pinMode(ledRed,OUTPUT); pinMode(ledGreen,OUTPUT); servo.attach(servoPin, 500, 2400); servo.write(90); digitalWrite(ledGreen,HIGH); Serial.println("Road Open- kids can not walk"); } void loop() { buttonOpenState = digitalRead(buttonOpen); buttonCloseState = digitalRead(buttonClose) ; if ( (buttonOpenState==0) && (gateState==0)) { // open gate digitalWrite(ledGreen, LOW); digitalWrite(ledRed, HIGH); for (pos =90; pos <= 180; pos = pos + 1) { servo.write(pos); // Serial.println(pos); digitalWrite(ledRed, HIGH); delay(15); } gateState=1; Serial.println("Road close- kids can walk"); } if( (buttonCloseState==0) && (gateState==1) ) { // close gate if(pos>=180) // check if gate is already opemed { for (pos =180; pos >= 90; pos =pos- 1) { servo.write(pos); // Serial.println(pos); delay(15); } gateState=0; digitalWrite(ledRed , LOW); digitalWrite(ledGreen,HIGH); Serial.println("Road Open- kids can not walk "); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
{ "version": 1, "author": "Uri Shaked", "editor": "wokwi", "parts": [ { "type": "wokwi-esp32-devkit-v1", "id": "esp", "top": 0, "left": 0, "attrs": {} }, { "type": "wokwi-servo", "id": "servo1", "top": 71.13, "left": 194.42, "attrs": {} }, { "type": "wokwi-led", "id": "led1", "top": -12.88, "left": 140.68, "attrs": { "color": "red" } }, { "type": "wokwi-resistor", "id": "r1", "top": 53.82, "left": 140.75, "rotate": 90, "attrs": { "value": "1000" } }, { "type": "wokwi-pushbutton", "id": "btn1", "top": 79.58, "left": -132.1, "rotate": 90, "attrs": { "color": "green" } }, { "type": "wokwi-led", "id": "led2", "top": -10.26, "left": 211.24, "attrs": { "color": "limegreen" } }, { "type": "wokwi-resistor", "id": "r2", "top": 60.14, "left": 210.02, "rotate": 90, "attrs": { "value": "1000" } }, { "type": "wokwi-pushbutton", "id": "btn2", "top": 84.31, "left": -259.65, "rotate": 90, "attrs": { "color": "black" } } ], "connections": [ [ "esp:TX0", "$serialMonitor:RX", "", [] ], [ "esp:RX0", "$serialMonitor:TX", "", [] ], [ "esp:D18", "servo1:PWM", "green", [ "h37.5", "v14.46" ] ], [ "esp:VIN", "servo1:V+", "red", [ "h-25.81", "v68.77", "h167.38", "v-149.25" ] ], [ "servo1:GND", "esp:GND.1", "black", [ "h-12.27", "v71.38" ] ], [ "led1:C", "esp:GND.1", "black", [ "v0" ] ], [ "led1:A", "r1:1", "yellow", [ "v0" ] ], [ "esp:D4", "r1:2", "yellow", [ "h69.9", "v-4.32" ] ], [ "esp:GND.2", "btn1:2.r", "black", [ "h0" ] ], [ "btn1:1.l", "esp:D12", "green", [ "v-4.41", "h67.94", "v44.89" ] ], [ "esp:GND.1", "led2:C", "black", [ "h0" ] ], [ "r2:1", "led2:A", "green", [ "h0" ] ], [ "esp:D2", "r2:2", "yellow", [ "v-4.59", "h139.72" ] ], [ "esp:D14", "btn2:1.l", "green", [ "h-15.19", "v-72.25", "h-197.58" ] ], [ "btn2:2.r", "esp:GND.2", "green", [ "v34.2", "h184.74" ] ] ] } |