Stránka 5 z 7

Re: Automatické zatváranie kurníku pre sliepky

Napsal: 30 dub 2020, 12:52
od Dadasys
Přeci jen je potřeba doladit jednu drobnost. Po zapnutí do sítě se motor točí bez ohledu na ldr čidlo a polohu dveří. Dumám, jak docílit toho, aby motor po zapnutí stál až do prvního čtení světla..

Kód: Vybrat vše

const int EnMotorPin = 9;    // enable motor  - pin 9  PWM
const int CloseDoorPin = 8;  // direction close motor - pin 8
const int OpenDoorPin = 7;   // direction open motor  - pin 7
const int photocellPin = A0; // photocell connected to analog 0

const long eventTime_1_LDR = 20000; // 20 vteřin
unsigned long previousTime_1 = 0;

int photocellVal;            // analog reading of the photocel

bool daylight = true;        // daylight status
int darkthreshold = 20;
int daythreshold = 350;      

int systemState = 0;
int SPEED = 220;

int bottomSwitchPin = 2;  // Reed switches top and bottom of coop door
int topSwitchPin = 4;

bool topSwitchState; // true if door is up
bool bottomSwitchState; // true if door is down

void setup() {

  Serial.begin(9600);
  pinMode(bottomSwitchPin, INPUT);
  pinMode(topSwitchPin, INPUT);
  pinMode(EnMotorPin, OUTPUT);
  pinMode(CloseDoorPin, OUTPUT);
  pinMode(OpenDoorPin, OUTPUT);
  
}

void loop() {
  systemState = 0;
    unsigned long currentTime = millis();
    if ( currentTime - previousTime_1 >= eventTime_1_LDR) {
    photocellVal = analogRead(photocellPin); // read inputs
    previousTime_1 = currentTime;
  }

  if (photocellVal > daythreshold)

  {
    daylight = true;
  }
  if (photocellVal < darkthreshold)
  {
    daylight = false;
  }
  topSwitchState = digitalRead(topSwitchPin);
  bottomSwitchState = digitalRead(bottomSwitchPin);
  //  read system status
  if (daylight == true && topSwitchState == true)
  {
    systemState = 0;   // motor stop
  }
  if (daylight == true && topSwitchState == false)
  {
    systemState = 1;  // drive door up
  }
  if (daylight == false && bottomSwitchState == true)
  {
    systemState = 0;    // motor stop
  }
  if (daylight == false && bottomSwitchState == false)
  {
    systemState = 2;  // drive door down
  }
  DispVals();
  switch (systemState) {
    case 0: // motor stop
      digitalWrite(CloseDoorPin, LOW);
      digitalWrite(OpenDoorPin, LOW);
      analogWrite(EnMotorPin, 0);
      break;
    case 1:  //drive door up
      digitalWrite(CloseDoorPin, LOW);
      digitalWrite(OpenDoorPin, HIGH);
      analogWrite(EnMotorPin, SPEED);
      break;
    case 2:  // drive door down
      digitalWrite(CloseDoorPin, HIGH);
      digitalWrite(OpenDoorPin, LOW);
      analogWrite(EnMotorPin, SPEED);
      break;
    default:
      digitalWrite(CloseDoorPin, LOW);
      digitalWrite(OpenDoorPin, LOW);
      analogWrite(EnMotorPin, 0);
      break;
    
      }
}

void DispVals()
{
  Serial.print("topSW ");
  Serial.print(topSwitchState);
  Serial.print("\t");
  Serial.print("botSW ");
  Serial.print(bottomSwitchState);
  Serial.print("\t");
  Serial.print("PhotoVal ");
  Serial.print(photocellVal);
  Serial.print("\t");
  Serial.print("daylight ");
  Serial.print(daylight);
  Serial.print("\t");
  Serial.print("systemState ");
  Serial.print(systemState);
  Serial.print("\t");
  if (systemState == 0)
  {
    Serial.println("\t door stopped");
  }
  if (systemState == 1)
  {
    Serial.println("\t door driving up");
  }
  if (systemState == 2)
  {
    Serial.println("\t door driving down");
  }
}

Re: Automatické zatváranie kurníku pre sliepky

Napsal: 30 dub 2020, 13:12
od kiRRow
V setupu, po tom co nastavíš inputy a outputy, tam musíš nastavit výstupy tak aby se ti motor netočil. Ideálně by měl provést třeba otevření a zastavit se, aby po startu byl vždy v jedné a určité poloze - jakože něco jako kalibrace.

Re: Automatické zatváranie kurníku pre sliepky

Napsal: 02 kvě 2020, 02:25
od BigSandy
Jen jsem to tak rychlo prolit a používáš jen modul času DS3231?
Jak jsi s tým spokojený.
Já otvíraní kurníku dělal už před 5 roky take s hodinami a po roce, když jsem nacházel chrápat slepice venku to honem předělával na fotoodpor GL5528.
Přes zimu už sedi slipky v 17:30 hod v kurníku a přes leto ještě ve 20:30 litaji po zahradě

Re: Automatické zatváranie kurníku pre sliepky

Napsal: 02 kvě 2020, 07:49
od Axamith
Okrajově sleduji debatu o slepicích a pořád nechápu, proč se tady řeší časové rozsahy, i když slunce zapadá v danou dobu, pořád zde vstupuje faktor zatažené oblohy. Já bych to také řešil sledování konkrétních světelných podmínek.

Re: Automatické zatváranie kurníku pre sliepky

Napsal: 02 kvě 2020, 08:15
od Dadasys
kiRRow píše:
30 dub 2020, 13:12
V setupu, po tom co nastavíš inputy a outputy, tam musíš nastavit výstupy tak aby se ti motor netočil.
Zkoušel jsem nastavit podle SZ, ale pořád se točí. Zatím řeším přidáním delay v setupu.. :?

Re: Automatické zatváranie kurníku pre sliepky

Napsal: 02 kvě 2020, 12:06
od pavel1tu
Axamith píše:
02 kvě 2020, 07:49
Okrajově sleduji debatu o slepicích a pořád nechápu, proč se tady řeší časové rozsahy, i když slunce zapadá v danou dobu, pořád zde vstupuje faktor zatažené oblohy. Já bych to také řešil sledování konkrétních světelných podmínek.
Kamarád to tak měl a zrušil to,
u nás pod horama se často zatáhne na chvilku a pak zase roztáhne a stávalo se, že se dveře zavřely a slepice byly venku.
Teď z toho má "hybrida" a je spokojenější.

Re: Automatické zatváranie kurníku pre sliepky

Napsal: 02 kvě 2020, 14:46
od pavel1tu
Dadasys píše:
02 kvě 2020, 08:15
Zkoušel jsem nastavit podle SZ, ale pořád se točí. Zatím řeším přidáním delay v setupu.. :?
A nepoužíváš relátka co fungují inverzně ?
Tj. když pošleš "1" relé rozepne, když "0" relé sepne ?

Re: Automatické zatváranie kurníku pre sliepky

Napsal: 02 kvě 2020, 14:50
od Dadasys
Nemám tam žádné relé.. Jede to pres
l298n

Odesláno z mého Lenovo P2a42 pomocí Tapatalk



Re: Automatické zatváranie kurníku pre sliepky

Napsal: 02 kvě 2020, 17:41
od pavel1tu
No a jak máš ten setup()
Hned po deklaraci co je výstup,
musíš tam nastavit nějaký směr, já mám směr LOW, LOW což je asi STOP a ovládací PWM na nulu - pro jistotu.

Máš to dobře zapojené ?
Tohle mám na stole, sice s jiným můstkem, mám velký motor, a funguje mi to.
https://howtomechatronics.com/tutorials ... -h-bridge/
Já tedy ještě propojil GND mezi zdroji 5/12V mám je nezávislé.

Re: Automatické zatváranie kurníku pre sliepky

Napsal: 02 kvě 2020, 20:10
od Dadasys
Celý kód je o několik příspěvků výš. Napájí se 12V ten můstek a z něj je 5V výstup do arduina. Zapojení kdyžtak nakreslím. D

Odesláno z mého Lenovo P2a42 pomocí Tapatalk