arduino uno พร้อมมอเตอร์ขับเคลื่อน PWM และตัวรับสัญญาณไร้สาย 433mhz ไม่ทำงาน

ฉันค่อนข้างใหม่กับหัวข้อ Arduino และพยายามทำบางสิ่งเพื่อทำงานร่วมกัน

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

อย่างที่สอง ฉันพยายามใช้ตัวรับสัญญาณไร้สาย RF-5V เพื่อทำงานกับรีโมทคอนโทรลจากปลั๊กไฟแบบสวิตช์ระยะไกล สำหรับอันนี้ ฉันทำตามคำแนะนำใน วิธีสร้าง 433mhz ดมกลิ่น. ทั้งหมดนี้ก็ใช้ได้ผลเช่นกัน ฉันสามารถรับรหัสที่แตกต่างกันได้ ขึ้นอยู่กับว่าปุ่มใดบนรีโมทที่ฉันกำลังกด

ตอนนี้ส่วนที่สนุกได้เริ่มต้นขึ้นแล้ว ฉันต้องการรวมทั้งสองโปรเจ็กต์เป็นหนึ่งเดียว ดังนั้นฉันจึงสามารถใช้รีโมทเพื่อสตาร์ท/หยุดมอเตอร์ได้ ดังนั้นฉันจึงได้วงจรต่อไปนี้:

วงจรของมอเตอร์ขับเคลื่อน pwm พร้อมตัวรับสัญญาณไร้สาย

(ขอบคุณบางท่านที่ชี้ให้เห็นว่าวงจรไม่ตรงกับแบบร่าง ผมทำผิดพลาดตอนวาด แต่ถึงแม้จะต่อสายเข้ากับพินด้านขวาก็ยังใช้งานได้ตามที่อธิบายไว้)

และรหัสต่อไปนี้ (ซึ่งส่วนหนึ่งมาจากคำแนะนำที่กล่าวถึงข้างต้น):

#include <RCSwitch.h>

// init 433MHz lib
RCSwitch mySwitch = RCSwitch();
unsigned long lOldValue=0;  // to check for consecutive reads on 433MHz
int motorPin = 5; // PWM-Pin to use for motor

void setup()
{
  pinMode(motorPin, OUTPUT);

  Serial.begin(9600);

  // set-up rf receiver
  mySwitch.enableReceive(0);  // 433MHz Receiver on interrupt 0 => that is pin #2
}

void loop()
{
  if (mySwitch.available())
  {
    int value = mySwitch.getReceivedValue();

    // only react, if at least two times same value received
    if (value == lOldValue)
    {
      if (value == 0)
      {
        Serial.print("Unknown encoding");
      }
      else
      {
        Serial.print("Received ");
        Serial.print( mySwitch.getReceivedValue() );
        Serial.print(" / ");
        Serial.print( mySwitch.getReceivedBitlength() );
        Serial.print("bit ");
        Serial.print("Protocol: ");
        Serial.println( mySwitch.getReceivedProtocol() );

    // One of the keys on the remote
    if (value == 274393) {
      Serial.println("got start code, starting motor");
          analogWrite(motorPin, 100); // start the motor
    }

    // another key on the remote
    if (value == 270384) {
      Serial.println("got stop code, stopping motor");
          analogWrite(motorPin, 0); // stop the motor
    }
      }
    }
    lOldValue = value;
    mySwitch.resetAvailable();
  }
}

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

เมื่อฉันได้รับค่าที่เหมาะสมสำหรับการสตาร์ทมอเตอร์ มอเตอร์จะเริ่มหมุนจริงๆ ดังนั้นจึงใช้งานได้เช่นกัน

และส่วนที่สนุกสนานก็เริ่มต้นขึ้น: ทันทีที่ฉันใช้ฟังก์ชัน analogWrite เพื่อส่งข้อมูลไปยังพอร์ต PWM ที่มอเตอร์เชื่อมต่ออยู่ ตัวรับสัญญาณไร้สายจะหยุดทำงาน (หรืออย่างน้อยฉันก็ไม่ได้รับค่าอีกต่อไปเมื่อกดปุ่มบน ระยะไกล).

ฉันพบโพสต์/คำอธิบายปัญหาที่คล้ายกันสองสามรายการบนเน็ตซึ่งบอกให้ลองทำสิ่งต่อไปนี้:

  • ใช้พินอื่นสำหรับ PWM (เนื่องจากข้อขัดแย้งที่อาจเกิดขึ้นได้) ฉันก็ลองเหมือนกันพฤติกรรมเดียวกัน
  • ใช้แหล่งจ่ายไฟภายนอกแทนสาย USB ซึ่งช่วยให้ใครบางคนสามารถแก้ไขปัญหานี้ได้ ไม่อยู่ที่นี่. ใช้งานไม่ได้เช่นกัน

คำถามก็คือ: มีใครรู้วิธีรวมสองสิ่งนี้เข้าด้วยกันเพื่อให้สามารถใช้ตัวรับสัญญาณไร้สายเพื่อรับคำสั่งและเปิด/ปิดมอเตอร์ด้วยได้หรือไม่


person Olli    schedule 09.01.2017    source แหล่งที่มา
comment
หากคุณถอดมอเตอร์ออก ออกจากโปรแกรมเดิม และอาจใส่ LED พร้อมตัวต้านทาน จะช่วยแก้ปัญหาได้หรือไม่ หากแก้ไขได้ ปัญหาคือพลังงานไม่เพียงพอหรือเสียงรบกวน คุณสามารถแก้ปัญหาแรกได้โดยการจ่ายไฟให้วงจรจากภายนอก (ลองใช้แหล่งจ่ายไฟแบบตั้งโต๊ะ จากนั้นคุณจะลองใช้แบตเตอรี่ก้อนเดียว แต่เพียงยืนยันสิ่งนี้ก่อนที่จะเริ่มออกแบบ) หากมีเสียงรบกวน ให้วางตัวเก็บประจุไว้ข้างแหล่งจ่ายไฟของมอเตอร์ (ยิ่งมากยิ่งดี อย่างน้อยก็สองสามร้อยไมโครฟารัด)   -  person frarugi87    schedule 09.01.2017
comment
@ Frarugi87 น่าตลกที่ปัญหายังคงมีอยู่เมื่อฉันไม่ได้เชื่อมต่อมอเตอร์เข้ากับวงจร แม้แต่การเรียก analogWrite โดยไม่ต้องต่อฮาร์ดแวร์ก็ให้ผลลัพธ์ในลักษณะเดียวกัน   -  person Olli    schedule 09.01.2017
comment
เดี๋ยวก่อน คุณเขียน int motorPin = 5; แต่ในแผนผังคุณต่อมอเตอร์เข้ากับพิน 3 และที่พิน 5 คุณมีตัวรับส่งสัญญาณ 433... คุณแก้ไขถูกต้องหรือไม่?   -  person frarugi87    schedule 09.01.2017
comment
@ Frarugi87 โอ้โง่ฉัน ... ฉันทำกราฟิกวงจรผิดจริงๆ .. ขออภัยด้วย .. สิ่งนี้เกิดขึ้นหลังจากที่ฉันเปลี่ยนพิน PWM สองสามครั้งและสับสน ... :( แต่การมีสายเคเบิลเหมือนโค้ดใช้มัน มันยังใช้งานไม่ได้   -  person Olli    schedule 09.01.2017
comment
มันจะทำงานเมื่อคุณไม่เชื่อมต่อมอเตอร์ และ ไม่เชื่อมต่อไดโอดหรือไม่?   -  person dandavis    schedule 10.01.2017
comment
@dandavis ขอบคุณสำหรับคำใบ้ .. ฉันจะลองคืนนี้! ยังไม่ได้ลองใช้ชุดค่าผสมนี้!   -  person Olli    schedule 10.01.2017
comment
ถ้ามันถอยหลังการเปิดใช้งาน npn จะดึงราง 5v ลง...   -  person dandavis    schedule 10.01.2017


คำตอบ (1)


ฉันมีปัญหาเดียวกันในอดีต ปัญหาคือความสามารถของ Arduino ในการจัดหาทั้งสองอย่าง ฉันแนะนำให้ใช้แหล่งจ่ายไฟภายนอกสำหรับเครื่องรับหรือสำหรับมอเตอร์ (วิธีที่ดีที่สุดสำหรับมอเตอร์ แต่ตามวงจรของคุณมันเป็นไปไม่ได้) เช่น 545043YwRobot และจ่ายไฟอีกอันจาก Arduino (I หวังว่านี่ไม่ใช่สิ่งที่คุณลองแล้ว หากเป็นเช่นนั้นฉันขอโทษ)

หวังว่ามันจะช่วยได้

โยอาฟ

person YoavShtainer    schedule 09.01.2017
comment
ขอบคุณสำหรับข้อมูลนั้น ฉันจะพยายามตรวจสอบว่าสิ่งนี้จะช่วยแก้ปัญหาได้หรือไม่ แต่เนื่องจากการออกแบบของฉันมีพื้นที่จำกัด ฉันจึงไม่สามารถเพิ่มแหล่งจ่ายไฟสองตัวในกรณีของฉันได้ ฉันหวังว่าจะสามารถใช้บล็อก 9v เพียงบล็อกเดียวเพื่อจ่ายไฟให้กับวงจรทั้งหมด มีความคิดเห็นเกี่ยวกับเรื่องนี้บ้างไหม? - person Olli; 09.01.2017
comment
ลองไปที่ Arduino และควบคุมโดยตรงจากแบตเตอรี่ - person YoavShtainer; 09.01.2017