สารบัญ:

Arduino 1-wire Generic Client/Slave Device (เซ็นเซอร์): 4 ขั้นตอน
Arduino 1-wire Generic Client/Slave Device (เซ็นเซอร์): 4 ขั้นตอน

วีดีโอ: Arduino 1-wire Generic Client/Slave Device (เซ็นเซอร์): 4 ขั้นตอน

วีดีโอ: Arduino 1-wire Generic Client/Slave Device (เซ็นเซอร์): 4 ขั้นตอน
วีดีโอ: 1-Wire – Through the Looking Glass (Scope) and Down the Rabbit Hole (Bit Level) 2024, พฤศจิกายน
Anonim
Arduino 1-wire Generic Client/Slave Device (เซ็นเซอร์)
Arduino 1-wire Generic Client/Slave Device (เซ็นเซอร์)

โปรดอ่านบทนำและขั้นตอนที่ 2 ของคำแนะนำของฉันเกี่ยวกับวิธีสร้าง Arduino 1-wire Display (144 Chars) เพื่อรับข้อมูลเพิ่มเติมเกี่ยวกับสถานการณ์และไลบรารีที่พร้อมใช้งาน ตามที่อธิบายไว้เราจะใช้ไลบรารี OneWire-Hub (โปรแกรมจำลองอุปกรณ์ทาส OneWire) โดย orgua (ให้ความสนใจกับส้อมอื่น ๆ รอบตัว) เพื่อสร้างอุปกรณ์ 1-wire ทั่วไป (เช่นเซ็นเซอร์) โดยใช้ Arduino

ขั้นตอนที่ 1: ซอฟต์แวร์

สิ่งที่สำคัญที่สุดคือการสร้างอุปกรณ์ที่สามารถคืนคุณค่าใด ๆ โดยพื้นฐานในลักษณะที่เรียบง่าย หมายความว่าซอฟต์แวร์มาตรฐานสามารถใช้อ่านค่าทั้งหมดได้โดยตรง (ไม่จำเป็นต้องมีการสนทนาหรือการจัดการแบบไบนารี) เพื่อที่เราต้องการอุปกรณ์ 1 สายเริ่มต้นที่ง่ายมากที่สามารถส่งคืนโฟลตและได้รับการสนับสนุนอย่างกว้างขวาง ทางเลือกเดียวที่ฉันรู้คือเทอร์โมมิเตอร์ DS18B20 (ตัวตรวจสอบแบตเตอรี่ DS2438 น่าสนใจและมีประโยชน์ด้วย แต่ค่อนข้างซับซ้อนและช้ากว่าข้อเสียอื่นๆ) ไลบรารี OneWire-Hub มีตัวอย่างที่เรียกว่า DS18B20_asInterface ที่ทำสิ่งที่เราต้องการอย่างแท้จริง มันสร้างกลุ่มของ DS18B20 ซึ่งทุกอันแทนค่าทศนิยมหนึ่งค่าที่เราต้องการส่งคืนจากเซ็นเซอร์ของเรา ข้อจำกัดที่นี่คือความละเอียดและค่าต้องอยู่ในช่วง -55, 0 … 125, 0 ซึ่งสามารถทำได้ง่าย - ในกรณีที่เลวร้ายที่สุดคือการปรับขนาด - และจริงๆ แล้วดีกว่าค่าที่สามารถแทนได้เช่น ค่า DS2438 (1.5 ถึง 10V) อีกวิธีหนึ่งคือสามารถตั้งค่าช่วงที่ใหญ่กว่าได้โดยใช้:

setTemperatureRaw(static_cast(ค่า * 16.0f));

แต่ซอฟต์แวร์บางตัวอาจไม่รองรับการอ่านและประมวลผลค่าเหล่านี้เนื่องจากไม่มีข้อกำหนด

สิ่งที่คุณต้องระวังคือในตอนแรกจำนวนทาสสูงสุดถูกจำกัดที่ 8 แต่สามารถเปลี่ยนได้ใน "OneWireHub_config.h" โดยเพิ่ม HUB_SLAVE_LIMIT สูงสุด 32 นอกจากนี้ คุณต้องแน่ใจว่าได้ใช้ ONEWIRE_TIME_MSG_HIGH_TIMEOUT หากจำเป็น เครือข่าย 1 สาย (เช่น x10) ตามที่อธิบายไว้ในขั้นตอนที่ 2 ของ Arduino 1-wire Display (144 Chars) และเพื่อใช้ IDE Version >= 1.8.3 เพื่อคอมไพล์และอัปโหลดโค้ดไปยัง Arduino ของคุณ

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

ขั้นตอนที่ 2: ฮาร์ดแวร์

ฮาร์ดแวร์
ฮาร์ดแวร์

โดยพื้นฐานแล้วทุกสิ่งที่คุณสามารถเชื่อมต่อกับ Arduino สามารถใช้เป็นเซ็นเซอร์ที่คุณเลือกได้ ข้อ จำกัด เพียงอย่างเดียวคือการอ่านเซ็นเซอร์ควรเร็วที่สุดเพื่อให้มีเวลาเหลือเพียงพอสำหรับการสื่อสารแบบ 1 สาย (หารือขั้นตอนที่ 2 ของคำแนะนำของฉันเกี่ยวกับ Arduino 1-wire Display (144 Chars) ตามลำดับ เพื่อรับตัวอย่าง)

ตัวอย่างของฮาร์ดแวร์ที่เป็นไปได้อาจเป็นสถานีตรวจอากาศ เช่น:

https://shop.boxtec.ch/wetter-messer-p-41289.html

นอกจากนี้คุณอาจต้องการใช้ Arduino เป็นเซ็นเซอร์ของคุณแทน คุณสามารถอ่านเพิ่มเติมเกี่ยวกับสิ่งนั้นได้ในคำแนะนำของฉันเกี่ยวกับ Arduino Lesser Known Features - ค่าที่เป็นไปได้คือแรงดันต้นทางและอุณหภูมิภายใน

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

ขั้นตอนที่ 3: ทดสอบอุปกรณ์

เชื่อมต่อกับเครือข่ายของคุณและตรวจสอบซอฟต์แวร์ของคุณว่ามี ROM ID ทั้งหมดหรือไม่และค่าที่ส่งคืนเป็นอุณหภูมิ

ขั้นตอนที่ 4: ภาคผนวก: ATtiny85

ภาคผนวก: ATtiny85
ภาคผนวก: ATtiny85

อุปกรณ์เดี่ยว (การจำกัดหน่วยความจำ) สามารถทำได้บน ATtiny85 ต้องใช้เวลาสองสามขั้นตอนในขณะที่เราตั้งโปรแกรม ATtiny85 โดยใช้ Arduino Uno เป็น ISP ด้วยความช่วยเหลือของ Arduino IDE:

  • ลิงค์

    • https://playground.boxtec.ch/doku.php/arduino/att…
    • https://sebastian.expert/could-not-find-usbtiny-d…
    • https://learn.sparkfun.com/tutorials/tiny-avr-pro…
    • https://forum.arduino.cc/index.php?topic=425532.0
    • https://forum.arduino.cc/index.php?topic=128963.0
  1. ใช้ Arduino IDE >=1.8.3
  2. ติดตั้งตัวเลือก ATtiny เป็น IDE

    1. ไฟล์ > ค่ากำหนด > URL ตัวจัดการบอร์ดเพิ่มเติม:
    2. เครื่องมือ > บอร์ด: ??? > ผู้จัดการบอร์ด…
    3. ค้นหา: "จิ๋ว" และติดตั้ง
  3. อัปโหลดภาพร่าง ISP ไปยัง Uno

    ไฟล์ > ตัวอย่าง > ArduinoISP > ArduinoISP

  4. ใส่ ATtiny85 เข้ากับซ็อกเก็ตการเขียนโปรแกรม (แรงเป็นศูนย์) และต่อสาย:

    1. Arduino Pin MOSI D11 ถึง ATtiny Pin 5
    2. Arduino Pin MISO D12 ถึง ATtiny Pin 6
    3. Arduino Pin SCK D13 ถึง ATtiny Pin 7
    4. Arduino Pin รีเซ็ต D10 เป็น ATtiny Pin 1
    5. Arduino Pin GND ถึง ATtiny Pin 4
    6. Arduino Pin VCC ถึง ATtiny Pin 8
    7. (>= อาจต้องใช้ฝาปิด 10uF บนพิน Arduino Uno RESET)
  5. เลือก ATtiny85 (ดูรูป):

    • บอร์ด: "ATtiny25/45/85"
    • ตัวจับเวลา 1 นาฬิกา: "CPU"
    • B. O. D.: "ผู้พิการ ก.พ.ศ."
    • LTO (1.6.11 + เท่านั้น): "ปิดการใช้งาน"
    • ชิป: "ATtiny85"
    • นาฬิกา: "8 MHz (ภายใน)" (รองรับ ATtiny85 และ ATtiny84)
    • นาฬิกา: "16 MHz (PLL)" (การตั้งค่าทางเลือกสำหรับ ATtiny85 เท่านั้น)
    • ท่าเรือ: ???
  6. เลือกโปรแกรมเมอร์:

    เครื่องมือ > โปรแกรมเมอร์: "Arduino as ISP" (ไม่ใช่ "ArduinoISP" !)

  7. ตั้งค่าฟิวส์ (นาฬิกา ฯลฯ):

    เครื่องมือ > เบิร์น Bootloader

  8. อัปโหลดรหัสนี้ (ต้องปิด LED ข้อผิดพลาดของโปรแกรมเมอร์ ไม่เช่นนั้นให้รีเซ็ต)
  9. เค้าโครงพิน ATtinyX5 (ATtiny85):

    1. พิน 1: PB5 (RST)
    2. ขา 2: PB3 (A3) - เชื่อมต่อเสริมผ่าน 220ohm ถึง 1<-TX
    3. ขา 3: PB4 (A2) - เชื่อมต่อกับ DATA. 1 สาย
    4. พิน 4: GND - เชื่อมต่อกับ GND
    5. ขา 5: PB0 (PWM) - เชื่อมต่อกับเซ็นเซอร์ I2C SDA
    6. ขา 6: PB1 (PWM) - เชื่อมต่อกับ LED ด้วย 4.7k ถึง GND
    7. Pin 7: PB2 (A1) - เชื่อมต่อกับเซ็นเซอร์ I2C SCL
    8. ขา 8: VCC - เชื่อมต่อกับ 5V

การทำงานกับ ATTiny85 ต้องการงานเพิ่มขึ้นอีกเล็กน้อย เนื่องจากคุณจำเป็นต้องได้รับไลบรารีเพิ่มเติมสำหรับการสื่อสาร I2C (adafruit/TinyWireM) และเอาต์พุตแบบอนุกรม (TinyDebugSerial) นอกจากนี้ เนื่องจากหน่วยความจำมีจำกัด คุณจึงอาจต้องการทำงานมากด้วย #define เช่น เพื่อลบการดีบักแบบอนุกรม ในตัวอย่าง คุณจะเห็นทั้งหมดนี้รวมกัน

สำหรับการทดสอบขั้นแรกให้ตรวจสอบว่า LED กะพริบด้วยความถี่ที่ถูกต้อง 0.5Hz หรือไม่ จากนั้นเชื่อมต่อกับบัส 1wire แล้วตรวจสอบอุปกรณ์ใหม่

แนะนำ: