ואף על פי כן, נוע תנוע

את מי בעצם מעניין אם דולקת נורה או לא?

הרי בסוף ארצה להתחיל לשלוט על מנועי סרוו, מכאניקה, דברים שזזים ורצוי שיעשו רעשים של גלגלי שיניים תוך כדי

אז למה לתת לפרט קטן ושולי כמו ידע תיאורטי להפריע לי להגיע לשם?

חיפוש קטן בגוגל הוליד את התוצאה הזו

מה זה בעצם?

הקוד הבסיסי של Arduino אינו מספיק לטיפול במנועי סרוו, זה לא לגמרי מדויק, אבל לצורך ההסבר זה מספיק טוב, ולכן ישנן ספריות הרחבה שמאפשרות לטפל ברכיבים יותר מורכבים מנורות LED

אם תסתכלו בקישור תראו בין היתר את הסכמה של המעגל אותו צריך להרכיב, אבל אנסה לתאר בקצרה:

למנוע סרוו ישנם שלושה חוטים: 2 מהם משמשים להעברת המתח הדרוש להפעלה (בד”כ אדום ושחור) וחוט נוסף שמשמש להעברת האות לסרוו (בד”כ לבן)

את החוט הלבן מחברים לפין 9 ואת החוטים האחרים מחברים ליציאות 5V (אדום, +)  וGND (שחור, -) ומריצים את הקוד הזה:

// Sweep
// by BARRAGAN <http://barraganstudio.com> 
// This example code is in the public domain.

#include <.h>

 myservo;   

int pos = 0;     

void setup()
{
  myservo.attach(9);   void loop()
{
  for(pos = 0; pos < 180; pos += 1)   
  {
    myservo.write(pos);               
    delay(15);
  }
  for(pos = 180; pos>=1; pos-=1)
  {
    myservo.write(pos);
    delay(15);
  }
}

סה”כ קוד מאוד פשוט שמטרתו להניע את מנוע הסרוו 180 מעלות בכיוון אחד ואז להחזיר אותו לכיוון השני, זה היה מקסים, אבל לא מספיק

רציתי יותר

בחיפושים נוספים מצאתי גם הסברים על כתיבה של output  דרך יציאה סיריאלית, ואם אפשר לכתוב, אפשר גם לקרוא

אני חייב לומר, לא נאבקתי הרבה והצלחתי לכתוב את הדבר הבא:

#include <.h> 

int incomingByte = 0;
 myservo;
int pos = 0;

void setup() {
  .begin(9600);
  myservo.attach(9);
}

void loop() {

	// send data only when you receive data:
	if (.available() > 0) {

                incomingByte = .read();
                moveServo(pos);                  

		.println(" is in: ");
                .print(pos);
                .println("");
	}
}
int moveServo(int dir){
  if(dir==0){
    for(pos = 0; pos < 180; pos += 1)
    {
      myservo.write(pos);
      delay(15);
    }
  } else {
    for(pos = 180; pos>=1; pos-=1)
    {
      myservo.write(pos);
      delay(15);
    }
  }
  return pos;
}

וזה מה שיצא:

?מה עשיתי
:אז ככה
פתחתי יציאה סיריאלית והאזנתי, ברגע שקיבלתי אינדיקציה שנכנס משהו (כרגע לא היה חשוב לי מה מגיע) קראתי לפונקציה שהניעה את הסרוו לאחד משני כיוונים שהשתנו לסירוגין
?מה היתה המטרה
קשה להגדיר את המטרה הלימודית של הניסוי הזה, התוצאה של המשחק הזה עזרה לי להבין קצת את היכולות שלי לגרום לתגובה של רכיב המחובר לכרטיס למידע שמגיע אליו, למדתי גם להבין את צורת הכתיבה של הסקריפט, קשה לי להאמין שהסקריפט הזה יעיל מידי ושאי אפש לייעל אותו, אבל זה כן מאפשר לי להבין באיזו “קופסא” אני מתכנת, לא שהצלחתי להגיע לגבול שמנע ממני להמשיך , להפך, הייתי משוכנע שמרחב התמרון שלי יותר מוגבל כך שלמעשה הוא סלל בפני את הדרך להמשיך ולחפש את גבולות הקופסא.

?מה עשיתי
:אז ככה
פתחתי יציאה סיריאלית והאזנתי, ברגע שקיבלתי אינדיקציה שנכנס משהו (כרגע לא היה חשוב לי מה מגיע) קראתי לפונקציה שהניעה את הסרוו לאחד משני כיוונים שהשתנו לסירוגין
?מה היתה המטרה
קשה להגדיר את המטרה הלימודית של הניסוי הזה, התוצאה של המשחק הזה עזרה לי להבין קצת את היכולות שלי לגרום לתגובה של רכיב המחובר לכרטיס למידע שמגיע אליו, למדתי גם להבין את צורת הכתיבה של הסקריפט, קשה לי להאמין שהסקריפט הזה יעיל מידי ושאי אפש לייעל אותו, אבל זה כן מאפשר לי להבין באיזו “קופסא” אני מתכנת, לא שהצלחתי להגיע לגבול שמנע ממני להמשיך , להפך, הייתי משוכנע שמרחב התמרון שלי יותר מוגבל כך שלמעשה הוא סלל בפני את הדרך להמשיך ולחפש את גבולות הקופסא.

התגובות סגורות.