Arduino + czujnik r...
 
Powiadomienia
Wyczyść wszystko

Domoticz Arduino + czujnik ruchu + mysensors

5 Wpisów
2 Użytkownicy
0 Likes
940 Wyświetleń
(@szmydu)
Wpisów: 68
Kontrybutor
Autor tematu
 

Cześć, wracam ponownie z problemem. Tym razem chodzi o szkic do Arduino obsługujący włączniki światła, czujniki temperatury ds18b20 i czujnik ruchu. Z połączeniem ze sobą szkiców do włączników i czujników temperatury nie miałem problemów, lecz pojawił się on po dorzuceniu do tego szkicu obsługującego czujnik ruchu.

Całość wygląda jak w załączniku. Po wgraniu szkicu do Andino ,naciśnięcie włączników nie zapala światła ale czujnik ruchu działa i zmiana stanu widoczna jest w domoticz'u.  Problematyczna wydaje się linia:  

sleep(digitalPinToInterrupt(PIR1_PIN), CHANGE, SLEEP_TIME_PIR);

Jak ją usunę to działają włączniki światła i czujnik ale Domoticz strasznie wolno zaczyna działać i wzrasta obciążenie Rpi, co pewnie wynika z ciągłego "stukania" danymi z czujnika do Domoticz'a. Może ktoś ma pomysł jak to wszystko pogodzić ? 

 

 

 
Dodane : 02/03/2022 6:32 pm
(@steel_rat)
Wpisów: 603
Ekspert
 

A zrób  coś takiego

float lastTemperature[MAX_ATTACHED_DS18B20];
bool receivedConfig = false;
bool metric = true;
bool lastpir = false; // dopisać


Dalej

void before()
{
    // Dla zwykłych włączników
    for (int i = 0; i < D_NUMBER_OF_BUTTONS; i++)
    {
        pinMode(D_FIRST_RELAY_PIN + (i * 2), OUTPUT);                                                           // Then set relay pins in output mode
        digitalWrite(D_FIRST_RELAY_PIN + (i * 2), loadState(D_FIRST_RELAY_PIN + (i * 2)) ? RELAY_ON : RELAY_OFF); // Set relay to last known state (using eeprom storage)  
        //digitalWrite(D_FIRST_RELAY_PIN + (i * 2), RELAY_OFF );  
    }
    
    //DS18B20
    lastpir = digitalRead(PIR1_PIN)  == HIGH;
    sensors.begin();  
}

Na końcu

    bool tripped = digitalRead(PIR1_PIN) == HIGH;
    if (lastpir != tripped)
    {
      lastpir = tripped;
      Serial.println(tripped);
      send(msgPIR1.set(tripped?"1":"0"));  // Send tripped value to gw
    }
    // Sleep until interrupt comes in on motion sensor. Send update every two minute.
    //sleep(digitalPinToInterrupt(PIR1_PIN), CHANGE, SLEEP_TIME_PIR);
 
Dodane : 02/03/2022 11:37 pm
(@szmydu)
Wpisów: 68
Kontrybutor
Autor tematu
 

Dzięki za wskazówki. Może w tygodniu dam radę to sprawdzić to dam znać. 

 
Dodane : 05/03/2022 8:45 pm
(@szmydu)
Wpisów: 68
Kontrybutor
Autor tematu
 

@steel_rat Sprawdziłem i działa. Dzięki.

 
Dodane : 11/03/2022 3:06 pm
(@szmydu)
Wpisów: 68
Kontrybutor
Autor tematu
 

Wracam ponownie z problemem. Mam dwa arduino podpięte do Rpi. Czujniki ruchu podpiąłem do jednego (wraz z włącznikami dzwonkowymi i roletami) a czujniki DS18B20 i włączniki zwykłe mam podłączone do drugiego arduino. Z pierwszym arduino nie mam żadnych problemów. Natomiast w drugim Arduino, po dodaniu fragmentów dotyczących obsługi czujników temperatury, w logach co jakiś czas pojawiają mi się takie błędy:

2022-03-13 20:13:15.748 Error: Arduino - zwykłe: Command not received by Node !! (node_id: 0, child_id: 5)
2022-03-13 20:52:33.076 Error: Arduino - zwykłe: Repeating previous command (2/2)
2022-03-13 21:16:20.452 Error: Arduino - zwykłe: Repeating previous command (2/2)
2022-03-13 21:25:07.139 Error: Arduino - zwykłe: Repeating previous command (2/2)
2022-03-13 21:27:11.286 Error: Arduino - zwykłe: Repeating previous command (2/2)
2022-03-13 22:16:19.218 Error: Arduino - zwykłe: Repeating previous command (2/2)

Sporadycznie zdarza się też, że naciskając włącznik zwykły aby zgasić światło, światło nie gaśnie od razu tylko kilku sekundach. Najprawdopodobniej wtedy też pojawia się ten błąd w logu. Tzn. opóźnienie jest konsekwencją błędu, ponieważ błędy w logach pojawiają się także w nocy, jak nikt włączników nie rusza. Dołączam szkic, może ktoś coś wypatrzy :). Dodam, że jak ze szkicu usunę linijki dotyczące czujników DS18B20 to problem nie występuje. 

 

 
Dodane : 14/03/2022 12:01 pm
Udostępnij: