ברצוני לקבל את ה טווח הטוב ביותר האפשרי מ מודולי 433MHz שלי. לאחר הרבה חיפוש וקריאה, אני משוכנע שאצליח לכסות את 10 מ 'בתוך הבית עם קו ראייה חופשי
. [עדכון]
אחרי כמה טיפים בתגובות שיניתי כמה דברים. זה נראה כמו שארדואינו מקבל במקום פי, אני מקבל מטר נוסף, 1,5 מ 'עכשיו כל כך נורא. ו 'כמפץ על חץ האש' כמו שאנו אומרים בהולנדית, אני משתמש כעת בשתי אנטנות שוט המקבילות זו לזו.
לפני שעבר לתקן את הקליטה על ה- Pi שלי, אני מנסה תחילה למקסם את הקליטה קבלת ארדואינו. זה עושה את זה הרבה יותר פשוט לחקירה.
[עדכון 2]
אחרי כמה בדיקות נוספות הגעתי לטווח של כ -6 מטרים. כשהמשדר נמצא מאחורי 1 ס"מ של עץ, זה חוזר ל 30 ס"מ.
המודולים הנוכחיים של 433MHz שלי נכנסים לפח האשפה, אני מודה לכולכם על זמנכם. אני אחפש אלטרנטיבה יציבה יותר ואולי אנסה כמה מודולים אחרים / טובים יותר של 433 מגה הרץ כמו אלה: http://www.ebay.com/itm/433MHz-Superheterodyne-RF-Link-kits-3400-ARM-MCU- משדר ומשחזר- / 281169560721? Hash = item4177030491: g: SUcAAOxyaTxTRKJn
[עדכון 3]
המודולים החדשים ביצעו שינוי עצום. עכשיו אני יכול לשלוח את הנתונים שלי מכל הבית שלי בלי בעיות בכלל. אין עדיין מטוס קרקע (ינסה את ה- TwoD!). עדיין במתח משדר 5V!
שאלתי שאלה לפני כן לגבי הגדרת 433MHz שלי כדי לחשוף מלא:
433MHz שליחה לא מקבל
הטווח הנוכחי שלי הוא בערך 40/50 ס"מ, זה לא הרבה מכיוון שאני משתמש באנטנה ישרה ~ 17 ס"מ במקלט ובאנטנת סליל במשדר:
http://www.instructables.com/id/ 433-MHz-Coil-loaded-antenne /
אלו המודולים בהם אני משתמש:
http://www.ebay.com/itm/-/221524421949? roken = cUgayN&soutkn = xKBBUo
ורק לידיעתך, אני משתמש במשאבות עבודה מדהימות אלה:
http://www.ebay.com/itm/-/321779742264?roken=cUgayN&soutkn=hk1lrB
ניסיתי שילובי אנטנות רבים וגם מעלה את מתח המשדר ל 12 וולט אבל זה לא עוזר הרבה. המטרה שלי היא להגיע לפחות ל -10 מטר קו ראייה.
- אני שם לב שה- Pi שלי מוציא 4.77V למקלט.
- ארבעת הפנלים מפיקים כעת סביב 5 וולט כך שעוצמת המשדר נמוכה.
- מה שאני גם רוצה לבדוק זה להוסיף כובעים של 10uF ל- V ול- GND של המשדר, אבל אני צריך לחכות שהם יימסרו.
- יש לי את הגרסה 10mw של משדר, הם עשויים להיות פשוט חסרי תועלת.
- המקלט עומד מול רמקול וסאב וופר, אני מכבה אותם כשאני בודק.
- המודולים 433MHz הגיעו בזוגות. לא כיבדתי את זה והשתמשתי בשום מקלט עם משדר כלשהו, תוהה אם זו בעיה. המטרה הסופית שלי היא 3 משדרים על מקלט אחד.
- מכיוון שיש לי מספר מודולי Tx / Rx, החלפתי אותם כדי לא לכלול מודולי DOA.
- ניסיתי גם את האנטנות האלה של Helical, שנעשו רק טווח גרוע יותר; http://www.ebay.com/itm/-/171271811976?roken=cUgayN&soutkn=TmOnpH
הארדואינו שלי משתמש ב- VirtualWire כדי לשלוח עם 1000 באוד אל שלי Raspberry Pi, בצד ה- Pi אני משתמש ב- PIGPIO ובקוד הבא:
אם __name__ == "__main__": זמן ייבוא זמן ייבוא זמן יבוא pigpio יבוא פולקסווגן יבוא json בקשות ייבוא מבקשות. ייבוא אמיתי HTTPDigestAuth # הגדרה מקבלת יציאת 433MHz RX = 27 # הגדרת קצב שידור 433MHz BPS = 1000 # התחבר ל- Pi מקומי. pi = pigpio.pi () # ציין את Pi, rx gpio ו- baud. rx = vw.rx (pi, RX, BPS) # הודעה ריקה msg = 0 # שמור את הזמן start = time.time () # הפעל למשך 3 שניות בזמן (time.time () - התחל) < 36000: # Count msg לכל מחזור msg + = 1 # שינה למשך .4 שנייה. שינה (0.4) # הפעל בזמן שהמקלט מוכן בזמן ש- rx.ready (): # מחרוזת הצטרף לתווים שהתקבלו להודעה
הודעה = ("". להצטרף (chr (c) עבור c ב- rx.get ())) # הדפס את ההודעה שהתקבלה להדפסת מסך (הודעה) # צור נתונים מילון נתונים = {} נתונים ['meting'] = הודעה [ 8:11] data ['bericht'] = הודעה [4: 7] data ['plant'] = הודעה [1: 3] data ['timestamp'] = str (datetime.datetime.utcnow (). Isoformat () ) # הדפס את הנתונים להדפסת המסך (נתונים) # הגדר שם קובץ לגיבוי נתונים מקומי שם הקובץ = str ('data /' + data ['plant'] + data ['bericht'] + data ['meting'] + ' .json ') # כתוב קובץ נתונים JSON לדיסק עם פתוח (שם קובץ,' w ') כקובץ: json.dump (data, outfile) # שליחת נתונים url =' http: // שרת: 8000 / v1 / מסמכים? = plantjes&extension = json '# כותרות הגדרה של כותרות = {' תוכן-סוג ':' application / json '} # ביצוע בקשה r = בקשות.פוסט (url, json = data, auth = HTTPDigestAuth (' plantje ', 'סיסמה')) # הדפסת תגובה לבקשת הדפסה הדפסה r # ביטול קבלת הנתונים rx.cancel () # הפסק את האזנת PIGPIO על סיכות pi.stop ()
סקריפט זה שולח את המדידה של את חיישן Hygro למסד נתונים ב- JSON. זה עובד כמו קסם.
הארדואינו משתמש בקוד זה:
#include <VirtualWire.h> # include <Sleep_n0m1.h>String pid = "p02"; const int led_pin = 11 const int transmit_pin = 12; const int hygroSensor = 0; int hygroPower = 8; const int pump_pin = 5; int watering_level = 900; int int = 0; שינה לישון; sleeptime זמן לא חתום; התקנה בטלה () {// קונסולה טורית התקנת Serial.begin (9600); Serial.println ("הגדרת"); // מחזור זמן שינה ב- ms sleepTime = 10000; // הגדרת virtualwire vw_set_tx_pin (transmit_pin); // הגדרת מצבי סיכה pinMode (hygroPower, OUTPUT); pinMode (led_pin, OUTPUT); pinMode (pump_pin, OUTPUT); // ביטים לשנייה vw_setup (1000);} loop loop () {
// עיכוב כדי לאפשר פלט סדרתי להיות מוכן לאחר עיכוב להתעורר (100); // ספירת מוני מחזור ++; // הפעל את מודול חיישן ההיגרו digitalWrite (hygroPower, HIGH); // המתן מעט עד שחיישן ההיגרו יתחיל לעכב (1000); // קרא את הקלט על סיכה אנלוגית 0: int measure = analogRead (hygroSensor); // התחל אור כדי להציג שידור digitalWrite (led_pin, HIGH); // יומן הרגע של שליחת Serial.println ("שליחה:" + מחרוזת (מידה)); // צור & שלח מזהה הודעה אקראי מחרוזת אמצע = "m" + מחרוזת (אקראית (100, 999)); // שליחת נתונים מחרוזת hygrodata = "d" + מחרוזת (מידה); dataSend (pid + mid + hygrodata); // עצור אור כדי להציג שידור digitalWrite (led_pin, LOW); // המתן עיכוב שני (1000); // קוד שינה אם (count > = 3) {// reset count count = 0; // הפעלת שגרת משאבות // משאבת מים (מידה, אמצע, פיד); // יומן שינה לקונסולה הסדרתית Serial.print ("הולך לישון עכשיו .."); // הגדר מצב שינה sleep.pwrDownMode (); // כבה את מודול ההיגרו כוח digitalWrite (hygroPower, LOW); // שינה ל: sleepTime sleep.sleepDelay (sleepTime); }} // נתונים ששולחים נתונים funtionintSend (נתוני מחרוזת) {// מצהירים int לאורך משך ההודעה int msglen; // הגדר אורך ההודעה +1 msglen = data.length () + 1; // להכריז על מערך תווים מעטפת char [msglen]; // שים מחרוזת בנתוני המערך. toCharArray (מעטפה, msglen); // יומן נתוני צג סדרתי Serial.println (נתונים); // שלח נתונים vw_send ((uint8_t *) מעטפה, sizeof (מעטפה)); // המתן לשליחה לסיום vw_wait_tx (); // להחזיר 1 להחזרת הצלחה 1;} // משאבת פונקציונציה משאבת מים (מידה int, מחרוזת באמצע, מחרוזת pid) {// יומן מידה Serial.println (מידה); // מים במידת הצורך אם (מדוד > waterering_level) {// הפעל משאבה 2 שניות digitalWrite (pump_pin, HIGH); עיכוב (3000); digitalWrite (pump_pin, LOW); // שלח נתוני נתוני משאבה שלח (pid + mid + "pump"); }}
זה שולט בחישה של המסרים וגם במשאבת המים שבה אני משתמש להשקות את המפעל שלי באופן אוטומטי בעת הצורך. זה עובד כמו קסם.