我想從我的 433MHz模塊中獲得可能的最佳範圍。經過大量搜索和閱讀後,我相信我應該能夠在 10m室內以自由視線覆蓋。
[更新]
在評論中的一些技巧之後,我做了幾件事。看起來像是用Arduino代替Pi接收了Arduino,我現在得到了一個額外的儀表,距離現在只有1,5m,所以仍然很糟糕。就像我們在荷蘭語中所說的那樣,“就像發射箭上的一聲巨響”,我現在使用兩個彼此平行的鞭狀天線。
在將接收器固定在Pi上之前,我現在首先嘗試使接收器上的接收最大化。接收Arduino。
[更新2]
再進行一些測試後,我到達了約6米的範圍。當發射器位於1厘米的木頭後面時,可以回到30厘米。
我當前的433MHz模塊正在進入垃圾箱,謝謝大家的時間。我將尋找更穩定的替代方案,並可能嘗試使用其他類似的/更好的433MHz模塊,例如: http://www.ebay.com/itm/433MHz-Superheterodyne-RF-Link-kits-3400-ARM-MCU- Transmitter-and-Reveiver- / 281169560721?hash = item4177030491:g:SUcAAOxyaTxTRKJn
[更新3]
新模塊進行了巨大的更改。現在,我可以毫無問題地從家裡發送數據了。還沒有地面飛機(將嘗試使用TwoD!)。仍在5V發射器電壓上!
我之前曾問過一個有關433MHz設置的問題,因此為了全面披露:
433MHz發送不接收
我當前的範圍約為40 / 50cm,這並不多,因為我在接收器處使用了約17cm的直天線,在發射器處使用了線圈天線:
http://www.instructables.com/id/ 433-MHz-線圈加載天線/
這些是我使用的模塊:
http://www.ebay.com/itm/-/221524421949? roken = cUgayN&soutkn = xKBBUo
僅僅是供參考,我使用了這些很棒的工作泵:
http://www.ebay.com/itm/-/321779742264?roken=cUgayN&soutkn=hk1lrB
我嘗試了許多天線組合,並將發射機電壓提高到12V,但是它並沒有太大幫助。我的目標是至少達到10m的視線。
- 我注意到我的Pi向接收器輸出4.77V。
- 這4個Penlite現在輸出約5V,因此發射器功率很低。
- 我還想測試的是在發射器的V和GND上添加10uF電容,但是我必須等待它們交付。
- 我有10mw的電容發射器,它們可能只是沒用。
- 接收器站在揚聲器和低音炮的前面,測試時我將它們關閉。
- 433MHz模塊成對出現。我不尊重這一點,並且將任何接收器與任何發送器一起使用,想知道這是否是一個問題。我的最終目標是在一個接收器上安裝3個發射器。
- 由於我有多個Tx / Rx模塊,因此我將它們互換以排除DOA模塊。
- 還嘗試了這些螺旋天線,範圍更糟 http://www.ebay.com/itm/-//171271811976?roken=cUgayN&soutkn=TmOnpH
我的Arduino使用Arduino向VirtualWire發送了1000波特的數據Raspberry Pi,在Pi端,我使用PIGPIO和以下代碼:
if __name__ ==“ __main__”:導入時間導入datetime導入Pigpio導入vw導入json導入來自request.auth導入的請求HTTPDigestAuth#設置接收433MHz端口RX = 27#設置波特率433MHz BPS = 1000#連接到本地Pi。 pi = pigpio.pi()#指定Pi,rx gpio和波特率。 rx = vw.rx(pi,RX,BPS)#空消息msg = 0#保存時間start = time.time()#運行3秒鐘,同時(time.time()-start)< 36000:#計數msg每個週期msg + = 1#睡眠0.4秒.sleep(0.4)#在接收器準備就緒時運行,而rx.ready():#將接收到的字符串入消息
message =(“ .join(chr(c)for rx.get()中的c))##將接收到的消息打印到屏幕打印(message)#創建數據字典data = {} data ['meting'] = message [ 8:11] data ['bericht'] =消息[4:7] data ['plant'] =消息[1:3] data ['timestamp'] = str(datetime.datetime.utcnow()。isoformat() )#將數據打印到屏幕上print(data)#本地數據備份的設置文件名filename = str('data /'+ data ['plant'] + data ['bericht'] + data ['meting'] +' .json')#將JSON數據文件以open(文件名,'w')作為輸出文件寫入磁盤:json.dump(data,outfile)#發送數據url ='http:// server:8000 / v1 / documents?database = plantjes&extension = json'#設置標頭標頭= {'Content-Type':'application / json'}#執行請求r = request.post(url,json = data,auth = HTTPDigestAuth('plantje', 'password'))#打印請求響應print r#取消接收數據rx.cancel()#停止在pi.stop()引腳上監聽PIGPIO
此腳本發送對將Hygro傳感器轉換為JSON數據庫。
Arduino使用以下代碼:
#include <VirtualWire.h>#include <Sleep_n0m1.h>String pid =“ p02”; const int led_pin = 11 ; const int send_pin = 12; const int hygroSensor = 0; int hygroPower = 8; const int pump_pin = 5; int watering_level = 900; int count = 0;睡眠睡眠;無符號長睡眠時間;無效setup(){//串行控制台設置Serial.begin(9600); Serial.println(“設置”); //循環睡眠時間(以毫秒為單位)sleepTime = 10000; // virtualwire設置vw_set_tx_pin(transmit_pin); //設置引腳模式pinMode(hygroPower,OUTPUT); pinMode(led_pin,輸出); pinMode(泵腳,輸出); //每秒位數vw_setup(1000);}無效循環(){
//延遲以允許喚醒延遲(100)之後串行輸出準備就緒; //循環計數器計數++; //打開濕度傳感器模塊digitalWrite(hygroPower,HIGH); //等待濕度傳感器開始延遲(1000); //讀取模擬引腳0上的輸入:int measure = AnalogRead(hygroSensor); //啟動燈以顯示正在發送的digitalWrite(led_pin,HIGH); //發送Serial.println(“ Sending:” + String(measure))的日誌時刻; //創建&發送隨機消息id String mid =“ m” + String(random(100,999)); //發送數據String hygrodata =“ d” + String(measure); dataSend(pid + mid + hygrodata); //停止指示燈以顯示正在發送的digitalWrite(led_pin,LOW); //等待第二個延遲(1000); //睡眠代碼if(count > = 3){//重置計數器count = 0; //運行泵例程// waterpump(measure,mid,pid); //將睡眠日誌記錄到串行控制台Serial.print(“ Going to sleep now ..”); //設置睡眠模式sleep.pwrDownMode(); //關閉hygro模塊電源digitalWrite(hygroPower,LOW); //睡眠時間:sleepTime sleep.sleepDelay(sleepTime); }} //數據發送funtionint dataSend(String data){//聲明消息長度的int int msglen; //設置消息的長度+1 msglen = data.length()+1; //聲明字符數組char wallet [msglen]; //將字符串放入數組data.toCharArray(envelope,msglen); //將數據記錄到串行監視器Serial.println(data); //發送數據vw_send((uint8_t *)envelope,sizeof(envelope)); //等待發送完成vw_wait_tx(); //返回1表示成功返回1;} //泵功能int waterpump(int measure,String mid,String pid){//日誌度量Serial.println(measure); // //需要時澆水if(措施> watering_level){//打開水泵2秒鐘digitalWrite(pump_pin,HIGH);延遲(3000); digitalWrite(pump_pin,LOW); //發送泵數據dataSend(pid + mid +“ pump”); }}
這可以控制消息的感測,還可以控制需要時用來自動給植物澆水的水泵。