Stránka 1 z 2

Návrh jednoduchého obvodu.

Napsal: 16 dub 2019, 15:13
od Michal22
Potřeboval bych následující obvod- pokud je na vstupu log.1, tak je výstup v log.0.
Pokud vstup přejde do log.0, tak výstup ještě zůstane 60s v log.0, poté přijde impuls log.1 v délce 2s, poté zase 60s log.0, zase impuls log.1 v délce 2s.
Tohle by se opakovalo dokud by se na vstupu nezměnil stav zpět na log.0.

Vlastní logické úrovně mohou být jakkoliv prohozené (třeba vstup spouštěný log.1), na tom nesejde. Podstatné je dodržet časy a také ukončení výstupní sekvence při změně stavu vstupu na klidovou hodnotu.
S
Asi by to šlo naroubovat i na jednu 555, ale já takhle ze startu nevím, jak začít.
Umím si představit dvě 555, kdy jedna by počítala těch 60s, druhá dělala puls 2s. Ale možná by to šlo realizovat i s jednou 555?
Nebo je toto výhodnější pomocí nějakého jednočipu?
Díky za návrhy.

Napsal: 16 dub 2019, 15:27
od Cowley
Nasadil bych Picaxe 08M2. Ale asi mě teď ukamenujou :)

A co když se během prvního měření vrátí vstup do klidu?
Edit: asi se meření 60s hned ukončí a neprovede se ani ten první 2s impuls, že ? :)

Napsal: 16 dub 2019, 15:28
od forbidden
Asi by to šlo i s jednou zapojenou jako AKO s takto malou střídou. Jak by to bylo moc přesný netuším. Určitě bych ale šel do CMOS verze kvůli možnosti menších kondů a větších odporů. Na tyto časy to bude praktičtější.

Napsal: 16 dub 2019, 15:29
od Cowley
Anebo 4060 s podporou 4093. Belza má na stránkách měření delších časů.
Vstup odblokuje a zresetuje 4060, ta napočítá do 60s a na výstupu aktivuje klopak ze zbylých hradel na 2s.
Nebo 4017 s podporou 4093.

Podobné zapojení máme v domě. Na dveřích je magnet.kontakt. Jakmile se dveře otevřou, začne měření. Pokud se dveře v určitém čase nedovřou, spustí se přerušovaná akustická signalizace.
Jakmile se dovřou, vše utichne.

Napsal: 16 dub 2019, 15:52
od Michal22
Cowley- přesně na to stejné to potřebuji já :-)
Na přesnosti zas tak úplně nesejde, jde o to, aby to cca 60s počkalo, než to začne posílat impulzy, které se pak převedou na stávající elektronický zvonek.

Napsal: 16 dub 2019, 16:01
od Cowley
V první verzi byla jenom jedna 555.
Mg.spinac jí vždy nastartoval, pokud se dveře včas zavřely tak nedomeřila a celé zapojení "umřelo".
Jakmile ale domeřila, sepla piezo sirenu.
V druhé verzi byla na výstupu první ještě druhá 555, co pulsovala.
Ve třetí verzi už jsme zůstali u 555 a 40106, který generuje tón do repráčku a celé je to v krabičce z GM (taková na zavěšení s prolisem pro reproduktorek).

A hlavně trimr na nastavení toho prvního času.
Je potřeba ještě chytit toho, co prošel, aby za sebou zavřel. Jinak tě lidí z přízemí rozcupujou :)

Napsal: 16 dub 2019, 16:27
od Michal22
Já to potřebuju do práce, principiálně stejně, ale jde o to, že někteří si do dveří vloží předmět, který zabrání zaklapnutí. A dveře jsou potom nezavřené, mohl by jimi někdo vlézt dovnitř.
Takže pokud magnet nesepne, obvod bude periodicky spouštět signalizaci, aby to někoho přinutilo ke dveřím zajít a předmět vytáhnout pryč.

Máš někde nějaké šéma té rozšířené verze?
Ať nemusím vymýšlet vymyšlené?
Díky

Napsal: 16 dub 2019, 18:06
od Cowley
Schéma nemám :(

Jen si pamatuji na atypické zapojení 555 (bez pinu 7)
Propojené piny 2 a 6 z nich rezistor 100k na plus a také "měřící" kondik na GND.
Z uzlu 2/6 je přes seriový rezistor 180R a diodu 1N4148 vyvedená katoda na svorku, na kterou se připojí magnet.detektor proti GND.
Uzel 4/8 je plus 12V
Pin 5 je 10n proti GND.
Pin 7 je nepoužit
Pin 1 je GND
Pin 3 spouštěl 40106 a ta přes tranzistor budila repro.

Napsal: 16 dub 2019, 18:16
od forbidden
Jen pro porovnání, nedávno jsem dělal něco hodně podobnýho pro zákoše. Největší jsou na tom pájecí plošky, protože si to chtěl připojovat sám a pak fitry na napájení, protože to je do auta. :) Je to zalitý v laku kvůli odolnosti.
PIC10F222.

Napsal: 16 dub 2019, 18:29
od ZdenekHQ
Dost se zapomíná na CMOS 4538. Ovšem já, jelikož jsem už pokřivenej procesorama, bych to taky raději nacpal do toho procesoru... :D

Napsal: 17 dub 2019, 10:28
od petrfilipi
Jasně, malý 6 nebo 8 vývodový PIC, interní oscilátor, krátký prográmek, přerušení po 0,1s a v přerušení počítat buď do 600 nebo do 20.

Petr

Napsal: 17 dub 2019, 13:42
od mluno
Já bych použil attiny13 ale to je celkem jedno. Obojí stojí kolem 30 korun a na tak jednoduchý program nebude rozdíl. Ale to jen protože s AVR to umím a s picy ne. Interní oscilátor bohatě vyhoví, případně se dá podle odchylky program zkorigovat.
Použití procesoru má tu výhodu, že lze funkci obvodu lehce upravit, což se u nějaké kombinace monostabilních obvodů nedá (tam se tak maximálně dají upravit časy).

Napsal: 27 čer 2019, 12:49
od Michal22
Ahoj,
v tomto problému jsme se zatím posunul k tomu, že jsem si koupil klon Arduino Nano.
Podařilo se mi rozchodit komunikaci, programy mi jdou nahrávat, dělají, co po nich chci (LED bliká :-D), jen teď nevím, jak koncipovat program.

Kdysi jsem programoval v Basicu, Pascalu, později krátká epizoda s jazykem Lua. Nic víc.

Hlavně nevím, jakým způsobem spustit běh programu pomocí vstupu, a taky jak zaimplementovat podmínku toho, aby běh sekvence byl zpožděný o těch 60 sekund.

Dokázal by mi někdo ideově pomoct?
Nejde mi o to, aby za mě někdo naťukal program, ale spíš, abych byl naveden na správný směr.

Díky

Napsal: 27 čer 2019, 17:57
od Cowley
Třeba nějak takhle :)

Kód: Vybrat vše

int vstup = 2;
int vystup = 13;

boolean otevreno = 0;
boolean mereni = 0;


unsigned long zacatek;
unsigned long cekacka = 60000; // 60000 je 60s

void setup() {

 Serial.begin(9600);
 
  pinMode (vstup, INPUT);
  pinMode (vystup, OUTPUT);
  digitalWrite(vstup, HIGH);  // nastaveni vstupu na PULL UP
  digitalWrite(vystup, LOW);  // vystup po zapnuti nebude aktivni
 
}

void loop() {

if (digitalRead(vstup) == LOW)  // je vstup aktivni, dvere jsou otevreny
{otevreno = 1;
}

if (digitalRead(vstup) == HIGH)  // neni vstup aktivni, dvere jsou zavreny
{otevreno = 0;
mereni = 0;
}

if ((otevreno == 1) && (mereni == 0))  //  je otevreno a jeste si nezacal stopovat ?
{mereni = 1;                           //  zapis si, ze stopujeme
zacatek = millis();                    //  nastav si do parametru zacatek aktualni systemovy cas
Serial.println("Zacinam merit cekaci dobu");
}

if (otevreno == 1)                      // je stale otevreno ?
{if ((millis() - zacatek) > cekacka)    // a je rozdil aktualniho systemoveho casu a casu v parametru zacatek vetsi nez cekaci doba?
{Serial.println("Nastal cas dat impuls na sirenu");
digitalWrite(vystup, HIGH);              //  sepni vystup
delay(2000);                              // na dve sekundy
digitalWrite(vystup, LOW);                 // vypni vystup
mereni = 0;                                 // nastav, ze budeme merit znovu cekaci dobu
}
}

}

Napsal: 01 črc 2019, 14:29
od Michal22
Tak moc děkuji Cowley (Kaulimu) za prográmek.
Funguje zcela bezchybně.

A protože jsem opravdu lama, zkusím se ptát (moje otázky jsou vyznačeny ////):

int vstup = 2;
int vystup = 13;
////tohle je inicializace vstupů/výstupů? Co jsme zkoušel nějaké blikání LED, tak ve vzorových programech tyhle řádky nebyly. Jsou nutné, nebo spíš doporučené?////

boolean otevreno = 0;
boolean mereni = 0;
////funkce boolean je pro mě velkou neznámou. Zkoušel jsem nastudovat například na wikipedii, ale pořád to vůbec nechápu.////

unsigned long zacatek;
unsigned long cekacka = 60000; // 60000 je 60s
////k čemu prosím slouží tyto dva řádky?////

void setup() {

Serial.begin(9600);
////Je vždy nutné zadat rychlost sériového portu?////

pinMode (vstup, INPUT);
pinMode (vystup, OUTPUT);
digitalWrite(vstup, HIGH); // nastaveni vstupu na PULL UP
digitalWrite(vystup, LOW); // vystup po zapnuti nebude aktivni

}

void loop() {

if (digitalRead(vstup) == LOW) // je vstup aktivni, dvere jsou otevreny
{otevreno = 1;
}

if (digitalRead(vstup) == HIGH) // neni vstup aktivni, dvere jsou zavreny
{otevreno = 0;
mereni = 0;
}

if ((otevreno == 1) && (mereni == 0)) // je otevreno a jeste si nezacal stopovat ?
{mereni = 1; // zapis si, ze stopujeme
zacatek = millis(); // nastav si do parametru zacatek aktualni systemovy cas
////k čemu složí přesně funkce „millis“ bez číselné hodnoty?Co je zde myšleno systémovým časem?////

Serial.println("Zacinam merit cekaci dobu");
}

if (otevreno == 1) // je stale otevreno ?
{if ((millis() - zacatek) > cekacka) // a je rozdil aktualniho systemoveho casu a casu v parametru zacatek vetsi nez cekaci doba?
{Serial.println("Nastal cas dat impuls na sirenu");
digitalWrite(vystup, HIGH); // sepni vystup
delay(2000); // na dve sekundy
digitalWrite(vystup, LOW); // vypni vystup
mereni = 0; // nastav, ze budeme merit znovu cekaci dobu
}
}

}


A obecně- existuje nějaké ucelené povídání k programování těhle malých potvůrek?
Co jsem zatím procházel, tak mi informace připadnou buď dost rozbité, nekompletní, nebo mi tam zase schází vysvětlení (nejlépe na nějakých příkladech).
Díky za případné nasměrování.