จะแนบ Arduino ได้อย่างไร


43

Arduino เว็บไซต์เงินก้อนขึ้นเป็น

Arduino เป็นแพลตฟอร์มต้นแบบอิเล็กทรอนิกส์แบบโอเพ่นซอร์สซึ่งใช้ฮาร์ดแวร์และซอฟต์แวร์ที่ยืดหยุ่นใช้งานง่าย มันมีไว้สำหรับศิลปินนักออกแบบงานอดิเรกและทุกคนที่สนใจในการสร้างวัตถุแบบโต้ตอบหรือสภาพแวดล้อม

มันสามารถเป็นอินเทอร์เฟซที่ดีในการควบคุมเซอร์โวและให้การเชื่อมต่ออื่น ๆ ที่มีให้โดยโล่ที่เป็นตัวเลือกมากมาย

ฉันจะเชื่อมต่อกับ Raspberry Pi ได้อย่างไร ฉันจะตั้งค่าการสื่อสารได้อย่างไร

คำตอบ:


38

Arduinos มักจะปรากฏเป็นอุปกรณ์ USB อนุกรม บอร์ดปัจจุบันใช้ไดรเวอร์อนุกรม USB ที่สร้างไว้ในไมโครโพรเซสเซอร์หลัก แต่ Arduinos รุ่นเก่า (และโคลน) ใช้ชิปอนุกรม USB ของ บริษัท อื่นแยกต่างหาก

เพื่อรับSerial.printข้อมูลเกี่ยวกับ Raspberry Pi จาก Arduino ฉันใช้โปรแกรมหน้าจอ GNUเป็นเทอร์มินัลพื้นฐาน: screen [serial-port] [baud-rate](ตัวอย่างscreen /dev/ttyACM0 9600)

ฉันทดสอบ Arduinos ที่ต่างกันสามอันและโคลนอีกอันหนึ่งแตกต่างกัน สายพันธุ์ใหม่ทั้งหมดดูเหมือนจะเป็นพอร์ตและคนเก่า/dev/ttyACM0 /dev/ttyUSB0นี่คือสิ่งที่ฉันพบภายใต้ Raspbian:

  • Duemilanove - ชิปอนุกรม: FTDI FT232RL ; พอร์ตอนุกรม:/dev/ttyUSB0
  • Uno - ชิปอนุกรม: Atmel ATmega16U2 (หรือ 8U2 บนบอร์ดเก่า); พอร์ตอนุกรม:/dev/ttyACM0
  • เลโอนาร์โด - ชิปอนุกรม: Atmel ATmega32U4 (ในตัว); พอร์ตอนุกรม:/dev/ttyACM0
  • OMS Omega-328U - ชิปอนุกรม: Silicon Labs CP210x ; พอร์ตอนุกรม: /dev/ttyUSB0.

Raspberry Pi อาจให้พลังงานไม่เพียงพอในการขับเคลื่อน Arduino ดังนั้นคุณอาจต้องใช้พลังงานจากภายนอก เพื่อความสมบูรณ์ฉันยังทดสอบ Prolific PL2303แม้ว่ามันจะไม่ได้อยู่ใน Arduino ที่ฉันรู้จัก มันดูมีความสุข/dev/ttyUSB0มาก

สำหรับการสื่อสารที่ซับซ้อนยิ่งขึ้นด้วยเซ็นเซอร์คุณอาจพิจารณาFirmata "โปรโตคอลทั่วไปสำหรับการสื่อสารกับไมโครคอนโทรลเลอร์จากซอฟต์แวร์บนคอมพิวเตอร์โฮสต์" มีการติดตั้งใช้งานสำหรับ Arduino และห้องสมุด Python เพื่อใช้งานบนฝั่ง Raspberry Pi

นี่คือตัวอย่างเล็ก ๆ ที่ใช้pyFirmataเพื่ออ่าน LM35 และเปลี่ยนความสว่างของ LED:

#!/usr/bin/python
# -*- coding: utf-8 -*-

# simple test of pyfirmata and Arduino; read from an LM35 on A0,
#                                       brighten an LED on D3 using PWM
# scruss, 2012-08-14 - tested on Arduino Uno & Raspberry Pi (Raspbian)

import pyfirmata

# Create a new board, specifying serial port
board = pyfirmata.Arduino('/dev/ttyACM0')

# start an iterator thread so that serial buffer doesn't overflow
it = pyfirmata.util.Iterator(board)
it.start()

# set up pins
pin0=board.get_pin('a:0:i')             # A0 Input      (LM35)
pin3=board.get_pin('d:3:p')             # D3 PWM Output (LED)

# IMPORTANT! discard first reads until A0 gets something valid
while pin0.read() is None:
    pass

for i in range(10):
    pin3.write(i/10.0)                  # set D3 to 0, 10%, 20%, ... brightness
    print "PWM: %d %% Temperature %.1f °C" % (i * 10, pin0.read() * 5 * 100)
    board.pass_time(1)                  # pause 1 second

pin3.write(0)                           # turn LED back off
board.exit()

มีข้อควรระวังบางประการเมื่อใช้ pyFirmata:

  • การอ่านแบบอะนาล็อกและการเขียน PWM ถูกทำให้เป็นมาตรฐานในช่วง 0 .. 1 และไม่ใช่ Arduino 0 .. 255 และ 0 .. 1023 มาตรฐาน
  • คุณจำเป็นต้องเริ่มเธรดตัววนซ้ำแบบแยกต่างหากเพื่อหยุดการอ่านค่าเก่าที่มากเกินไปของบัฟเฟอร์อนุกรม
  • เนื่องจาก Arduino ได้อ่านแบบอะซิงโครนัสตรวจสอบให้แน่ใจว่าการเชื่อมต่อ pyFirmata นั้นเริ่มต้นอย่างสมบูรณ์ก่อนที่จะอ่านจากพอร์ต มิฉะนั้นNoneค่าจะตามมา

1
ฉันยังยืนยันว่าคุณสามารถเรียกใช้การประมวลผลบน Raspberry Pi มันช้ามาก แต่ผมไม่จัดการที่จะได้รับมันจะควบคุม Arduino บนการเชื่อมโยง USB: การควบคุม Arduino จากราสเบอร์รี่ Pi โดยใช้การประมวลผล ฉันจะดูว่าฉันสามารถพอร์ตนี้เพื่อหลาม / tkinter ...
scruss

ขอบคุณสำหรับคำตอบนี้มันมีประโยชน์มาก ฉันใช้ python serial เพื่ออ่านจาก / dev / ttyACM0 และพบว่ามันไม่สอดคล้องกันมาก ฉันคิดว่ามันขาดพลังให้กับอาร์ดิโอของฉัน แต่ฉันติดมันกับแหล่งจ่ายไฟภายนอกและยังคงมีปัญหาอยู่ บางครั้งข้อมูลมีรูปแบบไม่ถูกต้องบางครั้งมีข้อผิดพลาดเกิดขึ้นเนื่องจากไม่พบ / dev / ttyACM0 (แม้ว่าการเรียกใช้ครั้งต่อมาจะค้นหาได้) คุณเคยมีปัญหาคล้ายกันไหม?
Andy Smith

ไม่ไม่ตรงกับประสบการณ์ของฉัน
scruss

ขอบคุณสำหรับคำตอบ - น่าสนใจต้องเป็นสิ่งที่ฉันทำผิดไปแล้ว!
Andy Smith

อาจถามคำถามที่ไม่ใช่ Pi ใน SE หรือถามโดยตรงบนฟอรัม Arduino comms ต่อเนื่องมักจะทำให้ฉันปวดหัว ...
27432

13

ในกรณีที่ไม่ชัดเจนด้วยRaspbian Wheezyคุณสามารถเรียกใช้ Arduino IDE และอัปโหลดภาพร่างไปยัง Arduino เมื่อเชื่อมต่อกับพอร์ต USB ของ Raspberry Pi หากต้องการติดตั้งบน Raspbian เพียงพิมพ์ลงในเชลล์ (หรือบรรทัดคำสั่ง aka):

sudo apt-get install arduino

มันจะดาวน์โหลดและติดตั้งแพ็คเกจที่จำเป็นทั้งหมด ฉันมีรูปถ่ายของ Arduino IDE สองภาพใน Raspbian ที่นี่:

http://www.element14.com/community/groups/raspberry-pi/blog/2012/07/03/review-of-raspberry-pi-images

(ตามที่คนอื่น ๆ ได้อธิบายไว้ข้างต้น Raspberry Pi สามารถตั้งโปรแกรม Arduino ผ่านหมุดพอร์ตอนุกรม (UART) บนส่วนหัวของ GPIO ในกรณีนี้คุณไม่ต้อง "เสีย" พอร์ต USB แต่จะต้องมีการกำหนดค่าเพิ่มเติม )

ไชโย Drew


ฉันทดสอบ Arduino Uno ด้วยไฟ LED RGB พร้อมภาพร่างแบบเฟดเดอร์ที่เรียบง่ายและ Arduino Uno นั้นใช้พลังงานจากพอร์ต USB ของ Raspberry Pi เท่านั้น ฉันไม่มีปัญหาใด ๆ แต่แน่นอนว่า YMMV
pdp7

8

หนึ่งสามารถเลือกที่จะเชื่อมต่อ rpi กับ arduino โดยใช้พอร์ต usb หรือโดยใช้หมุด GPIO หนึ่งสามารถใช้Wiringpiเพื่อทำการสื่อสารระหว่างกระดาน

ขณะนี้ยังมีสะพานได้รับการพัฒนาที่เรียกว่าสะพาน

โลกสวัสดีพื้นฐานสามารถพบได้ที่นี่


7

โหมดลา

เรียกเก็บเงินเป็นวิธีการที่เหมาะสมที่จะนำ Arduino ในราสเบอร์รี่ Piโดยสับวันที่ โหมดลาเป็นโคลน Arduino วางซ้อนกันได้รับการออกแบบโดย Anool Mahidharia จัสตินชอว์และเควินออสบอร์จากWyolum.com OSHW การทำงานร่วมกัน แฮ็ควันอธิบายมันดังนี้

ออกจากค้างคาวโดยตรง AlaMode เสียบโดยตรงกับพิน GPIO ของ Raspberry Pi จากนั้นการสื่อสารกับ ATMega ของ Arduino จะเปิดใช้งานช่วยให้คุณสามารถส่งและรับข้อมูลเช่นเดียวกับที่คุณทำกับ Arduino มีนาฬิกาเรียลไทม์ส่วนหัวของเซอร์โวมีหลายวิธีในการเพิ่มกำลังให้บอร์ดและแม้กระทั่งการหยุดพักสำหรับโมดูล GPS

Cruft ที่ไม่จำเป็นจำนวนมากถูกกำจัดออกไปใน AlaMode ไม่มีพอร์ต USB แต่สามารถตั้งโปรแกรมได้โดยตรงผ่านหมุด GPIO ของ Raspberry Pi ค่อนข้างเรียบร้อยและเราอดใจรอไม่ไหวที่จะรับ [Raspberry Pi] ของเรา

Kevin ให้รายละเอียดเพิ่มเติมเล็กน้อยในบล็อกของเขา:

นี่คือคุณสมบัติรวมถึงสารพัดพิเศษ:

  • พลังที่ยืดหยุ่น สามารถขับเคลื่อนโดยตรงจาก Pi, สแตนด์อโลนที่มีแบตเตอรี่หรือผนังหูดหรือพลังงาน USB สิ่งนี้สำคัญหากโล่ของคุณใช้พลังงานมากกว่า Pi ที่สามารถให้ได้หรือถ้าคุณต้องการปลดมันออกจากการทำงานแบบสแตนด์อโลน ตั้งโปรแกรมได้ผ่านทาง UART ของ Pi บนพิน GPIO หรืออะแดปเตอร์ FTDI USB-Serial หรือ ISP
  • ส่วนหัวสำหรับเชื่อมต่อ Fastrax UP501 GPS DS3234 นาฬิกาเรียลไทม์ Pi ไม่มีแบตเตอรี่สำรองของ RTC คุณสามารถตั้งค่าโปรแกรมใน AlaMode เพื่อรายงานเวลาไปยัง Pi ผ่านทางอนุกรมหรือ I2C
  • ช่องเสียบการ์ด Micro-SD มีประโยชน์สำหรับการบันทึกข้อมูลและหน่วยความจำขนาดใหญ่สำหรับแอพพลิเคชั่น Arduino ของคุณ
  • แถวของเซอร์โวเฮดเดอร์ที่เชื่อมต่อกับหมุด PWM ด้วยกำลังที่สามารถกำหนดค่าได้และรางกราวด์

เบต้า จำกัด

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

อ้างอิง

  1. แฮ็คโพสต์บล็อกของวัน
  2. โพสต์บล็อกของ Kevin Osborn
  3. Wyolum.com

4

คุณอาจพิจารณา Gert Board ซึ่งตอนนี้เป็น Arduino ถ้าคุณต้องการแพลตฟอร์มการเชื่อมต่อฮาร์ดแวร์ทั่วไป ข้อดีอย่างหนึ่งคือมีเอกสารมากมายเกี่ยวกับการโต้ตอบกับ RPi มีให้สั่งซื้อล่วงหน้าจาก Element14 ตั้งแต่ 8/8/12


0

มี RaspberryPi HAT ที่ทำงานเหมือน Arduino และสามารถตั้งโปรแกรมผ่าน Web UI ได้จากทุกเบราว์เซอร์ โครงการที่เรียกว่าCoPiino มันมาพร้อมกับซอฟต์แวร์และทำงานอย่างสมบูรณ์ เพียงป้อน Arduino Sketch ในเบราว์เซอร์ UI แล้วกด "รวบรวมและเรียกใช้" - นั่นคือมัน


1
เนื่องจากคุณได้โพสต์คำตอบอย่างน้อยสองคำที่ส่งเสริม CoPino ฉันสงสัยว่าคุณเชื่อมต่อกับโครงการนี้ การเชื่อมต่อใด ๆ ควรถูกบันทึกไว้ในคำตอบของคุณ
Steve Robillard

ใช่ถูกต้องอย่างแน่นอนและความคิดเห็นของฉันครอบคลุมหัวข้อทั้งหมด บอร์ด CoPiino คล้ายกับบอร์ด a-la-mode ที่ได้กล่าวไปแล้ว CoPiino มาพร้อมกับคุณสมบัติเพิ่มเติมที่ดี การเขียนโปรแกรม Arduino จาก Pi ครอบคลุมได้อย่างง่ายดาย - ซึ่งเป็นคำถามเริ่มต้น
tswaehn

สี่ปีที่คุณยังไม่ได้แก้ไขในการเข้าร่วมของคุณ กรุณาทำ.
Jon Harper
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.