W Progressive Automations oferujemy wiele opcji sterowania Twoim siłownikiem liniowym. Od prostych rozwiązań, takich jak przełączniki kołyskowe, po bardziej zaawansowane kontrolery, jak PA-35 Wi-Fi Control Box, mamy wiele opcji plug-and-play. Jednak czasem wymagania projektu i potrzeby klientów są nieco bardziej wyjątkowe niż to, co oferują te możliwości. Wtedy z pomocą przychodzą mikrokontrolery. W tym artykule pokażemy, jak możemy zmieniać pozycję siłownika w zależności od ilości światła w otoczeniu, zapewniając unikalną i zaawansowaną formę sterowania siłownikiem liniowym.
Czego będziesz potrzebować?
Do tego projektu potrzebne jest Arduino (w tym przypadku Arduino Uno), fotorezystor (znany także jako fotoopornik lub LDR), jeden rezystor 10 kΩ, 2‑kanałowy moduł przekaźników oraz, oczywiście, siłownik.
Wybór siłownika liniowego
W wielu przypadkach tego typu wyzwalacz stosujemy w aplikacjach zewnętrznych, takich jak zasilany energią słoneczną siłownik drzwi kurnika. Trzeba rozważyć, w jakim środowisku będzie pracował Twój siłownik, i upewnić się, że ma odpowiednią klasę szczelności IP. Aby w tym pomóc, nasz przewodnik po klasach szczelności IP znajdziesz tutaj. Musimy też upewnić się, że dobierzesz właściwą długość skoku i wymaganą siłę siłownika. W tym celu możesz odwołać się do jednego z wielu naszych wpisów na blogu tutaj. W istocie rodzaj użytego siłownika całkowicie zależy od Twojej aplikacji oraz surowości środowiska.
Okablowanie

Okablowanie w tym projekcie siłownika zasilanego energią słoneczną wygląda następująco:
LDR do Arduino
- Przewód LDR 1 – Masa
- Przewód LDR 2 – 5 V (przez rezystor 10 kΩ)
- Przewód LDR 2 – pin analogowy 0
Moduł przekaźników do Arduino
- VCC – 5 V
- GND – GND
- IN1 – pin 2
- IN2 – pin 3
Moduł przekaźników do zasilacza i siłownika
- +12 V do NC1 (styk normalnie zamknięty w przekaźniku 1)
- -12 V do NO1 (styk normalnie otwarty w przekaźniku 1)
- NC1 do NC2
- NO1 do NO2
- COMMON1 do przewodu 1 siłownika
- COMMON2 do przewodu 2 siłownika
Korzystając z 2‑kanałowego modułu przekaźników, powyższe instrukcje pokazują, jak okablować ten projekt. To bardzo prosty układ, łatwy do zaprogramowania, ale ma pewne ograniczenia. Jeśli chcesz dodać funkcje, takie jak regulacja prędkości lub sprzężenie zwrotne obciążenia/siły, rozważ zamiast przekaźników użycie nakładki sterownika silnika MegaMoto. Więcej informacji tutaj.
Programowanie siłownika zasilanego energią słoneczną
Działanie dostarczonego kodu jest możliwie najprostsze. Gdy jest jasno, siłownik się cofa. Gdy jest ciemno, siłownik się wysuwa. Aby zapobiec przypadkowemu wyzwoleniu (gdy ktoś przejdzie i zasłoni światło lub czujnik wychwyci błysk światła), zmiana ze stanu ciemno/jasno (lub jasno/ciemno) musi trwać co najmniej trzydzieści sekund. To opóźnienie można łatwo zmienić, modyfikując wartość „const int triggerDelay”.
Ilość światła jest określana przez odczyt napięcia trafiającego na pin analogowy 0. Im więcej światła, tym mniejszy opór naszego fotoopornika. Ponieważ używamy rezystora podciągającego, napięcie będzie spadać wraz ze wzrostem jasności otoczenia. Arduino odczytuje to jako wartość od 0 do 1028. Jeśli chcesz zmienić wartość, przy której zmieni się stan siłownika, po prostu zmień wartość „const int threshold” (domyślnie 650).
Ten kod spełni swoje zadanie, ale w projektach tego typu zawsze jest miejsce na ulepszenia. Śmiało modyfikuj go, aby lepiej dopasować do swojej aplikacji z siłownikiem liniowym zasilanym energią słoneczną! Kilka przykładów dodatkowych funkcji, które można dodać: limit czasu, by zapobiec dalszej pracy siłownika, jeśli nie trafi on w wyłącznik krańcowy w określonym czasie; wykrywanie kolizji przez monitorowanie poboru prądu (wymagałoby to sterownika MegaMoto zamiast przekaźników); lub funkcja pozwalająca ustawiać różne pozycje siłownika w zależności od ilości światła (nie tylko całkowicie w górę lub w dół).
/*The hardware required for this project is an Arduino, one light dependant resistor (LDR), a 10K resistor and a 2-channel 5V relay module.
Its purpose is to control the extension and retraction of an actuator based on the amount of light that is present.
Written by Progressive Automations 12/02/2020
*/
#define relay1 2 //relay used to extend actuator
#define relay2 3 //relay used to retract actuator
int ldr; //analog reading from light dependent resistor
int countOpen = 0;//counts how long sensor is recieving light
int countClose = 0;//counts how long the sensor is not recieving light
const int triggerDelay = 3000;//number of seconds x 100 to wait after lighting changes before triggering actuator
const int threshold = 650;//
void setup() {
Serial.begin(9600);
pinMode(relay1,OUTPUT);
pinMode(relay2,OUTPUT);
digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);
}
void loop() {
checkSensor();
}
void checkSensor()
{
ldr = analogRead(0);
Serial.println(ldr);
if(ldr > threshold)//if reading is greater than threshold, start counting
{
countOpen++;//count how long the sensor is not recieving light
delay(10);
}
else
{
countOpen = 0;//reset count to zero if statement is not true
}
if(countOpen > triggerDelay)// wait x seconds before triggering actuator
{
extend();//extend actuator
}
if(ldr < threshold)//if reading is less than threshold, start counting
{
countClose++;//count how long sensor is recieving light
delay(10);
}
else
{
countClose = 0;
}
if(countClose > triggerDelay)// wait x seconds before triggering actuator
{
retract();
}
}
void extend()
{
digitalWrite(relay1,LOW);
digitalWrite(relay2,HIGH);
}
void retract()
{
digitalWrite(relay2,LOW);
digitalWrite(relay1,HIGH);
}
Podsumowanie
I to wszystko! Oto nasza metodyka użycia czujnika światła siłownika liniowego do sterowania Twoim siłownikiem z wykorzystaniem energii słonecznej. Wiemy, że każda aplikacja jest inna, więc możesz mieć pytania dotyczące tego projektu lub chcieć omówić modyfikacje z naszym zespołem inżynierów. To żaden problem – napisz do nas na sales@progressiveautomations.com albo zadzwoń pod bezpłatny numer 1-800-676-6123.