מה נלמד כאן
- מבנה מנוע סרוו ועקרון הפעולה שלו
- איך רוחב פולס נהפך לזווית
- שימוש בספרייה חיצונית
- לשלוט בזווית מדויקת מהתוכנית
דיוק
דלתות אוטומטיות, מצלמות שעוקבות, זרועות רובוטיות, רובוטי שאיבה. כל ה"פניות" וה"התאמות" המדויקות שלהם מסתמכות על רכיב אחד: סרוו.

בשיעור הקודם המנוע ידע להסתובב — אבל לא ידע לאן. הסרוו יודע.
הידע שצריך
1. מה יש בתוך סרוו
סרוו הוא מנוע שיודע להסתובב לזווית מדויקת ולהישאר שם. בתוכו:

| הרכיב | התפקיד |
|---|---|
| מנוע | מסובב |
| גלגלי שיניים | מאטים את הסיבוב ומגבירים את הכוח |
| פוטנציומטר | מודד את הזווית הנוכחית |
| לוח בקרה | משווה בין המבוקש לקיים ומתקן |
| זרוע | החלק שזז בפועל |
הפוטנציומטר הוא הסוד. מכירים אותו משיעור 7 — וכאן הוא לא ידית שאתם מסובבים, אלא חיישן המיקום של המנוע עצמו. לוח הבקרה קורא ממנו כל הזמן, משווה לזווית המבוקשת, ומתקן.
זו לולאת משוב סגורה: מדידה → השוואה → תיקון. בגלל זה הסרוו נשאר בזווית שלו גם כשדוחפים אותו.
2. איך רוחב פולס הופך לזווית

הסרוו מקבל אות PWM בתדר קבוע של 50Hz — מחזור כל 20 מילי-שניות. ומה שקובע את הזווית הוא רוחב הפולס בתוך כל מחזור:
| רוחב הפולס | הזווית |
|---|---|
| ~500 מיקרו-שניות | 0° |
| ~1500 מיקרו-שניות | 90° |
| ~2400 מיקרו-שניות | 180° |
פולס ארוך יותר = זווית גדולה יותר. זה כל הפרוטוקול.
שימו לב להבדל מ-PWM של נורית: שם שינינו את מחזור הפעולה כדי לשלוט בהספק. כאן התדר קבוע ורוחב הפולס הוא פקודה — הוא לא מספק כוח, הוא מעביר מידע.
3. ספריות
לחשב פולסים של מיקרו-שניות ידנית זה מיותר — מישהו כבר כתב את זה. ספרייה היא אוסף קוד מוכן שמישהו כתב ואפשר להשתמש בו.
בתחילת התוכנית כותבים:
#include <ESP32Servo.h>
וזו הספרייה שהתקנתם בשיעור ההתקנה. #include אומר: "תכניס לכאן את הקוד של הקובץ הזה".
הניסוי
המטרה: הסרוו מסתובב הלוך ושוב בין 0° ל-180°.
רשימת רכיבים
| הרכיב | כמות |
|---|---|
| לוח ESP32 | 1 |
| לוח ניסוי 400 נקודות | 1 |
| סרוו SG90 | 1 |
שלושת החוטים של הסרוו: חום/שחור ל-GND, אדום ל-5V, כתום/צהוב ל-פין האות.
התרשים החשמלי

החיבור

הקוד
#include <ESP32Servo.h>
Servo myServo;
#define servoPin 5
void setup() {
// מקשרים את הסרוו לפין, עם טווח פולס 500-2400 מיקרו-שניות
myServo.attach(servoPin, 500, 2400);
myServo.write(0); // מתחילים ב-0 מעלות
delay(500); // רגע להתייצבות
}
void loop() {
// מ-0 ל-180
for (int angle = 0; angle <= 180; angle++) {
myServo.write(angle);
delay(15); // נותן לסרוו זמן להגיע
}
// מ-180 חזרה ל-0
for (int angle = 180; angle >= 0; angle--) {
myServo.write(angle);
delay(15);
}
}
למה
delay(15)? הסרוו זקוק לזמן פיזי כדי לזוז. בלי ההשהיה התוכנית תזרוק לו 180 פקודות במילי-שניות בודדות, והוא יקפוץ ישר לסוף במקום לזוז חלק.
מה אמור לקרות

הזרוע נעה הלוך ושוב, חלק ואיטי.
הפקודות שלמדנו
| הפקודה | מה היא עושה |
|---|---|
#include <ESP32Servo.h> |
מייבאת את הספרייה |
Servo myServo; |
יוצרת אובייקט סרוו |
myServo.attach(pin, min, max) |
מקשרת אותו לפין ומגדירה טווח |
myServo.write(angle) |
מסובבת לזווית (0-180) |
זו הפעם הראשונה שאתם משתמשים באובייקט.
myServoהוא לא משתנה רגיל — הוא "דבר" עם פעולות משלו, שקוראים להן עם נקודה:myServo.write(90). תראו את התבנית הזו בכל ספרייה שתשתמשו בה מכאן והלאה.
נסו בעצמכם
- הוסיפו
myServo.write(90)ובדקו שהזרוע באמצע בדיוק. - שנו את ה-
delayל-3 ואז ל-50. מה קורה למהירות ולחלקות? - שלבו עם שיעור 7: הפוטנציומטר שולט בזווית הסרוו. (רמז:
map(potValue, 0, 4095, 0, 180)) - החזיקו את הזרוע ביד ונסו להזיז אותה בעדינות בזמן שהיא עומדת. מרגישים איך היא מתנגדת ומתקנת?
- נסו
myServo.write(200). מה קורה, ולמה?


