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

## Setup Process

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

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

<img src="/files/CH5kFJ31b1cvIqcFw9rs" alt="" data-size="original">

{% endhint %}

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

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

![](/files/0SLBCPKvq2OffXgAl0z2)

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

* บางครั้งหากคุณไม่สามารถผ่านขั้นตอนการบูทเครื่องได้ คุณอาจกดสวิตช์ไปที่ฝั่ง "RPi" โดยไม่ได้ตั้งใจ
* ก่อนอัปโหลดเฟิร์มแวร์ โปรดตรวจสอบว่าไม่ได้เชื่อมต่ออุปกรณ์ I2C ใดๆ กับอินเทอร์เฟซ I2C ของเมนบอร์ด มิฉะนั้น การอัปโหลดเฟิร์มแวร์จะล้มเหลว ตำแหน่งของอินเทอร์เฟซ I2C แสดงอยู่ด้านล่าง (ในช่องสีแดง)![](/files/vvcXvRauQtGg0veLrqP6)
  {% 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 ได้เลย**

![](/files/qPWYjfJwxLvBSUj1ENer)

{% 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**

![](/files/3XWxSI20pQ7OFGWmFUIq)

* &#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" %}
ไม่ว่าคุณจะบันทึกโฟลเดอร์ไว้ที่ใด โครงสร้างไฟล์ควรเป็น:

![](/files/szKMKGRbLsOvvdjJHq2f)&#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>

![](/files/F0YDSCF2pAviwHFkUR4i)

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

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

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

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

![](/files/bkQ0yuI6VXTS60JASjeo)

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

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

![](/files/gLlQaxwx7Q0O72z4ERo6)

![](/files/HaPgYgNQR8qGYG1O78qt)

ตั้งค่า 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="/files/gRFMlrYZL69A6eXpWzYx" 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="/files/44OTimWkZE9IFju1jdSa" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/h3BuiAnjfX8Qh1yH8h77" alt=""><figcaption></figcaption></figure>

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

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

<figure><img src="/files/XBJQzp5F1nEEPQnPSnXQ" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.petoi.com/thai/arduino-ide/sketch-nyboard.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
