Iluminação de escada automática

Boa tarde, queridos leitores, gostaria de apresentar a minha versão do projeto para iluminação automática de escadas com base no controlador Arduino Pro Mini. Talvez para alguém este artigo se torne a base de seus próprios projetos, mas para mim será bom ler críticas estritas nos comentários.

Objetivo do projeto: montar a iluminação da escada no segundo andar, nas seguintes condições.
  1. A automação funciona apenas no escuro.
  2. .
  3. .
  4. .


Eu usei o familiar Arduino Pro Mini como controlador.

Primeiro, sobre a escada em si, o número de degraus é 11, a largura é 550 mm. No total, você precisa de 6 m de fita LED (encomendada 2 peças de 5 m 5050 SMD), com um grau de proteção IP67 (ou seja, proteção contra poeira e água), para poder limpar a poeira e não pensar em ficar sob tensão ou danos fita.

Depois de conectar uma faixa de LED de 5 metros, a corrente através dela era de apenas 2,5 A, ou seja, para uma faixa de LED de 6 metros, é necessária uma fonte de alimentação de 36 W. A escolha ficou com a fonte de alimentação chinesa 12 V 8.3 A 100 watts. 100, é claro, muito, mas eram necessários 12 V para outro projeto, então eu me conectei a ele.

Usei um circuito simples de redução de tensão usando o estabilizador de tensão L7805CV e dois capacitores de cerâmica de 0,1 μF e 0,33 μF como fonte de alimentação para o próprio controlador, bem como os sensores (fonte de alimentação de 5 V).

imagem

Como sensores de movimento, ele parou nos sensores ultrassônicos HC-SR04, pois eles emitem um feixe estreito de pulsos ultrassônicos e você pode ajustar a distância de resposta. Assim, ele pode ser configurado para rastrear a interseção do momento na primeira e na última etapas. Ir para os detalhes das características, o método de conexão, o princípio do sensor não vejo o ponto na Internet muita informação sobre eles.

A questão da medição da iluminação também foi resolvida de maneira bastante simples com a ajuda de um circuito divisor de tensão no qual o fotorresistor Gl5516 é usado como um resistor variável.

Em seguida, considere o número de contatos usados ​​11 digitais para as etapas, 4 para dois sensores e um analógico para medir a iluminação. Um total de 15 digitais, o que não nos dá o Arduino. Sem pensar duas vezes, usei o chip 74NS595N, ou melhor, uma cascata de dois registradores de turno para aumentar o número de saídas digitais do Arduino.

Depois de ler a literatura e as opiniões dos entusiastas do rádio amador, coloquei um capacitor de cerâmica de 0,1 μF na 12ª perna do primeiro registro STcp, supostamente para minimizar o ruído quando um pulso de pressão era aplicado. Quando eu testo a cascata “na mesa”, ela realmente funciona melhor com o capacitor, especialmente quando eu primeiro forneço energia ao microcircuito.

Uma coisa é conectar uma carga leve, como um LED, a um Arduino, outra é conectar um pedaço de faixa de LED com 500-550 mm de comprimento (a corrente máxima da saída digital do Arduino é de 40 mA). O chip ULN2003A (conjunto de Darlington) se mostrou mais acessível para mim, a corrente máxima em uma saída é de 0,5 A.

imagem

Quero observar que o pino de eco do segundo sensor chega ao 13º pino do Arduino, no qual o LED do próprio controlador está localizado.

Isso foi feito de propósito, por conveniência, no momento em que a condição "está escuro o suficiente para iniciar a pesquisa dos sensores?". Está satisfeito, o LED no 13º contato começa a piscar.

Eu desenhei o quadro no Sprint-Layout. Ele enfatizou que o microcircuito e o controlador foram removidos, soldaram os soquetes SCS-14 e 16, bem como o soquete na placa PBS 2 × 12 2,54. O único aspecto negativo foi arquear as pernas dos chips 74NC595N na outra direção.

imagem

Desenhando


Ao compilar o esboço, apenas uma biblioteca ultrassônica foi usada (para trabalhar com sensores HC-SR04) e que poderia ser dispensada. Eu tive que mexer com operações de bit, pois é necessário carregar dois bytes na cascata de registros de deslocamento de uma certa maneira (no esboço, fiz explicações claras).

Esboço
// *** V1***
//
#include "Ultrasonic.h"

//
#define Trig_1 10 // .
#define Echo_1 11
#define Trig_2 12 // .
#define Echo_2 13
#define Ds 8 // Ds/SDI 75HC595N_1.
#define STcp 7 // STcp/RCLK 75HC595_1, 2.
#define SHcp 6 // SHcp/SRCLK 75HC595_1, 2.
#define LDR A0 // .

Ultrasonic Sensor_1(Trig_1, Echo_1); // .
Ultrasonic Sensor_2(Trig_2, Echo_2); // .

//
const int Limit = 100; // .
const float Min_Disrance = 50.0; /* ,
55 .*/

boolean Up_Sensor_Started = false; // .
boolean Down_Sensor_Started = false; // .

const int Read_Delay = 50; // .

unsigned int leds = 0; // .
const int N = 10; /* .
! 14- 2 .*/
const int T_Ladder = 3000; // .
const int T_Stair = 500; // .

void setup()
{
pinMode(Ds, OUTPUT);
pinMode(STcp, OUTPUT);
pinMode(SHcp, OUTPUT);
// Serial.begin(9600); // 9600 .
}

void loop()
{
int LDR_Value = analogRead(LDR); // .
// Serial.println(LDR_Value); // 0 1023.
if(LDR_Value < Limit) // " ?".
{
Down_Sensor(); // .
if(Down_Sensor_Started) // .
// , ...
{
Down_Sensor_Started = false; // .
Up_Sensor_Started = false;
Turing_Upward(); // .
}
else
// ...
{
Up_Sensor(); // ...
if(Up_Sensor_Started) // .
// , ...
{
Down_Sensor_Started = false; // .
Up_Sensor_Started = false;
Turing_Downward(); // .
}
}
delay(Read_Delay); // .
}
}

//
void Up_Sensor()
{
if((Sensor_1.Ranging(CM) < Min_Disrance) && (Sensor_1.Ranging(CM) > 0))
// , ...
{
Up_Sensor_Started = true; // .
}
}

//
void Down_Sensor()
{
if((Sensor_2.Ranging(CM) < Min_Disrance) && (Sensor_2.Ranging(CM) > 0))
// , ...
{
Down_Sensor_Started = true; // .
}
}

//
void updateShiftRegister()
{
digitalWrite(STcp, LOW); // .
byte First = lowByte(leds); /* ,
shiftOut 8 .*/
byte Second = highByte(leds);
shiftOut(Ds, SHcp, MSBFIRST, Second); // 1- .
shiftOut(Ds, SHcp, MSBFIRST, First); // 2- .
digitalWrite(STcp, HIGH); // .
}

//
void Turing_Upward()
{
for (int i = 0; i <= N; i++)
{
bitSet(leds, i); // N 1 ( HIGH).
updateShiftRegister(); // .
delay(T_Stair); // .
}
// Serial.println(leds, BIN); // .
delay(T_Ladder); // .
leds = 0; // .
updateShiftRegister(); // .
}

//
void Turing_Downward()
{
for (int i = N; i >= 0; i--)
{
bitSet(leds, i); // N 1 ( HIGH).
updateShiftRegister(); // .
delay(T_Stair); // .
}
delay(T_Ladder); // .
leds = 0; // .
updateShiftRegister(); // .
}


Recursos de montagem


Agora, sobre a instalação, é melhor colocar a faixa de LED em um perfil especialmente criado para ela, mas seu custo é bastante alto. Peguei um cabo de 12 × 12 canais, cortei o excesso com uma faca de escritório em brasa e aconteceu o seguinte.

imagem

Para ocultar os sensores HC-SR04, encontrei uma caixa IEK de 20 mm para eles.

imagem

A instalação da blindagem também não foi difícil, uma vez que a instalação dos bornes parafusados ​​foi planejada com antecedência na placa.

imagem

Sumário


O projeto resultante cumpriu todas as tarefas, durante a operação da automação, nenhuma falha ou comentário foi observado.

A única coisa, na minha opinião, poderia ser tornar o escudo mais compacto e fechá-lo completamente de mãos indiscretas.



Pacote


Arduino Pro Mini Atmega 328 Controlador 5V 16MHz1 1
Sensor ultra-sônico HC-SR042
Fonte de alimentação 12 V 8.3 A 100 W1 1
Fita de LED 5050 SMD 5 m IP652
Chip 74NS595N2
Circuito integrado ULN2003A2
PBS 1 × 40 2,54 slot1 1
Fio MGShV 0,75
Cabo PUNP 2 × 2,5
Cabo de telefone SHTLP-4 0.12 × 7
1 Um disjuntor unipolar1 1
Disjuntor monopolar 10 A1 1
Photoresistor Gl55161 1
Regulador de tensão L7805CV1 1
Capacitor de cerâmica 0,33 uF1 1
Capacitor de cerâmica 0,1 uF2
Resistor de 10k ohm1 1
Soquete para chip SCS-142
Soquete para SCS-162
Caixa de distribuição IEK 20 mm2
Borne de parafuso de dois pinos13
Fibra de vidro 95 × 105 mm
Textolite
SRK através do terminal de passagem12
Canal de cabo 12 × 12 × 2000
Canal de cabo 16 × 16 × 2000
Consumíveis (hot melt, cola Moment Crystal, solda, resina, fluxo TAGS)
Fixadores (cavilhas, porcas, parafusos, buchas, braçadeiras)

Obrigado pela atenção.

Source: https://habr.com/ru/post/pt397315/


All Articles