יום שבת, 11 במאי 2013

BeagleBone And Arduino





אז אחרי ההכרות הבסיסית עם BeagleBone אפשר לומר שניתן לעשות איתו הכול, היתרון המרכזי כמובן זה המעבד ה 32 Bit וה MMU שמאפשרים לנו להריץ מערכות הפעלה מתקדמות כמו Linux וכמובן לחבר רכיבים מתוחכמים יותר בעזרת תקשורות רבות שבאות עם הלוח, במאמר הזה אני יסביר כיצד ניתן לדבר עם ה Arduino בעזרת פקודות פשוטות ב SSH.

יש לחבר את הלוח לרשת , לאתר את הכתובת שלו ולהיכנס בעזרת Putty.

דרישות:

  • Beaglebone
  • Arduino Uno
  • Led
  • 330ohm Resistor
  • Wires



לפני שנחיל לדבר חשוב לזכור שכל פין ב BeagleBone יכול לעבוד ב 8 מצבים שונים, כלומר ניתן לנתב את הפינים לכל מיני רכיבים בלוח לדוגמה הכניסות של ה Uart יכולות לשמש במצב אחר עבור I2C לכן חשוב למצוא את המצב המתאים על מנת שנוכל לדבר סיראלית, תחילה נמצא את הפינים עבור Uart1 ב Expansion Header:


נדאג שה Arduino יקבל חשמל דרך הכניסות של ה 5V וה GND שב BeagleBone, שימו לב מומלץ לעבוד עם ספק כח חיצוני ולשנות את ה PIN של ה 5 V מ 7 ל 5, לאחר מכן נמצא את ה Mode שאותו צריכים להגדיר לפינים שנבחרו על מנת שידברו עם רכיב ה Uart1 שנמצא בלוח.




נגדיר את כניסת ה TX ב BeagleBone שתתחבר לכניסה RX  שב Arduino:

root@beaglebone:~# echo 0 > /sys/kernel/debug/omap_mux/uart1_txd

root@beaglebone:~# cat /sys/kernel/debug/omap_mux/uart1_txd
name: uart1_txd.uart1_txd (0x44e10984/0x984 = 0x0000), b NA, t NA
mode: OMAP_PIN_OUTPUT | OMAP_MUX_MODE0
signals: uart1_txd | mmc2_sdwp | d_can1_rx | i2c1_scl | NA | pr1_uart0_txd_mux1 | NA | gpio0_15

ניתן לראות שה Pin מוגדר על Mode 0 ומצביע על GPIO_15.

נגדיר את כניסת ה RX ב BeagleBone שתתחבר לכניסה TX שב Arduino:

root@beaglebone:~# echo 20 > /sys/kernel/debug/omap_mux/uart1_rxd

root@beaglebone:~# cat /sys/kernel/debug/omap_mux/uart1_rxd
name: uart1_rxd.uart1_rxd (0x44e10980/0x980 = 0x0020), b NA, t NA
mode: OMAP_PIN_INPUT_PULLDOWN | OMAP_MUX_MODE0
signals: uart1_rxd | mmc1_sdwp | d_can1_tx | i2c1_sda | NA | pr1_uart0_rxd_mux1 | NA | gpio0_14

ניתן לראות שה Pin מוגדר על Mode 0 ומצביע על GPIO_14.


בגרסת ה Angstrom שמגיעה עם הלוח יש כלי נחמד שנקרא Minicom שמאפשר לנו לשלוח ולקבל מידע דרך חיבור סיראלי, יש להגדיר את התוכנית על ה Device שמייצג את ה Uart ב Linux במקרה שלנו ttyO1 שווה ל Uart1 לא לשכוח להריץ ב Terminal מקביל.

root@beaglebone:~# minicom -b 9600 -D /dev/ttyO1


יאללה תתחילו לדבר:

מה שנשאר לנו הוא להריץ את הפקודה המתאימה:
//say to arduino to active the led
root@beaglebone:~# echo C1O > /dev/ttyO1

//say to arduino to deactive the led
root@beaglebone:~# echo C1F > /dev/ttyO1


נפתח 2 Terminals במקביל על מנת לראות את מה שמקבל ה Arduino:




קוד Arduino:

הקוד עצמו מאוד פשוט, ה Arduino מאזין בחיבור הסיראלי לפקודה שתגיע מה BeagleBone שתדליק או תכבה led , בנוסף הוא יחזיר את מה שהוא קיבל על מנת שנוכל לעקוב ב Beaglebone.


//*** Serial Connection Demo Arduino Listener ***
//*** proxytype.blogspot.com                  ***

//GPIO pin 12
int ledpin = 12;

//buffer counter
int counter = 0;

//buffer
char cmd[4];

//flush buffer
void flushArr()
{
     for(int i = 0; i < 3; i++)
   {
       cmd[i] = 0;
   }
 
}

//set pin status
void setled(int _status)
{
  digitalWrite(ledpin, _status);
}

void setup()
{
  Serial.begin(9600);
}

void loop()
{

  while (Serial.available() > 0)
  {
    cmd[counter] = Serial.read();
 
    //write the char output for diagnose
    Serial.print(cmd[counter]);
    Serial.print("\n");
 
     counter = counter + 1;
 
    delay(10);
    }
 
    //C1O set led on
     if(cmd[0] == 'C' && cmd[1] == '1' && cmd[2] == 'O')
      setled(HIGH);
 
   //C1F set led off
  else if(cmd[0] == 'C' && cmd[1] == '1' && cmd[2] == 'F')
      setled(LOW);

   if(counter > 2)
   {
      counter =0;
       flushArr();
   }
 
   delay(10);
}

מבנה סופי


סרט הדגמה




סיכום:

החיבור בין ה Beaglebone עם Arduino מאפשר לנו לבנות פרוייקטים מורכבים, ה Beaglebone נהפך למוח בזמן שה Arduino ממתין לפקודות מרחוק, ניתן לשלב Arduinos נוספים ולתקשר איתם בעזרת שאר חיבורי ה UART שעל הלוח.

זיווג משמיים!

אין תגובות:

הוסף רשומת תגובה