Kliknite tukaj, da si ogledate profil, kot ga vidijo drugi
 
Domov > Forum > Računalništvo

Arduino kot časovni rele

 
 
21.6.2016, 21:17
Pozdravljeni,

Sem začetnik pri uporabi razvojne plošče arduino in mi ga rad uporabil kot časovni rele.

Ko bi pritisnil gumb (npr. pin 2) bi se začel odštevati nastavljen čas. Po preteku tega časa bi se postavil izhod (npr. pin 12) na stanje 1.

Omenjen program bi uporabil za krmiljenje garažnih vrat in bi se tako npr. pol ure po odprtju sama nazaj zaprla.


Prosim za pomoč
 
 
 
22.6.2016, 12:23
Najbolj enostavna varianta je, da uporabiš funkcijo millis():
https://www.arduino.cc/en/Reference/Mill....

Ko pritisneš gumb, si zapomniš trenutno čas.

Nato pa samo periodično preverjaš, če je nastavljen čas in če je minilo že dovolj časa, potem nastaviš izhod na ustreznem pin-u.

Edino kar moraš paziti, je, da se funkcija millis po približno 50 dneh resitira, tako da če je prebrana vrednost manjša od shranjene, moraš to upoštevati.
 
 
 
3.7.2016, 21:55
Uspelo mi je narediti program, ki deluje, vendar imam en problem.
Časovnik aktivira ob vklopu končnega stikala in začne s štetjem časa, vendar se ob sprostitvi končnega stikala ne ustavi ampak šteje naprej. Jaz bi rad, da se ob sprostitvi končnega stikala časovnik resetira in čaka na ponovno aktivacijo.

Zgodi se mi namreč, da v primeru, če znotraj časa, ki je nastavljen na časovniku jaz ročno zaprem vrata potem po nastavljenem času pošlje pulz na motor in mi jih odpre.

Pomoje bi potreboval samo nek ukaz, ki bi vedno ob sprostitvi stikala resetiral časovnik. Prosim za pomoč.
 
 
 
3.7.2016, 21:58
Še moj trenutni program:

//Global Variables
const byte BUTTON=2; // our button pin
const byte LED=12; // LED


unsigned long buttonPushedMillis; // when button was released
unsigned long ledTurnedOnAt; // when led was turned on
unsigned long turnOnDelay = 2500; // wait to turn on LED
unsigned long turnOffDelay = 3600000; // turn off LED after this time
bool ledReady = false; // flag for when button is let go
bool ledState = false; // for LED is on or not.

void setup() {
pinMode(BUTTON, INPUT_PULLUP);
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH);
}

void loop() {
// get the time at the start of this loop()
unsigned long currentMillis = millis();

// check the button
if (digitalRead(BUTTON) == LOW) {
// update the time when button was pushed
buttonPushedMillis = currentMillis;
ledReady = true;
}

// make sure this code isn't checked until after button has been let go
if (ledReady) {
//this is typical millis code here:
if ((unsigned long)(currentMillis - buttonPushedMillis) >= turnOnDelay) {
// okay, enough time has passed since the button was let go.
digitalWrite(LED, HIGH);
// setup our next "state"
ledState = true;
// save when the LED turned on
ledTurnedOnAt = currentMillis;
// wait for next button press
ledReady = false;
}
}

// see if we are watching for the time to turn off LED
if (ledState) {
// okay, led on, check for now long
if ((unsigned long)(currentMillis - ledTurnedOnAt) >= turnOffDelay) {
ledState = false;
digitalWrite(LED, LOW);
delay(4000); // waits for four second
digitalWrite(LED, HIGH); // sets the LED on

}
}
}
 
 
 
12.7.2016, 13:52
Jaz ti lahko pomagam ampak bi te prosil, da malo razložiš kako imaš (boš imel) to povezano v garaži, predvsem kaj boš uporabil za "gumb" in kako pošlješ vratom signal da se zaprejo/odprejo.
 
 
 
25.7.2016, 13:53
Sem že med tem časom uredil. Uporabil sem knjižnico plclib.h in sem ga programiral kot PLC. Mnogo bolj preprosto in funkcionira.

Vseeno hvala!
 
 
Prijava in registracija
 
 
 
Zmaga.com ponuja brezplačno in razumljivo učenje računalniških programov, vas na enkraten način spozna z različnimi svetovnimi jeziki, s podrobno obrazloženimi recepti prikaže čare kulinarike in vam prežene strahove pred domačimi opravili.
 
 
Poleg tega lahko prebirate poučne članke, ki so namenjene širjenju naše splošne razgledanosti ter preverite svoje znanje z priljubljenim in enostavnim sistemom za preverjanje znanja. Če med vsebinami, ki se dodajajo vsak dan, ne najdete želenega znanja, je za vaša vprašanja na voljo dobro obiskan forum, kjer lahko tudi aktivno sodelujete. V primeru, da bi radi svoje praktično znanje delili z ostalimi, pa to lahko storite preko preprostega vmesnika za dodajanje vsebin. Zmagajte z znanjem z Zmaga.com!