電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>百葉窗控制開源分享

百葉窗控制開源分享

2022-11-14 | zip | 1.32 MB | 次下載 | 2積分

資料介紹

描述

介紹

剛買了一棟新房子,想把所有東西都自動(dòng)化,從百葉窗開始。看似簡(jiǎn)單的項(xiàng)目卻變成了一場(chǎng)噩夢(mèng):相對(duì)高功率的電機(jī)(150W)正在摧毀我的繼電器和三端雙向可控硅開關(guān),使用什么無線通信控制器以及如何使其工作并不明顯,噪音在線路中導(dǎo)致百葉窗的隨機(jī)激活(在半夜非常可怕)......最后我設(shè)法用非常便宜的組件解決了所有這些問題,希望我可以幫助其他人避免這些頭痛和很多時(shí)間。

不喜歡編程,但喜歡焊接?無論如何閱讀教程,最后你會(huì)發(fā)現(xiàn)一個(gè)分立電路,它的作用相同,但沒有智能

解釋

在控制電機(jī)時(shí),一個(gè)重要的問題是它們的電感,這會(huì)導(dǎo)致在嘗試打開電路時(shí),電流會(huì)持續(xù)流過您的分?jǐn)嘌b置,從而產(chǎn)生非常高的電壓。如果您嘗試使用小型繼電器在不采取任何預(yù)防措施的情況下斷開電路,它們的觸點(diǎn)會(huì)粘在一起,如果您使用三端雙向可控硅開關(guān)(固態(tài)繼電器),過電壓(在我的情況下,我測(cè)量的峰值超過 1600V)會(huì)破壞半導(dǎo)體。

我通過谷歌搜索意識(shí)到,其他人對(duì)此有疑問,但他們采取了簡(jiǎn)單、昂貴和龐大的方式,他們只是獲得更大的繼電器,仍然需要廉價(jià)的繼電器來激活更大的繼電器,而觸點(diǎn)仍然會(huì)受到影響并且可能最終失敗。作為一名工程師,我不能讓自己得不到最有效的解決方案。:) 在下面的示意圖中,您可以通過添加一個(gè)電阻器、一個(gè)電容器和一個(gè)變阻器來節(jié)省這個(gè)大繼電器。

壓敏電阻保護(hù)三端雙向可控硅開關(guān)免受過壓。電阻電容形成一個(gè) RC 緩沖電路,在斷路換向期間吸收能量。

[ PS:由于我在制作項(xiàng)目后很長(zhǎng)時(shí)間直接從腦海中寫出教程,前幾天仔細(xì)查看我的電路板我意識(shí)到,在實(shí)際電路中,我將電阻器和電容器放置在棕色和灰色線之間(根據(jù)原理圖顏色)每個(gè)電機(jī)而不是三端雙向可控硅觸點(diǎn)。這兩種解決方案都適用于這種情況,但第二種選擇的優(yōu)點(diǎn)是緩沖器不會(huì)永久連接到電源上。]

[ PS2:SebDominguez還用實(shí)際配置做了一個(gè)很好的架構(gòu):

?
poYBAGNtrb2AA-okAAMk7vjohfE964.png
實(shí)際執(zhí)行
?

]

開關(guān)不是為每個(gè)百葉窗使用一個(gè)引腳用于向上命令,另一個(gè)用于向下命令,而是共享一條公共線,指示百葉窗是否必須向上或向下。所以我們使用 5 個(gè)輸入而不是 8 個(gè)。不需要過濾器,輸入是軟件去抖動(dòng)的。

首先,Arduino 激活繼電器模塊以選擇電機(jī)方向,經(jīng)過一小段延遲后,繼電器觸點(diǎn)已經(jīng)到位,它激活三端雙向可控硅開關(guān),通過廉價(jià)的繼電器和三端雙向可控硅開關(guān)模塊為電機(jī)供電 230 VAC,沒有問題。斷開電路的過程是相反的,首先是三端雙向可控硅開關(guān),然后是繼電器,因此繼電器永遠(yuǎn)不會(huì)受到帶電換向的影響。

您可以使用一到四個(gè)電機(jī),無需修改代碼,如果您不使用其他電機(jī),擁有其他電機(jī)的邏輯不會(huì)有害,除非您需要其他用途的引腳,顯然。

在家里,我們有兩個(gè)故事,因此有兩個(gè)電路。由于遠(yuǎn)程命令必須是唯一的,因此我通過在上傳時(shí)注釋一行使代碼對(duì)其中任何一個(gè)都有效。如果您只安裝一個(gè)電路,則無需更改任何內(nèi)容,但如果您要構(gòu)建兩個(gè)電路,那么您已經(jīng)免費(fèi)獲得了解決方案。事實(shí)上我只是騙你的,我們有三個(gè)電路,但總共有 8 個(gè)百葉窗,在一個(gè)電路中,我們占用了所有四個(gè)電機(jī),但是其他四個(gè)百葉窗通過使用一個(gè) Arduino 中的前三個(gè)輸入并且只輸入數(shù)字而分成兩部分四個(gè)在第二。復(fù)制的電路對(duì)遠(yuǎn)程命令的反應(yīng)完全相同,但在沒有任何連接的情況下,沒有任何東西可以激活。:) 如果您使用的是代碼的 MySensors 版本,

抱歉,它不是很花哨和清晰,但它是真實(shí)的安裝,是很久以前制作的,不僅僅是為本教程準(zhǔn)備的電路,我無法在桌子上展示給你看。如您所見,它適合 22 x 15 x 5,2 厘米的壁箱,但非常緊湊。我的做法是用熱膠槍把所有東西都放進(jìn)一個(gè)打開的木箱里:實(shí)用、快捷、簡(jiǎn)單。

如果您將 Web IDE 用于 Arduino 草圖,它應(yīng)該會(huì)自動(dòng)找到所有需要的庫(kù)。

遙控器(可選)

本教程的目的是解決電感問題,但另外還有遠(yuǎn)程控制功能。

提供的代碼包括通過無線電模塊 nrf24l01+ 進(jìn)行遠(yuǎn)程控制的兩種方式:使用 MySensors(推薦),或通過發(fā)送帶有盲數(shù)和命令 0 或 1 的整數(shù)來向上或向下。

在這兩種情況下,我都使用 RPi 作為主機(jī),直接連接一個(gè) nRF24L01+ 模塊,并安裝了一個(gè)控制器 (Domoticz)。

對(duì)于第一個(gè)選項(xiàng),使用 MySensors,需要安裝 MySensors MQTT 網(wǎng)關(guān)。。在我的實(shí)現(xiàn)中,將其配置為本地主機(jī)中的以太網(wǎng)。按照鏈接中的步驟操作,這里有我的配置參數(shù)可以幫助你(檢查你是否需要相同的參數(shù)):

sudo ./configure --my-gateway=mqtt --my-controller-ip-address=127.0.0.1 --my-mqtt-publish-topic-prefix=domoticz/in/MyMQTT --my-mqtt-subscribe-topic -prefix=domoticz/out/MyMQTT --my-mqtt-client-id=mygateway1 --my-transport=rf24 --my-port=1883 --my-rf24-irq-pin=15

完成后,它在 Domoticz 中的集成非常簡(jiǎn)單:添加 HW MySensors MQTT 網(wǎng)關(guān),為節(jié)點(diǎn)供電,然后在設(shè)置新硬件時(shí)直接找到它。

對(duì)于第二個(gè)選項(xiàng),直接使用自定義應(yīng)用程序,而不是 MySensors,虛擬交換機(jī)執(zhí)行控制臺(tái)命令:

 ./remote -m XY 

(X:盲#,Y:動(dòng)作)。

在 Arduino 腳本的標(biāo)題中,您可以找到更多詳細(xì)信息。

這個(gè)遠(yuǎn)程命令的代碼在http://hack.lenotta.com/arduino-raspberry-pi-switching-light-with-nrf24l01/中描述Node.js部分和 Arduino 草圖,我們不需要他們和那個(gè)草圖實(shí)際上有一個(gè)錯(cuò)誤。我們需要的只是“燈開關(guān)應(yīng)用程序”部分。硬件部分也可用于無線電連接。順便說一句,始終將 10 uF 電容器放在無線電模塊電源引腳上。如果有空間,還可以考慮購(gòu)買帶有外部天線的無線電模塊。在室內(nèi),PCB 天線的范圍可能非常有限(小于 10 m),特別是如果模塊像這個(gè)項(xiàng)目一樣被封閉在墻壁中。

請(qǐng)記住,此代碼必須稍作修改,將無線電參數(shù)與 Arduino 匹配,并且使代碼僅發(fā)送一次命令,而不是在未收到響應(yīng)時(shí)重試最多 5 次,否則在丟失的情況下Arduino 反饋,您將看到您的百葉窗在作用-停止-作用-停止-作用。

Raspberry 的最終代碼如下所示:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
//RF24 radio("/dev/spidev0.0",8000000 , 25);  
//RF24 radio(RPI_V2_GPIO_P1_15, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ);
RF24 radio(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ);
//const int role_pin = 7;
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
//const uint8_t pipes[][6] = {"1Node","2Node"};
// hack to avoid SEG FAULT, issue #46 on RF24 github https://github.com/TMRh20/RF24.git
unsigned long  got_message;
void setup(void){
	//Prepare the radio module
	printf("\nPreparing interface\n");
	radio.begin();
	radio.setRetries( 15, 15);
	radio.setChannel(0x70);
	radio.setDataRate(RF24_250KBPS);
	radio.setPALevel(RF24_PA_MAX);
	radio.printDetails();
	radio.openWritingPipe(pipes[0]);
	radio.openReadingPipe(1,pipes[1]);
	//	radio.startListening();
}
bool sendMessage(int action){
	//This function send a message, the 'action', to the arduino and wait for answer
	//Returns true if ACK package is received
	//Stop listening
	radio.stopListening();
	unsigned long message = action;
	printf("Now sending  %lu...", message);
	//Send the message
	bool ok = radio.write( &message, sizeof(unsigned long) );
	if (!ok){
		printf("failed...\n\r");
	}else{
		printf("ok!\n\r");
	}	
	//Listen for ACK
	radio.startListening();
	//Let's take the time while we listen
	unsigned long started_waiting_at = millis();
	bool timeout = false;
	while ( ! radio.available() && ! timeout ) {
		//printf("%d", !radio.available());
		if (millis() - started_waiting_at > 1000 ){
			timeout = true;
		}
	}
	if( timeout ){
		//If we waited too long the transmission failed
		printf("Puta mierda, no me responde nadie...\n\r");
		return false;
	}else{
		//If we received the message in time, let's read it and print it
		radio.read( &got_message, sizeof(unsigned long) );
		printf("Yeah, me han respondido > %lu.\n\r",got_message);
		return true;
	}
}  
int main( int argc, char ** argv){
	char choice;
	setup();
	bool switched = false;
	int counter = 0;
	//Define the options
	while(( choice = getopt( argc, argv, "m:")) != -1){
		if (choice == 'm'){
			printf("\n Talking with my NRF24l01+ friends out there....\n");
			while(switched == false && counter < 1){   //Number of attemps to send the message
				switched = sendMessage(atoi(optarg));
				counter ++;
				sleep(1);
			}
		}else{
			// A little help:
			printf("\n\rIt's time to make some choices...\n");
			printf("\n\rTIP: Use -m idAction for the message to send. ");
			printf("\n\rExample (id number 12, action number 1): ");
			printf("\nsudo ./remote -m 121\n");
		}
		//return 0 if everything went good, 2 otherwise
		if (counter < 5)
			return 0;
		else
			return 2;
	}
} 

由于需要編譯等,我為您提供了簡(jiǎn)單的操作,并將您需要的所有內(nèi)容(僅適用于 Raspberry 端,Arduino 草圖如下)放在一個(gè) zip 文件中,其中包含修改后的源代碼、庫(kù)和編譯代碼樹莓派 3:

https://goo.gl/ocCwk3

如果你把它解壓到你的 RPi 中,你應(yīng)該可以運(yùn)行遠(yuǎn)程命令。

結(jié)果

在這里你可以看到我是如何實(shí)現(xiàn)一切的。

墻上的三對(duì)開關(guān)控制三個(gè)百葉窗。墻上的平板電腦顯示了帶有虛擬開關(guān)的 Domoticz 界面。平板電腦后面是 Raspberry,其中安裝了控制器等。Arduino 不在這里,它靠近上圖中的百葉窗;RPi 和 Arduino 通過無線電模塊無線連接。

在這里,您還可以看到 Google Home,它通過使用帶有 Webhooks 服務(wù)的 IFTTT 和 Domoticz 幫助我實(shí)現(xiàn)任何語(yǔ)音命令,例如“Hey Google,盲目”。如果您已經(jīng)達(dá)到了這一點(diǎn),那么您肯定可以毫無問題地使用語(yǔ)音命令。

在這里,您有一個(gè)非??焖俚?a target='_blank' class='arckwlink_none'>視頻顯示結(jié)果。

?

讓我知道本教程是否對(duì)您有所幫助!

此致,

戈美星

PS 作為好奇心的補(bǔ)充,或者因?yàn)槟阏娴挠憛捰?jì)算機(jī)、編程或其他什么,我首先嘗試在沒有任何智能的情況下離散地制作解決方案。這是結(jié)果:

?
poYBAGNtreuAESXIAACHbUdGSTY878.png
?

我什至搭建了它,電路完成了這項(xiàng)工作,但我在熟悉 Arduino 平臺(tái)之前就完成了,它更靈活且完全可靠,因此我不打算解釋它。如果它對(duì)您有任何用處,那就太好了,但這不是本教程的范圍,我不鼓勵(lì)使用它。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)