电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>百叶窗控制开源分享

百叶窗控制开源分享

2022-11-14 | zip | 1.32 MB | 次下载 | 免费

资料介绍

描述

介绍

刚买了一栋新房子,想把所有东西都自动化,从百叶窗开始。看似简单的项目却变成了一场噩梦:相对高功率的电机(150W)正在摧毁我的继电器和三端双向可控硅开关,使用什么无线通信控制器以及如何使其工作并不明显,噪音在线路中导致百叶窗的随机激活(在半夜非常可怕)......最后我设法用非常便宜的组件解决了所有这些问题,希望我可以帮助其他人避免这些头痛和很多时间。

不喜欢编程,但喜欢焊接?无论如何阅读教程,最后你会发现一个分立电路,它的作用相同,但没有智能

解释

在控制电机时,一个重要的问题是它们的电感,这会导致在尝试打开电路时,电流会持续流过您的分断装置,从而产生非常高的电压。如果您尝试使用小型继电器在不采取任何预防措施的情况下断开电路,它们的触点会粘在一起,如果您使用三端双向可控硅开关(固态继电器),过电压(在我的情况下,我测量的峰值超过 1600V)会破坏半导体

我通过谷歌搜索意识到,其他人对此有疑问,但他们采取了简单、昂贵和庞大的方式,他们只是获得更大的继电器,仍然需要廉价的继电器来激活更大的继电器,而触点仍然会受到影响并且可能最终失败。作为一名工程师,我不能让自己得不到最有效的解决方案。:) 在下面的示意图中,您可以通过添加一个电阻器、一个电容器和一个变阻器来节省这个大继电器。

压敏电阻保护三端双向可控硅开关免受过压。电阻电容形成一个 RC 缓冲电路,在断路换向期间吸收能量。

[ PS:由于我在制作项目后很长时间直接从脑海中写出教程,前几天仔细查看我的电路板我意识到,在实际电路中,我将电阻器和电容器放置在棕色和灰色线之间(根据原理图颜色)每个电机而不是三端双向可控硅触点。这两种解决方案都适用于这种情况,但第二种选择的优点是缓冲器不会永久连接到电源上。]

[ PS2:SebDominguez还用实际配置做了一个很好的架构:

 
poYBAGNtrb2AA-okAAMk7vjohfE964.png
实际执行
 

]

开关不是为每个百叶窗使用一个引脚用于向上命令,另一个用于向下命令,而是共享一条公共线,指示百叶窗是否必须向上或向下。所以我们使用 5 个输入而不是 8 个。不需要过滤器,输入是软件去抖动的。

首先,Arduino 激活继电器模块以选择电机方向,经过一小段延迟后,继电器触点已经到位,它激活三端双向可控硅开关,通过廉价的继电器和三端双向可控硅开关模块为电机供电 230 VAC,没有问题。断开电路的过程是相反的,首先是三端双向可控硅开关,然后是继电器,因此继电器永远不会受到带电换向的影响。

您可以使用一到四个电机,无需修改代码,如果您不使用其他电机,拥有其他电机的逻辑不会有害,除非您需要其他用途的引脚,显然。

在家里,我们有两个故事,因此有两个电路。由于远程命令必须是唯一的,因此我通过在上传时注释一行使代码对其中任何一个都有效。如果您只安装一个电路,则无需更改任何内容,但如果您要构建两个电路,那么您已经免费获得了解决方案。事实上我只是骗你的,我们有三个电路,但总共有 8 个百叶窗,在一个电路中,我们占用了所有四个电机,但是其他四个百叶窗通过使用一个 Arduino 中的前三个输入并且只输入数字而分成两部分四个在第二。复制的电路对远程命令的反应完全相同,但在没有任何连接的情况下,没有任何东西可以激活。:) 如果您使用的是代码的 MySensors 版本,

抱歉,它不是很花哨和清晰,但它是真实的安装,是很久以前制作的,不仅仅是为本教程准备的电路,我无法在桌子上展示给你看。如您所见,它适合 22 x 15 x 5,2 厘米的壁箱,但非常紧凑。我的做法是用热胶枪把所有东西都放进一个打开的木箱里:实用、快捷、简单。

如果您将 Web IDE 用于 Arduino 草图,它应该会自动找到所有需要的库。

遥控器(可选)

本教程的目的是解决电感问题,但另外还有远程控制功能。

提供的代码包括通过无线电模块 nrf24l01+ 进行远程控制的两种方式:使用 MySensors(推荐),或通过发送带有盲数和命令 0 或 1 的整数来向上或向下。

在这两种情况下,我都使用 RPi 作为主机,直接连接一个 nRF24L01+ 模块,并安装了一个控制器 (Domoticz)。

对于第一个选项,使用 MySensors,需要安装 MySensors MQTT 网关。在我的实现中,将其配置为本地主机中的以太网按照链接中的步骤操作,这里有我的配置参数可以帮助你(检查你是否需要相同的参数):

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 中的集成非常简单:添加 HW MySensors MQTT 网关,为节点供电,然后在设置新硬件时直接找到它。

对于第二个选项,直接使用自定义应用程序,而不是 MySensors,虚拟交换机执行控制台命令:

 ./remote -m XY 

(X:盲#,Y:动作)。

在 Arduino 脚本的标题中,您可以找到更多详细信息

这个远程命令的代码在http://hack.lenotta.com/arduino-raspberry-pi-switching-light-with-nrf24l01/中描述Node.js部分和 Arduino 草图,我们不需要他们和那个草图实际上有一个错误。我们需要的只是“灯开关应用程序”部分。硬件部分也可用于无线电连接。顺便说一句,始终将 10 uF 电容器放在无线电模块电源引脚上。如果有空间,还可以考虑购买带有外部天线的无线电模块。在室内,PCB 天线的范围可能非常有限(小于 10 m),特别是如果模块像这个项目一样被封闭在墙壁中。

请记住,此代码必须稍作修改,将无线电参数与 Arduino 匹配,并且使代码仅发送一次命令,而不是在未收到响应时重试最多 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;
	}
} 

由于需要编译等,我为您提供了简单的操作,并将您需要的所有内容(仅适用于 Raspberry 端,Arduino 草图如下)放在一个 zip 文件中,其中包含修改后的源代码、库和编译代码树莓派 3:

https://goo.gl/ocCwk3

如果你把它解压到你的 RPi 中,你应该可以运行远程命令。

结果

在这里你可以看到我是如何实现一切的。

墙上的三对开关控制三个百叶窗。墙上的平板电脑显示了带有虚拟开关的 Domoticz 界面。平板电脑后面是 Raspberry,其中安装了控制器等。Arduino 不在这里,它靠近上图中的百叶窗;RPi 和 Arduino 通过无线电模块无线连接。

在这里,您还可以看到 Google Home,它通过使用带有 Webhooks 服务的 IFTTT 和 Domoticz 帮助我实现任何语音命令,例如“Hey Google,盲目”。如果您已经达到了这一点,那么您肯定可以毫无问题地使用语音命令。

在这里,您有一个非常快速的视频显示结果。

 

让我知道本教程是否对您有所帮助!

此致,

戈美星

PS 作为好奇心的补充,或者因为你真的讨厌计算机、编程或其他什么,我首先尝试在没有任何智能的情况下离散地制作解决方案。这是结果:

 
poYBAGNtreuAESXIAACHbUdGSTY878.png
 

我什至搭建了它,电路完成了这项工作,但我在熟悉 Arduino 平台之前就完成了,它更灵活且完全可靠,因此我不打算解释它。如果它对您有任何用处,那就太好了,但这不是本教程的范围,我不鼓励使用它。


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费