Rolety - sterowanie
W wersji 2.3.26
Odsłon częściowo na 30% jest tożsame z zasłon częściowo na 70% ale w kolejnej wersji to dodamy
-
- Posty: 13
- Rejestracja: pn mar 08, 2021 6:07 pm
Witam, mam pytanie. Mam silnik krokowy nema 17 i sterownik A4988 czy jest możliwość sterowania silnikiem z aplikacji supla ? może ktoś ma kod chętnie sprawdzę , do celowo chciałbym uruchomić roletę dzień/noc za pomocą tego silnika z góry dzięki
Une enquГЄte terminГ©e sans affecter la qualitГ© de vie propriГ©tГ©s musculaires cardiaques, pulmonaires et sanguines..
Nie znajdziesz na forum gotowego softu pod ten silnik bo jak kojarzę to nikt na nim nic nie robił.
Być może było by to łatwe albo trudne, bez zabawy tym silnikiem raczej ciężko będzie stworzyć coś do niego.
Sterowanie samego silnika bezpośrednio nie wiem czy jest dobre bo rolety zazwyczaj potrzebują hamulca, a ten silnik nie ma hamulca ani przekładni która by hamowała roletę.
trochę się bawiłem tym silnikiem i wiem ze i jak ustawić kroki o ile roleta ma się otworzyć lub zamknąć wiec hamulec jest nie potrzebny, mam soft ale bez warstwy supla i mam prośbę czy by ktoś mi to nie przejrzał i połączył tak by działało pod suple, jeden soft to roleta pod supla - działająca a drugi to soft pod silnik i www tez działający wstawiam kody:radzik_r pisze: ↑wt mar 22, 2022 7:14 pmNie znajdziesz na forum gotowego softu pod ten silnik bo jak kojarzę to nikt na nim nic nie robił.
Być może było by to łatwe albo trudne, bez zabawy tym silnikiem raczej ciężko będzie stworzyć coś do niego.
Sterowanie samego silnika bezpośrednio nie wiem czy jest dobre bo rolety zazwyczaj potrzebują hamulca, a ten silnik nie ma hamulca ani przekładni która by hamowała roletę.
Kod: Zaznacz cały
#include <srpc.h>
#include <log.h>
#include <eh.h>
#include <proto.h>
#include <IEEE754tools.h>
// We define our own ethernet layer
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>
#include <lck.h>
#include <WiFiClient.h>
#include <ESP8266WiFiType.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiMulti.h>
#include <WiFiServer.h>
#include <ESP8266WiFiGeneric.h>
#include <WiFiClientSecure.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiSTA.h>
#include <WiFiUdp.h>
#include "Stepper_28BYJ_48.h"
extern "C" {
#include "user_interface.h"
}
WiFiClient client;
ADC_MODE(ADC_VCC);
int Step = 0; //GPIO0---D3 of Nodemcu--Step of stepper motor driver
int Dir = 2; //GPIO2---D4 of Nodemcu--Direction of stepper motor driver
Stepper_28BYJ_48 stepper(1,2,3,0); // wyjście silnika
// Setup Supla connection
const char* ssid = "xxx";
const char* password = "xxx";
/*
// DS18B20 Sensor read implementation
double get_temperature(int channelNumber, double last_val) {
double t = -275;
switch(channelNumber) {
case 2:
t = WiFi.RSSI();
break;
case 3:
t = ESP.getVcc() / 1000.0;
break;
};
return t;
}
*/
void setup() {
Serial.begin(115200);
delay(10);
SuplaDevice.setName("Roleta"); // zmiana nazwy mdułu w supla
// wifi_station_set_hostname("Roleta"); // lub tak jeżeli górna nie zadziała
WiFi.softAPdisconnect(true); // wyłączenie rozgłaszania sieci ESP
// WiFi.setOutputPower(10); //Ograniczanie mocy wyjściowej (0 - 20.5)
pinMode(Step,INPUT_PULLUP);
pinMode(Dir,INPUT_PULLUP);
// Replace the falowing GUID
uint8_t mac[WL_MAC_ADDR_LENGTH];
WiFi.macAddress(mac);
char GUID[SUPLA_GUID_SIZE] = {0x20,0x19,0x05,0x10,
mac[WL_MAC_ADDR_LENGTH - 6],
mac[WL_MAC_ADDR_LENGTH - 5],
mac[WL_MAC_ADDR_LENGTH - 4],
mac[WL_MAC_ADDR_LENGTH - 3],
mac[WL_MAC_ADDR_LENGTH - 2],
mac[WL_MAC_ADDR_LENGTH - 1],
0x02,0x12,0x34,0x56,0x78,0x90};
// lub pobieramy identyfikator urządzenia ze strony https://www.supla.org/arduino/get-guid i wprowadzamy wiersz wyżej
SuplaDevice.addRollerShutterRelays(0,2, true); // 0 roleta dwa przekaźniki
//SuplaDevice.addSensorNO(2); // 1 czujnik krańcowy Call SuplaDevice.addSensorNO(A0, true)
//SuplaDevice.addDS18B20Thermometer(); // 2 rssi
//SuplaDevice.addDS18B20Thermometer(); // 3 zasilanie
SuplaDevice.begin(GUID, // Global Unique Identifier
mac, // Ethernet MAC address
"svrxx.supla.org", // SUPLA server address
xxxx, // Location ID
"xxxxxxxx"); // Location Password
SuplaDevice.setName("roleta salon"); // zmiana nazwy mdułu w supla
}
void loop() {
SuplaDevice.iterate();
Roletka();
}
// Supla.org ethernet layer
int supla_arduino_tcp_read(void *buf, int count) {
_supla_int_t size = client.available();
if ( size > 0 ) {
if ( size > count ) size = count;
return client.read((uint8_t *)buf, size);
};
return -1;
};
int supla_arduino_tcp_write(void *buf, int count) {
return client.write((const uint8_t *)buf, count);
};
bool supla_arduino_svr_connect(const char *server, int port) {
return client.connect(server, 2015);
}
bool supla_arduino_svr_connected(void) {
return client.connected();
}
void supla_arduino_svr_disconnect(void) {
client.stop();
}
void supla_arduino_eth_setup(uint8_t mac[6], IPAddress *ip) {
// Serial.println("WiFi init");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
// Serial.print(".");
}
Serial.print("\nlocalIP: ");
Serial.println(WiFi.localIP());
Serial.print("subnetMask: ");
Serial.println(WiFi.subnetMask());
Serial.print("gatewayIP: ");
Serial.println(WiFi.gatewayIP());
}
SuplaDeviceCallbacks supla_arduino_get_callbacks(void) {
SuplaDeviceCallbacks cb;
cb.tcp_read = &supla_arduino_tcp_read;
cb.tcp_write = &supla_arduino_tcp_write;
cb.eth_setup = &supla_arduino_eth_setup;
cb.svr_connected = &supla_arduino_svr_connected;
cb.svr_connect = &supla_arduino_svr_connect;
cb.svr_disconnect = &supla_arduino_svr_disconnect;
//cb.get_temperature = &get_temperature;
//cb.get_temperature_and_humidity = NULL;
cb.get_rgbw_value = NULL;
cb.set_rgbw_value = NULL;
return cb;
}
void Roletka() {
if ( digitalRead(Step) == LOW ) {
stepper.step(-1);
}
if ( digitalRead(Dir) == LOW ) {
stepper.step(1);
}
}
drugi to silnik:
#include <ESP8266WiFi.h>
const char* ssid = "xxx";
const char* password = "xxx";
int Step = 0; //GPIO0---D3 of Nodemcu--Step of stepper motor driver
int Dir = 2; //GPIO2---D4 of Nodemcu--Direction of stepper motor driver
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
pinMode(Step, OUTPUT); //Step pin as output
pinMode(Dir, OUTPUT); //Direcction pin as output
digitalWrite(Step, LOW); // Currently no stepper motor movement
digitalWrite(Dir, LOW);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address on serial monitor
Serial.print("Use this URL to connect: ");
Serial.print("http://"); //URL IP to be typed in mobile/desktop browser
Serial.print(WiFi.localIP());
Serial.println("/");
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
// Match the request
int i=0;
int value = LOW;
if (request.indexOf("/Command=forward") != -1) { //Move 50 steps forward
digitalWrite(Dir, HIGH); //Rotate stepper motor in clock wise direction
for( i=1;i<=200;i++){
digitalWrite(Step, HIGH);
delay(10);
digitalWrite(Step, LOW);
delay(10);}
value = HIGH;
}
if (request.indexOf("/Command=backward") != -1) { //Move 50 steps backwards
digitalWrite(Dir, LOW); //Rotate stepper motor in anti clock wise direction
for( i=1;i<=200;i++){
digitalWrite(Step, HIGH);
delay(10);
digitalWrite(Step, LOW);
delay(10);}
value = LOW;
}
// Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<h1 align=center>Stepper motor controlled over WiFi</h1><br><br>");
client.print("Stepper motor moving= ");
if(value == HIGH) {
client.print("Forward");
} else {
client.print("Backward");
}
client.println("<br><br>");
client.println("<a href=\"/Command=forward\"\"><button>Forward </button></a>");
client.println("<a href=\"/Command=backward\"\"><button>Backward </button></a><br />");
client.println("</html>");
delay(1);
Serial.println("Client disonnected");
Serial.println("");
}
PS-myślę ze dla umiejących pisać w "C" do drobnostka.
serdeczne dzięki
Une enquГЄte terminГ©e sans affecter la qualitГ© de vie propriГ©tГ©s musculaires cardiaques, pulmonaires et sanguines..
Posiadam pewne rolety z funkcją żaluzji. Oryginalnie w pilocie sa 3 przyciski góra dół i specjalny-uchylający lamele. Wszystko dzieje sie po czasie. Roleta pamieta ze przycisk w doł zamyka rolete i zamyka dopływ prądu. dopiero nacisniecie tego przycisku specjalnego podaje napiecie i wykonuje dalszy ruch odchyaljac lamele czyli klawisz w dół daje dół rolety do konca a kalwisz specjalny ponowny dół az do uchylenia lameli. Jesli mam otwarte rolety to nacisniecie specjalnego robi automatycznie cykl zamkniecia i uchylenia.
Jesli bym suplą nacisnal manualnie dol i trzymal caly czas to najpierw mi sie zamknie a potem uchyli.
Supla nie widzi wlasciwego stanu zamkniecia rolet, poniewaz nie wie ze jest funkcja uchalania lameli. Sprawa sie tez kompikuje kiedy z pilota uchylam, wtedy supla calkowicie gubi stan.
Nie wiem czy dobrze to opisalem. Dodaje tez link o jaka rolete mi chodzi https://www.youtube.com/watch?v=sseYOut_sos
Czy jest na to jakis pomysl?
Jesli bym suplą nacisnal manualnie dol i trzymal caly czas to najpierw mi sie zamknie a potem uchyli.
Supla nie widzi wlasciwego stanu zamkniecia rolet, poniewaz nie wie ze jest funkcja uchalania lameli. Sprawa sie tez kompikuje kiedy z pilota uchylam, wtedy supla calkowicie gubi stan.
Nie wiem czy dobrze to opisalem. Dodaje tez link o jaka rolete mi chodzi https://www.youtube.com/watch?v=sseYOut_sos
Czy jest na to jakis pomysl?
Jedyne co mi tutaj przychodzi do głowy, to korzystanie z funkcji "dolnego domknięcia" (do ustawienia w Cloud). Wtedy w apce możesz wizulanie na obrazku okna zamknąć roletę na 100%, a potem dosuwając jeszcze w dół ustawić domknięcie. Tylko ta funkcja jest przystosowana do tradycyjnych rolet. U Ciebie będzie to działało na odwrót, bo tradycyjne rolety po tym jak dojadą do parapetu, domykają się, a u Ciebie zaczyna się odchylanie od dołu.Mac pisze: ↑ndz maja 29, 2022 9:35 pm Posiadam pewne rolety z funkcją żaluzji. Oryginalnie w pilocie sa 3 przyciski góra dół i specjalny-uchylający lamele. Wszystko dzieje sie po czasie. Roleta pamieta ze przycisk w doł zamyka rolete i zamyka dopływ prądu. dopiero nacisniecie tego przycisku specjalnego podaje napiecie i wykonuje dalszy ruch odchyaljac lamele czyli klawisz w dół daje dół rolety do konca a kalwisz specjalny ponowny dół az do uchylenia lameli. Jesli mam otwarte rolety to nacisniecie specjalnego robi automatycznie cykl zamkniecia i uchylenia.
Jesli bym suplą nacisnal manualnie dol i trzymal caly czas to najpierw mi sie zamknie a potem uchyli.
Supla nie widzi wlasciwego stanu zamkniecia rolet, poniewaz nie wie ze jest funkcja uchalania lameli. Sprawa sie tez kompikuje kiedy z pilota uchylam, wtedy supla calkowicie gubi stan.
Nie wiem czy dobrze to opisalem. Dodaje tez link o jaka rolete mi chodzi https://www.youtube.com/watch?v=sseYOut_sos
Czy jest na to jakis pomysl?
Nawet w przygotowanym częściowo wsparciu dla żaluzji fasadowych, tego typu rolet nie mamy przewidzianego. Bo w fasadówkach dodajemy sterowanie nachyleniem lamelek, a u Ciebie w zasadzie nie da się zmienić nachylenia lamelek (są dwie dostępne pozycje), a steruje się ilością lamelek odchyloną od pionu.
Co do sterowania z pilota - na to nie ma rozwiązania. Ogólnie sterowanie roletami/żaluzjami nie działa dobrze, gdy miesza się dwa różne sterowniki. Stan zawsze będzie się w Supli rozjeżdżał.
Widzimy się na Supla Offline Party vol. 2