สารบัญ:
- ขั้นตอนที่ 1:
- ขั้นตอนที่ 2: การทดสอบเอาต์พุตของเครื่องมือ
- ขั้นตอนที่ 3: การสอบเทียบ
- ขั้นตอนที่ 4: การเขียนโปรแกรม Arduino
- ขั้นตอนที่ 5: ภาพถ่ายเพิ่มเติมบางส่วน
- ขั้นตอนที่ 6: ติดตั้งเข้า
- ขั้นตอนที่ 7: แค่รูปถ่าย
- ขั้นตอนที่ 8: คำสุดท้าย
วีดีโอ: เครื่องกำเนิด/ทดสอบ 4-20ma โดยใช้ Arduino: 8 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:02
เครื่องปั่นไฟขนาด 4-20mA มีจำหน่ายบนอีเบย์ แต่สำหรับคนชอบส่วน DIY ของสิ่งต่างๆ และใช้ชิ้นส่วนที่ฉันมีอยู่
ฉันต้องการทดสอบอินพุตแบบอะนาล็อกของ PLC เพื่อตรวจสอบการอ่าน scada ของเรา และเพื่อทดสอบเอาต์พุตของเครื่องมือ 4-20mA มีตัวแปลงกระแสเป็นแรงดันจำนวนมากและตัวแปลงแรงดันเป็นกระแสสำหรับ arduino บนอีเบย์ พวกเขาต้องการการสอบเทียบ ฉันสามารถใช้สิ่งนี้เพื่อปรับเทียบคอนเวอร์เตอร์ที่พบในอีเบย์และสิ่งที่ชอบได้
ฉันตัดสินใจว่าจะ DIY เครื่องกำเนิดไฟฟ้าและผู้ทดสอบ ณ จุดนี้ยังคงเป็นงานที่กำลังดำเนินการและเป็นต้นแบบ
ฉันมีระบบเสียง 2.1 แบบเก่าที่ไม่ได้ใช้งาน (ลำโพงขนาดเล็ก) ดังนั้นฉันจึงใช้กล่องลำโพงอันใดอันหนึ่งเป็นกล่องหุ้ม ฉันยังมีแอมพลิฟายเออร์ที่ตายเพราะฟ้าผ่า ฉันถอดขั้วต่อลำโพงออกจากแอมพลิฟายเออร์นั้นเพื่อให้เชื่อมต่อได้ง่าย ฉันตั้งใจที่จะสร้าง PCB ในอนาคตและตู้ที่ดีกว่า
เสบียง:
ส่วนรายการ.
LCD // 20x4 (ปรับโค้ดหากคุณมีขนาดเล็กกว่า)
LM7808 // ตัวควบคุม 8 โวลต์
LED // ชนิดหรือขนาดใดก็ได้
ตัวต้านทานสำหรับ LED // เหมาะสำหรับประเภท LED และ 8volt
ตัวต้านทาน 100 โอห์ม + ตัวต้านทาน 47 โอห์มในซีรีย์ // จะใช้เป็นตัวต้านทานแบ่ง
ตัวต้านทาน 10K // Arduino อนาล็อกในการป้องกันไฟฟ้าแรงสูง
ตัวต้านทาน 22K // เพื่อหยุด A0 จากการลอยตัว
ตัวต้านทาน Trimpot 100 ohm + 47 ohm ในซีรีย์ // ตัวจำลอง PT100
ตัวเก็บประจุ 35 โวลต์ // ฉันใช้ 470uF เพียงเพื่อลดความผันผวนของแรงดันไฟฟ้าลง
RTD (ตัวแปลงสัญญาณ PT100) // Span ไม่สำคัญ (ช่วง)
DIODE (สำหรับการป้องกันขั้ว)
INA219
Arduino
ขั้นตอนที่ 1:
การปฏิบัติตามแผนผังนี้จะช่วยให้คุณเริ่มต้นได้ว่าจะเพิ่มชิ้นส่วนและต่อสายตรงไหน
LM7808 อนุญาตให้อินพุตสูงสุด 25 โวลต์ซึ่งดีสำหรับระบบ PLC โดยทั่วไปจะใช้แหล่งจ่ายไฟ 24 โวลต์ เพิ่มฮีทซิงค์ไปยังตัวควบคุมและอย่าใช้เป็นเวลานาน แรงดันไฟตก 16 โวลต์ทำให้ตัวควบคุมสร้างความร้อนได้มาก
แหล่งจ่ายอินพุตจะป้อนตัวควบคุมและเชื่อมต่อกับ INA219 VIN ในการกำหนดค่านี้ INA219 จะสามารถวัดแรงดันไฟจ่ายที่ถูกต้องลบด้วยแรงดันตกจากไดโอด คุณควรวัดแรงดันตกคร่อมไดโอดและเพิ่มลงในโค้ดเพื่อให้คุณได้รับค่าแรงดันไฟที่ถูกต้อง
จาก INA219 VOUT ถึง RTD+ จะเพิ่มพลังให้ RTD RTD- ลงกราวด์ทำให้วงจรสมบูรณ์
ในการทดสอบการ์ดแอนะล็อก PLC คุณจะต้องเชื่อมต่อ RTD- กับอินพุตบนการ์ดแอนะล็อกและกราวด์จากการ์ดไปยังกราวด์ Arduino (ตรวจสอบให้แน่ใจว่าได้ถอดอุปกรณ์ใดๆ ที่เชื่อมต่อกับช่องที่กำลังทดสอบอยู่)
R5 และ LED1 แสดงว่าเปิดเครื่องแล้ว
ตัวควบคุมจะป้อนเข้าสู่ Arduino VIN (arduino มีตัวควบคุมในตัวถึง 5 โวลต์)
พิน Arduino 5V ไปที่ INA219 เพื่อจ่ายไฟให้กับชิปออนบอร์ด INA219 GND ถึงกราวด์ Arduino
ทริมที่ปัดน้ำฝนเป็น RTD PIN1 และทริมหม้อพิน 3 ถึง RTD พิน 2 จะจำลองการเชื่อมต่อ PT100 (สลับสายไฟหากหมุนหม้อตัดแต่งตามเข็มนาฬิกาไม่เพิ่ม mA)
ขั้นตอนที่ 2: การทดสอบเอาต์พุตของเครื่องมือ
ในการทดสอบเอาต์พุตของเครื่องมือ จำเป็นต้องมีชิ้นส่วนพิเศษ เช่น ตัวต้านทาน shunt ตัวต้านทาน 0.25W ปกติจะทำงานได้ดี คุณสามารถปล่อยตัวต้านทาน shunt และเพิ่ม INA219 ตัวที่สองเพื่อทดสอบเอาต์พุตของอุปกรณ์ เหลือตัวเดียวก็เลยใช้ตัวต้านทานแทน
การทดสอบโดยใช้การแบ่งสามารถทำได้ในด้านลบของอุปกรณ์เท่านั้น หากคุณใช้ด้านบวก คุณจะจัดหา Arduino ของคุณด้วยแรงดันไฟฟ้าที่อนุญาตมากกว่า 4 เท่าและปล่อยควันออกมา
เพิ่มตัวต้านทาน shunt แบบอนุกรมด้วยลวดลบของเครื่องมือ ด้านข้างของตัวแบ่งที่ใกล้กับอุปกรณ์มากที่สุดจะกลายเป็นแอนะล็อกเชิงบวกสำหรับ Arduino ด้านอื่น ๆ ของ shunt ใกล้กับแหล่งจ่ายไฟมากที่สุดจะกลายเป็นกราวด์ของ Arduino ที่ทำวงจรอินพุตแบบอะนาล็อกให้สมบูรณ์
ตัวต้านทาน shunt 150 โอห์มเป็นค่าสูงสุดที่ควรใช้เมื่อใช้ Arduino ตัวต้านทานมีแรงดันตกคร่อมเป็นเส้นตรงไปยัง mA ที่ไหลผ่าน ยิ่ง mA มาก แรงดันไฟฟ้าก็จะยิ่งมากขึ้น
ที่กระแส 20mA # 150ohm*0.02A = 3volt เป็น Arduino
ที่กระแส 4mA # 150ohm*0.004A = 0.6volt เป็น Arduino
ตอนนี้คุณอาจต้องการให้แรงดันไฟฟ้าใกล้เคียงกับ 5 โวลต์เพื่อให้คุณสามารถใช้ ADC เต็มรูปแบบของ Arduino (ไม่ใช่ความคิดที่ดี)
RTD สามารถเข้าถึงเอาต์พุต 30.2mA (ของฉันได้) 150โอห์ม*0.03A = 4.8โวลต์ ที่ใกล้ที่สุดเท่าที่ฉันอยากจะเป็น
เว็บไซต์อื่นระบุว่าใช้ตัวต้านทาน 250ohm
ที่กระแส 20mA # 250ohm*0.02A = 5volt เป็น Arduino
ที่กระแส 30mA # 250ohm*0.03A = 7.5volt เป็น Arduino
คุณเสี่ยงที่จะเผา ADC และ Arduino ของคุณ
ในการทดสอบเครื่องมือภาคสนาม ให้นำแบตเตอรี่ขนาด 12 โวลต์ติดตัวไปด้วยและเชื่อมต่อกับอินพุตแหล่งจ่าย การใช้แหล่งพลังงานภายนอกจะไม่ส่งผลต่อการตั้งค่า PLC ปัจจุบัน
ในการทดสอบการ์ดอินพุตแบบอะนาล็อกในสนาม ให้นำแบตเตอรี่ 12 โวลต์ติดตัวไปด้วย ถอดอุปกรณ์ + ออกจากวงจร ต่อกราวด์กับกราวด์ของเครื่องมือและ RTD- กับสายเครื่องมือที่ถอดออก
ขั้นตอนที่ 3: การสอบเทียบ
ในการปรับเทียบการอ่านค่าความต้านทาน shunt ของคุณ ให้ต่อ RTD- เข้ากับ shunt Analog เข้า ตั้งค่า trim pot เพื่อให้ mA ที่สร้างขึ้นคือ 4mA หาก mA ของอุปกรณ์ไม่เท่ากัน ให้แก้ไขค่าแรกในโค้ดที่บรรทัดที่ 84 การเพิ่มค่านี้จะทำให้การอ่าน mA ลดลง
จากนั้นตั้งหม้อตัดแต่งของคุณเพื่อสร้าง 20mA หาก mA ของอุปกรณ์ไม่เท่ากัน ให้แก้ไขค่าที่สองในรหัสที่บรรทัดที่ 84
ดังนั้น 4-20mA ของคุณจะกลายเป็น 0.6-3volts (ตามทฤษฎี) เกินขอบเขตเพียงพอ การใช้ไลบรารี่จาก eRCaGuy การสุ่มตัวอย่างมากเกินไปจะทำให้คุณอ่านข้อมูลได้ดีขึ้นและมีเสถียรภาพ
หวังว่าคุณจะอ่านสิ่งนี้ นี่เป็นคำแนะนำครั้งแรกของฉัน ดังนั้นโปรดอย่ากังวลหากฉันทำผิดพลาดที่ไหนสักแห่งหรือทิ้งอะไรไว้
โปรเจ็กต์นี้อาจจะไม่ใช่วิธีที่ดีที่สุดที่จะทำ แต่มันได้ผลสำหรับฉันและสนุกกับการทำมัน
ความคิดบางอย่างที่ฉันมีพิเศษ…
เพิ่มเซอร์โวเพื่อหมุนหม้อตัดแต่งภายในกล่อง
เพิ่มปุ่มกดเพื่อหมุนเซอร์โวไปทางซ้ายหรือขวา
เพิ่มเซ็นเซอร์อุณหภูมิแบบดิจิตอลไปยังฮีทซิงค์เรกูเลเตอร์เพื่อเตือนความร้อนที่เป็นอันตราย
ขั้นตอนที่ 4: การเขียนโปรแกรม Arduino
#รวม
// #include // Uncomment ถ้าคุณใช้ LCD กับ shift register
#รวม
#รวม
#รวม
#รวม
//A4 = (SDA)
//A5 = (SCL)
Adafruit_INA219 ina219;
LiquidCrystal LCD (12, 11, 5, 4, 3, 2);
// LiquidCrystal_SR จอแอลซีดี (3, 4, 2); // Uncomment ถ้าคุณใช้ LCD กับ shift register
// | | |_สลักสลัก
// | \_ เข็มนาฬิกา
// \_ ข้อมูล/เปิดใช้งานพิน
ไบต์ bitsOfResolution = 12; //สั่งความละเอียดเกินจริง
numSamplesToAvg แบบยาวที่ไม่ได้ลงนาม = 20; //จำนวนตัวอย่างที่ความละเอียดเกินที่ต้องการและค่าเฉลี่ย
ADC_prescaler_t ADCSpeed = ADC_DEFAULT;
ก่อนหน้าMillis แบบยาวที่ไม่ได้ลงนาม = 0;
shuntvoltage ลอย = 0.0; //จาก INA219
แรงดันบัสลอย = 0.0; //จาก INA219
ลอยปัจจุบัน_mA = 0.0; //จาก INA219
แรงดันโหลดลอย = 0.0; //จาก INA219
โฟลต Arduinovoltage = 0.0; //การคำนวณแรงดันไฟฟ้าจาก A0 pin
A0analogReading แบบยาวที่ไม่ได้ลงนาม = 0;
ไบต์ analogIn = A0;
float ma_mapped = 0.0; // แผนที่แรงดันไฟฟ้าจาก A0 ถึง 4-20mA
การตั้งค่าเป็นโมฆะ () {
adc.setADCSpeed(ADCSpeed);
adc.setBitsOfResolution (บิตของความละเอียด);
adc.setNumSamplesToAvg(numSamplesToAvg);
uint32_t ความถี่ปัจจุบัน;
ina219.begin();
ina219.setCalibration_32V_30mA(); // แก้ไขไลบรารีเพื่อความแม่นยำมากขึ้นใน mA
lcd.begin(20, 4); // เริ่มต้น LCD
lcd.clear();
lcd.home (); // กลับบ้าน
lcd.print("*******************");
ล่าช้า (2000);
lcd.clear();
}
วงเป็นโมฆะ ()
{
ไม่ได้ลงนามยาว currentMillis = millis();
const ช่วงยาว = 100;
//&&&&&&&&&&&&&&&&&
อ่านอุปกรณ์ I2C เป็นระยะและทำการคำนวณ
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
ถ้า (currentMillis - PreviousMillis >= ช่วง) {
มิลลิวินาทีก่อนหน้า = ปัจจุบันมิลลิวินาที;
ช่วงเวลา ();
}
Print_To_LCD(); // ฉันอาจไม่จำเป็นต้องอัปเดต LCD อย่างรวดเร็วและสามารถย้ายไปด้านล่าง Interval()
}
โมฆะ
ช่วงเวลา () {
shuntvoltage = ina219.getShuntVoltage_mV();
แรงดันบัส = ina219.getBusVoltage_V();
current_mA = ina219.getCurrent_mA();
loadvoltage = (แรงดันบัส + (shuntvoltage / 1000)) + 0.71; // +0.71 คือแรงดันไฟไดโอดของฉันตก
A0analogReading = adc.newAnalogRead (แอนะล็อกใน);
arduinovoltage = (5.0 * A0analogReading); //คำนวณเป็น mV
ma_mapped = แผนที่ (arduinovoltage, 752, 8459, 30, 220) / 10.0; // แผนที่ไม่สามารถใช้ทุ่นลอยได้ เพิ่ม 0 หลังค่าที่แมปแล้วหารด้วย 10 เพื่อรับค่าโฟลตที่อ่านได้
//การทำแผนที่จากการคำนวณแรงดันไฟฟ้าช่วยให้อ่านค่าได้เสถียรยิ่งขึ้น จากนั้นใช้การอ่านข้อมูลดิบของ adc
ถ้า (shuntvoltage >= -0.10 && shuntvoltage <= -0.01) // เมื่อไม่มีการโหลด INA219 มีแนวโน้มที่จะอ่านด้านล่าง -0.01 ฉันก็ทำได้
{
ปัจจุบัน_mA = 0;
แรงดันบัส = 0;
แรงดันโหลด = 0;
แรงดันไฟฟ้ากระแสสลับ = 0;
}
}
โมฆะ
Print_To_LCD() {
lcd.setCursor(0, 0);
if (ma_mapped < 1.25) {// เมื่อไม่มีกระแสนี่คือการอ่าน mA ของฉัน ดังนั้นฉันจึงทิ้งมันไป
lcd.print("* เครื่องกำเนิด 4-20mA *");
}
อื่น {
lcd.print("** เครื่องทดสอบอนาล็อก **");
}
lcd.setCursor(0, 1);
lcd.print("อุปกรณ์:");
lcd.setCursor(10, 1);
ถ้า (ma_mapped < 1.25) {
lcd.print("ไม่มีอุปกรณ์");
}
อื่น {
lcd.print(ma_mapped);
}
lcd.print("mA");
lcd.setCursor(0, 2);
lcd.print("สร้าง:");
lcd.setCursor(10, 2);
lcd.print(current_mA);
lcd.print("mA");
lcd.setCursor(0, 3);
lcd.print("อุปทาน:");
lcd.setCursor(10, 3);
lcd.print (แรงดันโหลด);
lcd.print("วี");
}
ขั้นตอนที่ 5: ภาพถ่ายเพิ่มเติมบางส่วน
ขั้วต่อลำโพงเครื่องขยายเสียง LED ขับเคลื่อนโดยเครื่องกำเนิดไฟฟ้าปัจจุบัน (RTD) การเดินสายการ์ดแบบอะนาล็อกจะเข้ามาแทนที่ LED
เทอร์มินอลด้านซ้ายสุดสำหรับอินพุตแหล่งจ่าย ขั้วต่อทางด้านขวาสำหรับใส่อุปกรณ์
ขั้นตอนที่ 6: ติดตั้งเข้า
ทุกอย่างดูเหมือนจะพอดี ฉันใช้ซิลิโคนเพื่อยึดสิ่งของบางอย่างไว้ด้วยกันชั่วคราว หม้อตัดแต่งเป็นซิลิโคนที่ด้านบนขวา เจาะรูเล็กไว้ล่วงหน้า ฉันสามารถปรับกระแสจากด้านบนของกล่อง
ขั้นตอนที่ 7: แค่รูปถ่าย
ขั้นตอนที่ 8: คำสุดท้าย
ฉันได้ทดสอบเอาต์พุตของอุปกรณ์นี้กับ Allan Bradley PLC แล้ว ผลลัพธ์ดีมาก ฉันได้เต็มช่วง ฉันได้ทดสอบอุปกรณ์นี้ด้วยเซ็นเซอร์ความดัน 4-20mA ที่มีจอ LCD ในตัว กลับได้ผลดีมาก การอ่านของฉันถูกปิดโดยทศนิยมสองสามตำแหน่ง
ฉันเขียนโค้ด Arduino ในแท็บ ใน PLC จะเรียกว่ารูทีนย่อย ทำให้การดีบักง่ายขึ้นสำหรับฉัน
แนบเป็นไฟล์ข้อความของแท็บเหล่านั้น
แนะนำ:
ทดสอบ Arduino Bare ด้วยซอฟต์แวร์เกมโดยใช้ Capacitive Input & LED: 4 ขั้นตอน
ทดสอบ Bare Arduino ด้วยซอฟต์แวร์เกมโดยใช้ Capacitive Input & LED: "Push-It" เกมแบบโต้ตอบโดยใช้บอร์ด Arduino เปล่า ไม่จำเป็นต้องใช้ชิ้นส่วนภายนอกหรือสายไฟ (ใช้อินพุต 'สัมผัส' แบบ capacitive) ดังที่แสดงไว้ด้านบน แสดงให้เห็นว่ามันทำงานบนกระดานสองบอร์ดที่แตกต่างกัน Push-It มีวัตถุประสงค์สองประการ เพื่อสาธิตอย่างรวดเร็ว/v
DIY Lab Bench Power Supply [สร้าง + ทดสอบ]: 16 ขั้นตอน (พร้อมรูปภาพ)
DIY Lab Bench Power Supply [สร้าง + ทดสอบ]: ในคำแนะนำ / วิดีโอนี้ฉันจะแสดงให้คุณเห็นว่าคุณสามารถสร้างแหล่งจ่ายไฟสำหรับห้องปฏิบัติการตัวแปรของคุณเองซึ่งสามารถส่ง 30V 6A 180W (10A MAX ภายใต้ขีด จำกัด พลังงาน) ขีด จำกัด กระแสไฟขั้นต่ำ 250-300mA นอกจากนี้คุณจะเห็นความแม่นยำ โหลด การป้องกันและเ
PCB ทดสอบ ESP-07: 4 ขั้นตอน
ESP-07 Test PCB: ดังนั้น Lazy Old Geek (LOG) นี้จึงเขียน Instructables บางส่วนในโมดูล ESP8266: https://www.instructables.com/id/ESP8266-as-Arduin…https://www.instructables.com /id/ESP8266-as-Arduin…https://www.instructables.com/id/2020-ESP8266/Before เขียน las
เครื่องกำเนิดเพลงตามสภาพอากาศ (เครื่องกำเนิด Midi ที่ใช้ ESP8266): 4 ขั้นตอน (พร้อมรูปภาพ)
เครื่องกำเนิดเพลงตามสภาพอากาศ (เครื่องกำเนิด Midi ที่ใช้ ESP8266): สวัสดี วันนี้ฉันจะอธิบายวิธีสร้างเครื่องกำเนิดเพลงตามสภาพอากาศของคุณเอง โดยใช้ ESP8266 ซึ่งคล้ายกับ Arduino และตอบสนองต่ออุณหภูมิ ฝน และความเข้มของแสง อย่าคาดหวังว่าจะทำให้ทั้งเพลงหรือคอร์ดโปรแกรม
ทดสอบ Ping ESP8266: 4 ขั้นตอน
การทดสอบ Ping ESP8266: Qui en tant que joueurs en ligne n'a pas connu les horrors lags ? Les énormes montées de ping causées par votre connexion ou encore les déconnexions en pleine partie classée ? N'ayant pas la fibre, et étant 5 chez moi, ces problèmes sont monnaies… เพิ่มเติม