# อัปโหลด Sketch สำหรับ NyBoard

## Setup Process

ซอฟต์แวร์ OpenCat ทำงานได้ทั้งบน Nybble และ Bittle ซึ่งควบคุมโดย NyBoard ที่ใช้ ATmega328P สามารถดูเอกสารรายละเอียดเพิ่มเติมได้ที่ [*NyBoard V1\_0*](https://docs.petoi.com/thai/nyboard/nyboard-v1_0) *หรือ* [*NyBoard V1\_1*](https://docs.petoi.com/thai/nyboard/nyboard-v1_1).

{% hint style="info" %}
หมายเหตุ: สามารถดูเวอร์ชั่นของบอร์ดได้ที่นี่

<img src="https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FeVlKCj2bnu39VkVPpPF6%2FNyBoardV1_1.jpg?alt=media&#x26;token=bfa182d7-85ef-4e09-b236-e6d2d58a590a" alt="" data-size="original">

{% endhint %}

### เลื่อน สวิตซ์I2C (SW2) เป็น Arduino.

สวิตช์ I2C เปลี่ยนอุปกรณ์หลัก I2C (gyro/accelerometer, servo driver, external EEPROM) ตามค่าเริ่มต้น “Arduino” NyBoard ใช้ ATmega328P แบบออนบอร์ดเป็นชิปหลัก บน “RPi” NyBoard ใช้ชิปภายนอกที่เชื่อมต่อผ่านพอร์ต I2C (SDA, SCL) เป็นชิปหลัก

![](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FphhRcbnhfqeiRmMevSmZ%2Fimage.png?alt=media\&token=6d6e1756-fa9a-452d-8925-9d4f4d835c0b)

{% hint style="warning" %}
หมายเหตุ：

* บางครั้งหากคุณไม่สามารถผ่านขั้นตอนการบูทเครื่องได้ คุณอาจกดสวิตช์ไปที่ฝั่ง "RPi" โดยไม่ได้ตั้งใจ
* ก่อนอัปโหลดเฟิร์มแวร์ โปรดตรวจสอบว่าไม่ได้เชื่อมต่ออุปกรณ์ I2C ใดๆ กับอินเทอร์เฟซ I2C ของเมนบอร์ด มิฉะนั้น การอัปโหลดเฟิร์มแวร์จะล้มเหลว ตำแหน่งของอินเทอร์เฟซ I2C แสดงอยู่ด้านล่าง (ในช่องสีแดง)![](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FbH34dmGEqxhNc3MTKnEe%2FI2C%E6%8E%A5%E5%8F%A3.png?alt=media\&token=ea10915f-2b81-4197-9631-67d886cad1e9)
  {% endhint %}

## Quick Start Tutorial Video

{% embed url="<https://youtu.be/8ao5VlmRwe4>" %}

ขั้นตอนการตั้งค่าสำหรับ Nybble เกือบจะเหมือนกัน ยกเว้นว่าคุณต้องเปลี่ยนการกำหนดโมเดลเป็น `#define NYBBLE.`  อย่าลืมอ่านขั้นตอนโดยละเอียดต่อไปนี้&#x20;

### Downloads and installations of Arduino IDE

{% hint style="info" %}
คุณต้องใช้ [Arduino IDE](https://www.arduino.cc/en/software) เวอร์ชั่นใหม่ล่าสุดเพื่อตั้งค่า environment ในเวอร์ชันเก่ามักจะรวบรวมไฟล์ฐานสิบหกขนาดใหญ่ขึ้นซึ่งอาจเกินขีดจำกัดของหน่วยความจำ
{% endhint %}

ถ้าเป็นบอร์ด **NyBoard V1\_\* เวอร์ชั่นใดก็ตามสามารถเลือกเป็น** **Arduino Uno ได้เลย**

![](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FNE6s5aXe2eUO6zzGsW3L%2Funo.png?alt=media\&token=0dd00a44-f9e2-4c59-8165-507f9598884f)

{% hint style="warning" %}
เฉพาะในกรณีที่ bootloader ของ NyBoard พัง ซึ่งไม่น่าจะเกิดขึ้น

### Burn the bootloader (ไม่จำเป็นสำหรับการใช้งานปกติ)

●      [What is a bootloader?](https://www.arduino.cc/en/Hacking/Bootloader?from=Tutorial.Bootloader)

NyBoard ทุกเครื่องต้องผ่านการตรวจสอบการทำงานก่อนจัดส่ง ดังนั้นพวกเขาจึงควรติดตั้ง bootloader ที่เข้ากันได้ไว้แล้ว อย่างไรก็ตาม ในบางกรณี bootloader อาจพัง จากนั้นคุณจะไม่สามารถอัปโหลดภาพร่างผ่าน Arduino IDE ได้

หากคุณไม่สามารถอัปโหลด sketch ของคุณได้ไม่ได้แปลว่าเป็นเพราะ bootloader เสมอไป:

* &#x20;บางครั้งบอร์ด USB ของคุณจะตรวจจับกระแสไฟขนาดใหญ่จากอุปกรณ์และปิดใช้งานบริการ USB ทั้งหมด คุณจะต้อง restart บริการ USB ของคุณใหม่ หรือแม้แต่ reboot เครื่องคอมพิวเตอร์ของคุณ
* คุณต้องติดตั้ง driver สำหรับ FTDI USB 2.0 ไปยังตัวอัปโหลด UART
* คุณไม่ได้เลือกพอร์ตที่ถูกต้อง
* การเชื่อมต่อไม่ดี
* โชคร้าย. พรุ่งนี้ลองใหม่อีกวัน!

หากคุณตัดสินใจที่จะเบิร์น bootloader ใหม่:

* ด้วย **NyBoard V1\_\*** คุณสามารถเลือก **Arduino Uno** ภายใต้เมนูเครื่องมือของ **Arduino IDE**

![](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FVzNRAMf4Wlwe6f7RtU92%2FISP.png?alt=media\&token=1eb8bb1e-718c-4e61-b1ff-63bf2dc1cd5b)

* &#x20;เลือก ISP ของคุณ (ภายใน System Programmer) ยอดนิยม 2 ตัว: **USBtinyISP** หรือ **Arduino as ISP** [Arduino as ISP](https://www.arduino.cc/en/Tutorial/ArduinoISP)!
* เชื่อมต่อ programmer กับพอร์ต SPI บน NyBoard สังเกตทิศทางเมื่อเชื่อมต่อ ตรวจสอบให้แน่ใจว่าพวกเขาได้รับการติดต่อที่ดี
* เบิร์น bootloader หากนี่เป็นครั้งแรกที่คุณทำเช่นนี้ ให้รอจนกว่าแถบเปอร์เซ็นต์จะถึง 100% และไม่มีข้อความปรากฏขึ้นอีกเป็นเวลาหนึ่งนาที
  {% endhint %}

### เชื่อมต่อตัวอัปโหลด (บางครั้งเรียกว่า programmer )

{% hint style="info" %}
ขั้นตอนนี้ไม่จำเป็นต้องติดตั้ง NyBoard บนหุ่นยนต์
{% endhint %}

สำหรับขั้นตอนเฉพาะ โปรดดูส่วนเชื่อมต่อ NyBoard ใน USB uploader module [Connect NyBoard section](https://docs.petoi.com/communication-modules/usb-downloader-ch340c#connect-nyboard)&#x20;

### เชื่อมต่อตัวอัปโหลด Bluetooth (optional)

สำหรับขั้นตอนเฉพาะ โปรดดูที่ส่วนเชื่อมต่อ NyBoard ใน Dual-Mode Bluetooth Module [Connect NyBoard section](https://docs.petoi.com/communication-modules/dual-mode-bluetooth#connection-with-nyboard)&#x20;

{% hint style="warning" %}
บน Mac บลูทูธอาจขาดการเชื่อมต่อหลังจากอัปโหลดหลายครั้ง ในกรณีดังกล่าว ให้ลบการเชื่อมต่อและเชื่อมต่อใหม่เพื่อให้ฟังก์ชันทำงานต่อ
{% endhint %}

{% hint style="warning" %}
หาก Bluetooth dongle ไม่เจออยู่ในชุดหุ่นยนต์โดย  Seeed Studio หรือ partner ของเราโปรดส่งอีเมลถึง <support@petoi.com> เพื่อทราบข้อมูลเพิ่มเติม
{% endhint %}

### ดาวน์โหลด OpenCat แพ็คเกจ

{% hint style="info" %}
เราอัปเดต code อย่างต่อเนื่องเป็น Open-source project คุณสามารถติดดาวและติดตาม[GitHub repository](https://github.com/PetoiCamp/OpenCat)  เพื่อรับฟีเจอร์ใหม่ล่าสุดและการแก้ไขข้อบกพร่อง คุณยังสามารถแบ่งปัน code ของคุณกับผู้ใช้ OpenCat ทั่วโลก
{% endhint %}

* ดาวน์โหลด ​OpenCat repo เวอร์ชั่นล่าสุดจาก GitHub: <https://github.com/PetoiCamp/OpenCat>. จะดีกว่าถ้าคุณใช้คุณสมบัติการควบคุมเวอร์ชันของ GitHub มิฉะนั้น ตรวจสอบให้แน่ใจว่าคุณดาวน์โหลดทั้งโฟลเดอร์ OpenCat ทุกครั้ง codeทั้งหมดต้องเป็นเวอร์ชันเดียวกันจึงจะทำงานร่วมกันได้
* หากคุณดาวน์โหลดไฟล์ Zip ของ code คุณจะได้รับ **OpenCat-main** โฟลเดอร์หลังจาก unzip คุณต้องเปลี่ยนชื่อเป็น **OpenCat** ก่อนเปิด **OpenCat.ino** เพื่อให้ชื่อทั้งสองตรงกัน

{% hint style="warning" %}
ไม่ว่าคุณจะบันทึกโฟลเดอร์ไว้ที่ใด โครงสร้างไฟล์ควรเป็น:

![](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2Ff72utOXnR2XhpInLgqVO%2Fimage.png?alt=media\&token=d74e9ba1-ce70-4fcc-be8e-6d7fed642ca1)&#x20;
{% endhint %}

* มี code ที่ชื่อว่า **testX.ino** หลายไฟล์ในโฟลเดอร์ **ModuleTests** คุณสามารถอัปโหลดเพื่อทดสอบบางโมดูลแยกกันได้ เปิด  **testX.ino** ใดๆ ที่มีคำนำหน้าว่า “test” (แนะนำให้ใช้ **testBuzzer.ino** เป็น sketch ทดสอบแรกของคุณ)
* เปิด serial monitor และตั้งค่า baud rate บน NyBoard V1\_\* ให้เลือกบอร์ดเป็น **Arduino Uno** และตั้งค่า **baud rate** เป็น 115200 ทั้งใน code และ serial monitor
* Compile code ไม่ควรมีข้อความแสดงข้อผิดพลาด เมืออัปโหลด sketch ไปยังบอร์ดของคุณและคุณจะเห็น LED Tx และ Rx กะพริบถี่ๆ เมื่อหยุดกะพริบ ข้อความควรปรากฏบน serial monitor

### Upload

ในการกำหนดค่าบอร์ด โปรดทำตามขั้นตอนเหล่านี้

#### 1. กำหนดค่าประเภทหุ่นยนต์และรุ่นของบอร์ด

เปิดไฟล์ OpenCat.ino และเลือกเวอร์ชันของหุ่นยนต์และบอร์ดของคุณ ตัวอย่างเช่น

```cpp
#define BITTLE    //Petoi 9 DOF robot dog: 1x on head + 8x on leg
//#define NYBBLE  //Petoi 11 DOF robot cat: 2x on head + 1x on tail + 8x on leg

//#define NyBoard_V0_1
//#define NyBoard_V0_2
#define NyBoard_V1_0
//#define NyBoard_V1_1
```

{% hint style="info" %}
สัญลักษณ์ **//** หมายถึงการปิดการใช้งานบรรทัดของ code และเปลี่ยนเป็นความคิดเห็น ตรวจสอบให้แน่ใจว่าคุณเปิดใช้งานตัวเลือกคู่ขนานเพียงบรรทัดเดียว
{% endhint %}

#### 2.ตั้งค่า configuration mode

คอมเมนท์ในส่วน `#define MAIN_SKETCH` เพื่อให้โค้ดเปลี่ยนโหมดการกำหนดค่าบอร์ด อัปโหลดและปฏิบัติตาม serial prompts เพื่อดำเนินการต่อดังตัวอย่างด้านล่าง

```cpp
// #define MAIN_SKETCH
```

{% hint style="info" %}
หากคุณเปิดใช้งาน`#define AUTO_INIT`โปรแกรมจะตั้งค่าโดยอัตโนมัติโดยไม่ต้องแจ้งให้ทราบล่วงหน้า จะไม่รีเซ็ตออฟเซ็ตของข้อต่อ แต่ปรับเทียบ IMU
{% endhint %}

#### 3.  เสียบตัวอัพโหลด USB เข้ากับคอมพิวเตอร์ของคุณ

ติดตั้ง [the driver](https://docs.petoi.com/communication-modules/usb-downloader-ch340c#the-drivers)  หากไม่พบพอร์ต USB ภายใต้ Arduino -> Tools -> Port<br>

![](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FHKy4AS5O7dL6c8XBEkk3%2FIMG_20220321-194900414.png?alt=media\&token=9f9fee9d-0062-4ce4-9e23-22c6a0e45691)

#### 4.  เสียบตัวอัปโหลด USB เข้ากับ NyBoard

สำหรับขั้นตอนเฉพาะโปรดดูส่วนเชื่อมต่อ [Connect NyBoard section](https://docs.petoi.com/communication-modules/usb-downloader-ch340c#connect-nyboard) ใน USB uploader module

#### 5. อัปโหลด configuration mode sketch

กดปุ่มอัปโหลด

![](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FfPksJAPKn6CyTUCmBkv9%2FIMG_20220321-195853695.png?alt=media\&token=3ac6f24c-4bfd-45a5-8f81-de88a468b915)

#### 6. เปิด serial monitor

คุณสามารถหาปุ่มนี้ได้ภายใต้เครื่องมือ **Tools** หรือที่มุมบนขวาของ IDE&#x20;

![](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FlAq7lkp41sQAwcaU8D9q%2F%E4%B8%B2%E5%8F%A3%E7%9B%91%E8%A7%86%E5%99%A8%E6%8C%89%E9%92%AE02.PNG?alt=media\&token=52c26d61-fe27-4ea3-a9b0-46fa311db37d)

![](https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2Fb4UVMtut7mb9pxzkvhqA%2F%E4%B8%B2%E5%8F%A3%E7%9B%91%E8%A7%86%E5%99%A8.PNG?alt=media\&token=544cb763-ca96-4b23-bc5e-69e8083c98f4)

ตั้งค่า serial monitor เป็น **No line ending** และ **baud** **rate** 115200

#### 7.รีเซ็ตออฟเซ็ตของข้อต่อ

The serial prompts:

```
Reset joint offsets? (Y/n):
```

ป้อน 'Y' และกด Enter หากคุณต้องการรีเซ็ตออฟเซ็ตของข้อต่อทั้งหมดเป็น 0

โปรแกรมจะทำการรีเซ็ต จากนั้นอัปเดต constants และ instinctive skills ในหน่วยความจำ

{% hint style="warning" %}
คุณต้องป้อน 'Y' หรือ 'n' เพื่อผ่านขั้นตอนนี้ มิฉะนั้น parameters รวมถึง skill data จะไม่ได้รับการอัพเดตบนบอร์ด
{% endhint %}

#### 8. IMU (Inertial Measurement Unit) calibration

The serial prompts:

```
Calibrate the IMU? (Y/n): 
```

ป้อน 'Y' และกด Enter หากคุณไม่เคยปรับเทียบ IMU หรือต้องการทำการปรับเทียบใหม่

วางหุ่นยนต์ราบบนโต๊ะและอย่าแตะต้อง หุ่นยนต์จะส่งเสียงบี๊บยาวหกครั้งเพื่อให้คุณมีเวลาเพียงพอ จากนั้นจะอ่านข้อมูลเซ็นเซอร์หลายร้อยรายการและบันทึกค่าชดเชย จะส่งเสียงบี๊บเมื่อการปรับเทียบเสร็จสิ้น

เมื่อ serial monitor แสดง "Ready!" คุณสามารถปิด serial monitor เพื่อทำขั้นตอนถัดไป

#### 9. Calibrate the servo controller chip PCA9685

มีขั้นตอนเพิ่มเติมในการ Calibrate servo driver หลังจากการ calibrate IMU

```
Optional: Connect PWM 3 -> Grove pin A3 to calibrate PCA9685
```

คุณสามารถ calibrate servo controller (PCA9685 chip) เพื่อให้สัญญาณมุมแม่นยำยิ่งขึ้น ใช้สายจัมเปอร์แบบสั้นเพื่อเชื่อมต่อ PWM pin3 (pin สัญญาณของ pin เซอร์โวตัวใดตัวหนึ่ง) และ Grove pin A3

<img src="https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2Fl7EyfagvJUcn9Jhp9kq9%2Fcalibrate9685.jpg?alt=media&#x26;token=9464e22a-3a43-4920-95d2-61f8e3e62953" alt="" data-size="original">

โปรแกรมจะวัดความกว้างของสัญญาณและ calibrate ชิปโดยอัตโนมัติหลังจากอ่านค่าที่เหมือนกันสามครั้งติดต่อกัน ค่าชดเชยการ calibrate จะถูกบันทึกไว้ในบอร์ดสำหรับการบูทครั้งต่อไป จากนั้นคุณสามารถไปยังขั้นตอนต่อไปได้

{% hint style="warning" %}
หากเซอร์โวตัวใดตัวหนึ่งหยุดทำงานแต่สามารถทำงานต่อได้หลังจากเปิดเซอร์โวใหม่ อาจเป็นเพราะสัญญาณ driver ไม่แม่นยำ ขั้นตอนนี้ไม่สามารถข้ามได้
{% endhint %}

#### 10. อัปโหลด sketch ของฟังก์ชันหลัก

ยกเลิก comment `#define MAIN_SKETCH`เพื่อให้ใช้งานได้ code จะกลายเป็นโปรแกรมปกติสำหรับการทำงานหลัก จากนั้นอัปโหลด code

```cpp
#define MAIN_SKETCH
```

เปิด serial monitor เมื่อ serial monitor แสดง " Ready! " หุ่นยนต์ก็พร้อมที่จะรับคำสั่งถัดไปของคุณ

#### 11. The module macro in the code&#x20;

Code เริ่มต้นทำงานในโหมดมาตรฐาน หากคุณมีโมดูลที่ขยายได้บางโมดูล คุณอาจยกเลิกการแสดงความคิดเห็น macro definition ของโมดูลนั้นๆ จะปิดใช้งานรหัส Gyro เพื่อประหยัดพื้นที่ในการเขียนโปรแกรมและเปิดใช้งานการสาธิตของโมดูล

<figure><img src="https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2F8S4xiCTzlClHKQbII3GY%2Fmodules.png?alt=media&#x26;token=ea15002d-a473-466b-aced-e980060a5ed3" alt=""><figcaption></figcaption></figure>

ใน official modules ถูกกำหนดไว้ในไฟล์ส่วนหัวแยกต่างหากใน **OpenCat/src/** คุณสามารถค้นหาได้ใน **OpenCat/src/io.h -> readSignal()** ลักษณะการทำงานของ **OTHER\_MODULES** กำหนดไว้ใน **OpenCat/OpenCat.ino -> otherModule()** คุณสามารถศึกษาโค้ดตัวอย่างเพื่อเขียนฟังก์ชันของคุณเองได้

<figure><img src="https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2F1rczcCS8qN94OIo2WCfL%2Fother.png?alt=media&#x26;token=cfc16a70-69a2-4c1d-90ee-3246952fe4cf" alt=""><figcaption></figcaption></figure>

#### 12. Modify the "joint - pin" mapping

ในบางกรณี คุณอาจต้องการปรับเปลี่ยนการ mapping ของ "pin ข้อต่อ" ของหุ่นยนต์ คุณสามารถแก้ไขได้ใน **OpenCat/src/OpenCat.h** ตรวจสอบให้แน่ใจว่าคุณกำลังแก้ไขบล็อกโค้ดที่สอดคล้องกับเวอร์ชันของบอร์ดที่จุดเริ่มต้นของ **OpenCat.ino** หลังจากแก้ไข อย่าลืมบันทึกการเปลี่ยนแปลงและทำขั้นตอนการอัปโหลดซ้ำตั้งแต่ขั้นตอนที่ 2

<figure><img src="https://3127300255-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBR9bYMZnmeFFa1GJLvjM%2Fuploads%2FYVERnkccumL7LiChpiIG%2FchangingPin.jpeg?alt=media&#x26;token=67f2c460-9d4a-4cad-b9be-56b1012a3651" alt=""><figcaption></figcaption></figure>
