ฉันค่อนข้างใหม่กับหัวข้อ Arduino และพยายามทำบางสิ่งเพื่อทำงานร่วมกัน
ก่อนอื่น ฉันลองตั้งค่ามอเตอร์กระแสตรงที่สามารถควบคุมผ่าน PWM ได้ ซึ่งทำงานได้อย่างสมบูรณ์แบบเมื่อใช้แบบสแตนด์อโลน ฉันสามารถสตาร์ท/หยุดมอเตอร์และเปลี่ยนความเร็วได้ขึ้นอยู่กับค่าที่ฉันส่งไปยังพิน PWM
อย่างที่สอง ฉันพยายามใช้ตัวรับสัญญาณไร้สาย RF-5V เพื่อทำงานกับรีโมทคอนโทรลจากปลั๊กไฟแบบสวิตช์ระยะไกล สำหรับอันนี้ ฉันทำตามคำแนะนำใน วิธีสร้าง 433mhz ดมกลิ่น. ทั้งหมดนี้ก็ใช้ได้ผลเช่นกัน ฉันสามารถรับรหัสที่แตกต่างกันได้ ขึ้นอยู่กับว่าปุ่มใดบนรีโมทที่ฉันกำลังกด
ตอนนี้ส่วนที่สนุกได้เริ่มต้นขึ้นแล้ว ฉันต้องการรวมทั้งสองโปรเจ็กต์เป็นหนึ่งเดียว ดังนั้นฉันจึงสามารถใช้รีโมทเพื่อสตาร์ท/หยุดมอเตอร์ได้ ดังนั้นฉันจึงได้วงจรต่อไปนี้:
(ขอบคุณบางท่านที่ชี้ให้เห็นว่าวงจรไม่ตรงกับแบบร่าง ผมทำผิดพลาดตอนวาด แต่ถึงแม้จะต่อสายเข้ากับพินด้านขวาก็ยังใช้งานได้ตามที่อธิบายไว้)
และรหัสต่อไปนี้ (ซึ่งส่วนหนึ่งมาจากคำแนะนำที่กล่าวถึงข้างต้น):
#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 ซึ่งช่วยให้ใครบางคนสามารถแก้ไขปัญหานี้ได้ ไม่อยู่ที่นี่. ใช้งานไม่ได้เช่นกัน
คำถามก็คือ: มีใครรู้วิธีรวมสองสิ่งนี้เข้าด้วยกันเพื่อให้สามารถใช้ตัวรับสัญญาณไร้สายเพื่อรับคำสั่งและเปิด/ปิดมอเตอร์ด้วยได้หรือไม่
int motorPin = 5;
แต่ในแผนผังคุณต่อมอเตอร์เข้ากับพิน 3 และที่พิน 5 คุณมีตัวรับส่งสัญญาณ 433... คุณแก้ไขถูกต้องหรือไม่? - person frarugi87   schedule 09.01.2017