duinozone.cz - Arduino a Raspberry fórum

Poslední příspěvky

Stran: [1] 2 3 ... 10
1
Projekty / Autonómne vykurovanie cez internet s ESP8266
« Poslední příspěvek od martinius96 kdy Leden 15, 2019, 18:20:23 odpoledne »
Ahoj všetci, dnes by som vám rád predstavil môj projekt, ktorý som tvoril 2 roky, čas od času som do neho niečo pridal a dnes by som vám rád predstavil jeho plnú funkcionalitu. Dozviete sa, čo systém vie, prečo je autonómny, prečo som zvolil ESP8266 namiesto Arduina a aké technológie som pre tento webovo orientovaný projekt vykurovania použil. Systém je schopný riadiť vykurovanie v dome, pôvodne navrhnutý pre chatu s plynovým kotlom.

Webové rozhranie je tvorené pre používanie laikami, teda je vhodný pre každého bez ohľadu na skúsenosti s prácou s počítačom, či webovým prehliadačom. To, čo používateľ potrebuje vie na stránke  nájsť v menu a na jednotlivých podstránkach, ktorými vie systém riadiť. Používam 6 teplotných senzorov DS18B20 pre záznam teplôt v miestnostiach a taktiež aj pre teplotu vody v radiátoroch, respektíve v obehovom okruhu kotla.

Systém umožňuje riadiť dva výstupy - fyzické relé pre:
    Kúrenie - kotol s voliteľnou hysterézou s voliteľným senzorom teploty pre riadenie, voliteľná referenčná teplota
    Obehové čerpadlo - voliteľná referenčná teplota, voliteľný senzor teploty pre riadenie, spína ak je teplota pod nastavenú - bez hysterézy
Oba tieto výstupy viem ovládať v dvoch základných režimoch:
    Automatický - pracuje sám autonómne, s hysterézou (kotol), s referenčnými teplotami, zvolenými senzormi
    Manuálny - manuálne ZAP/VYP - natvrdo na dobu neurčitú (používateľ je upozornený)

Vývojovú dosku NodeMCU v3 Lolin  s čipom ESP8266 som využil z dôvodu wifi konektivity s dobrým dosahom k AP. Podporuje šifrované HTTPS spojenie na web, kde predáva dáta serveru, ktorý ich ďalej spracuje. Doska okrem odosielania teplôt plní aj dôležitú funkciu v spúšťaní scriptov, ktoré umožňujú tomuto systému byť autonómnym - dokáže sa riadiť sám na základe nameraných teplôt, hysterézy, referečných teplôt.

Doska teda v pravidelných intervaloch spúšťa logiku systému, ktorý dokáže zmeniť stavy výstupov ZAP/VYP (používateľ spúšťa rovnaké scripty na pozadí ak je na webe AJAX-ovými volaniami). Doska si sťahuje aj aktuálne informácie o referenčných teplotách, hysteréze a v prípade výpadku wifi spojenia, alebo webstránky doska ďalej riadi autonómne domácnosť s posledne známymi referenčnými teplotami a hysterézou. Pri nadviazaní spojenia s webom sa okamžite aktualizuje a riadi sa podľa webu.

Webové rozhranie z hľadiska používateľa umožňuje:
    Zmeniť názvy teplomerov, napr podľa miestností
    Prezeranie real-time dát o teplotách (Karta Prehľad: dáta sa menia automaticky v tabuľke)
    Riadiť kúrenie, obehové čerpadlo
    Prezerať grafy za 24 hodín pre výstupy s minútovou reprezentáciou a pre teploty so 4 minútovou reprezentáciou nameraných dát
    Doplnkové grafy so 7-dňovou históriou
    Vzdialený reštart dosky
    Login systém
    Log prihlásení so záznamom IP adresy (IPv4 aj IPv6)
    Log zmien v systéme, kedy mikrokontróler prepol kúrenie, vypol, a pod.
    Zmena login informácii do webu
    Zdrojový kód pre mikrokontróler priamo na webe
Systém je svižný, ľahko udržiavateľný. Používateľ si na webe môže pozrieť aj deň a čas, kedy došlo k výpadku dosky v prehľadom grafe a taktiež kedy bola aká teplota nameraná, či kedy bolo ktoré relé výstupu aktívne. Doska môže na web zasielať aj ďalšie dôležité informácie - procesorový čas, sila signálu Wifi hotspotu, názov wifi hotspotu (možnosť navoliť viacero v programe pre NodeMCU).

Tieto doplnkové hodnoty môžu pomôcť systému ako takému z pohľadu plánovania automatického reštartu dosky po mesiaci, či týždni a podobne. Celé webové rozhranie používa PHP scripty pre funkcionalitu, AJAX-ové volania PHP scriptov pri účasti používateľa na webe, šablónu ControlR, grid systém Bootstrap.
Ďalšie zaujímavé projekty môžete nájsť aj na mojom webe: https://arduino.php5.sk
Fotogaléria:





2
Bastlírna / Re:Rušení
« Poslední příspěvek od posjirka kdy Leden 09, 2019, 07:58:35 dopoledne »
pokud se jedná o obráběcí stroj ta je velmi pravděpodobné, že má motory na stř.230V/400V.
To je vcelku dost veliký zdroj možného rušení nebo indkovaného přepětí.
Arduino nemá žádnou ochranu proti přepětí a to je právě jeho největší problém při reálném nasazení.
V podstatě můžu poradit jen 5 věci:
- zkrátit kabely na minimum a žádné smyčky jako "rezerva"
- vložit arduino i LCD do kovové krabičky a tu uzemnit.
- použit stíněné kabely i pro krátké trasy (rozuměj od 10cm víc)
- dát na vstupy Arduina ochranné zenerovy diody (v řadě je 5V1 tedy 5,1 V). Zapojují se katadou na pin Arduina anodou na zem případě se doplnuje o kondenzátor pro eliminaci vyšších frekvencí:
https://goo.gl/images/HnSzRi
https://goo.gl/images/MERw7B
- poslední doporučení je oddělit galvanicky čidla od Arduina. Pokud používáš digitální čidla je to v pohodě, použiješ optočlen jako oddělovač a můžeš ho v případě problémů ještě zatížit odporem aby byl víc odolný proti náhodnému rušení.

Ono to že ti kolabuje Arduino při připojení LCD nemusí ještě znamenat, že právě tady je zdroj problému. Můžeš mít rušení nekde jinde, kde ho programově nezachytíš, nebo ti nevadí/nevíš o něm a LCD je už jen ta legendární "poslední kapka".

3
Bastlírna / Re:Rušení
« Poslední příspěvek od David0306 kdy Leden 08, 2019, 17:03:35 odpoledne »
Ahoj, mám podobný problém s kombinací Arduino, LCD displej 20x4 znaky zapojený přes I2C a desky s 8 relé. Potom samozřejmě spousta vstupů z mechanických snmačů, vystupů z panelu ovládání, výstupy jsou z Arduino jsou i přes tranzistory (např do frekvenčního měniče) a celé to tvoří řídící systém obráběcího stroje. Po zprovoznění se deska vždy zasekla během několika minut. S odstíněním všech vodičů jsem si práci nedával, protože jsem využil původní vodiče a snímače starého obráběcího stroje, které fungují. Zjistil jsem, že když je LCD displej odpojený, tak se deska nikdy (opravdu nikdy za rok používání) nezasekla. Po připojení LCD se zasekne vždy. Nyní bych rád problém odstranil, máte nějaké tipy jak ošetřeit patrně linku mezi uPC a LCD aby k problému nedocházelo?
Nápady o napájení baterií, nebo stínění všech vstupů nepovažuji za dobré. Napájení zajišťuji uzeměným minus pólem galvanicky odděleného 12V zdroje, který následně stabilizuji na 7V a napájím s tím všechny zařízení. Uzeměn je též kontakt GND na desce a všech komponentech, ovládací panel a v podstatě celý stroj.

Děkuji za odpovědi
4
Bastlírna / Re: Komunikace VS + Arduino
« Poslední příspěvek od Prayutocha2 kdy Leden 08, 2019, 08:37:11 dopoledne »
Je to opravdu vzácná znalost
5
Bastlírna / Re:LCD 16x2 s I2C Kontrolerem
« Poslední příspěvek od Prayutocha2 kdy Leden 08, 2019, 08:34:24 dopoledne »
mám následující problém. Mám UNO a NANO desku a dva Displeje 16x2
6
Projekty / RFID systém so správou on-line s wifi konektivitou
« Poslední příspěvek od martinius96 kdy Leden 04, 2019, 21:15:04 odpoledne »
Dnes by som rád predstavil systém, ktorý som vyvíjal posledný týždeň.
Vyhotovil som RFID systém na otváranie elektronických dverí. Systém je postavený na komponentoch pre Arduino, teda čítačka kariet a kľúčeniek na 13.56MHz RC522, kompatibilné karty a kľúčenky. Čítačka dokáže prečítať karty štandardu ISO/IEC 14443 A. Tento štandard funguje i na ISIC kartách, bankomatových kartách, či autobosových, zamestnaneckých a je ich možné taktiež prečítať a využiť pre takýto projekt. Čítačkou čítam MAC adresy kariet (je možné čítať a zapisovať aj do pamäte kariet a kľúčeniek, ktorá má väčšinou 1kB, alebo 4kB), MAC adresy, ktoré čítam si prevádzam na špecifický DEC formát. V úlohe mikrokontroléru pre spracovanie a odosielanie dát som použil dosku NodeMCU, ktorá disponuje wifi konektivitou a je pre tento účel viac než dostačujúca. Systém je vhodný pre haly, firemné vstupné vrátnice, elektronické dvere a pre podobné využitie.

Úlohou NodeMCU je odosielať dáta na web backend vždy, keď zaznamená kartu a na základe navrátenej odpovede z webservera (štandardne ACCEPT / DENY) otvorí, alebo neotvorí dvere. Vo dverách sa okrem klasického mechanizmu s kľučkou nachádza i špeciálny elmg. jazýček, ktorý je otváraný mikrokontrolérom na určitú dobu po úspešnej odpovedi z webservera. Z vonkajšej strany dverí je guľa, z druhej strany kľučka, ktorá je prepojená i na jazýček. Z tohto dôvodu teda nie je nutné inštalovať dve čítačky a pod.

Dáta sa odosielajú na server a spracuvávajú sa v .php backende. Všetky karty, ktoré boli kedy priložené sú archivované a z administračného rozhrania, kde je možné vidieť i real-time vstupy do objektu je možné dané karty povoliť - autorizovať, alebo zamietnuť - deautorizovať. Real-time aktualizácia dát sa realizuje AJAX-ovým volaním. Celé webové rozhranie je skryté za bezpečnostným loginom pre administrátora, prípadne spravcu kariet.

Systém je rýchly a pravidlá pre karty na jej autorizáciu, alebo deautorizáciu je možné vykonať pohodlne odkiaľkoľvek a pravidlo platí ihneď. Je teda veľmi jednoduché takýto systém spravovať i pre laikov. V prípade nedostupnosti webu/výpadku internetu je možné vždy do objektu vstúpiť kľúčom, ktorý dokáže jazýček odtiahnuť spolu s jazýčkom mechanizmu zámku.

Obšírnejšie info o projekte je možné nájsť i na mojom webe: https://arduino.php5.sk/rfid-system.php
Vyskúšať môžete na: https://arduino.php5.sk/rfid/
Datasheet čítačky RC522: https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf
Datasheet NodeMCU (ESP8266): http://www.handsontec.com/pdf_learn/esp8266-V10.pdf
7
Projekty / Re: Výtah se 3 podlažím
« Poslední příspěvek od Martin+- kdy Leden 01, 2019, 18:41:25 odpoledne »
Dobrý den, Potřeboval bych poradit s tímto kodem. Potřebuji vyřešit podmínku, že když výtah pojede ze 3 patra dolu a někdo ho zavolá ve 2 patře tak se zastaví nabereho a pojede dál.Kod nebude na 100% správně je ve fázi vývoje. Za jakékoliv poznámky budu vděčný.
Kód: [Vybrat]
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define PINsensPatroprvni 1
#define PINsensPatrodruhy 2
#define PINsensPatrotreti 3
#define PINbtnVytahprvni  4
#define PINbtnVytahdruhy  5
#define PINbtnVytahtreti  6
#define PINbtnPatroprvni  7
#define PINbtnPatrodruhy  8
#define PINbtnPatrotreti  9
#define motorPin1     10
#define motorPin2     11
#define motorPin3     12
#define motorPin4     13
int krokMotoru = 0;
LiquidCrystal_I2C lcd(0x27, 20, 4);

bool sensPatro1, sensPatro2, sensPatro3;  //snimace pater
bool btnVytah1, btnVytah2, btnVytah3; //tlacitka ve vytahu
bool btnPatro1, btnPatro2, btnPatro3; //tlacitka v patrech
byte stavVytahu;  //musis vedet, co vytah dela, abys podle toho mohl resit nejakou logiku. Tezko muzes privolat vytah dolu, když jede nahoru
      //0 - vytah stoji, 1 - vytah jede dolu, 2 - vytah jede nahoru, atd. Pripadne to řesit pomoci bool proměnnych
bool aktualniPatro;
bool vytahStoji=0;
bool stisknutoPrivolavaciTlacitko;
bool pozadovanePatro;
bool jedNahoru=2;
bool jedDolu=1;
bool vytahStop=0;


void setup() {
  // put your setup code here, to run once:
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
pinMode(PINbtnVytahprvni, INPUT);
pinMode(PINbtnVytahdruhy, INPUT);
pinMode(PINbtnVytahtreti, INPUT);
pinMode(PINbtnPatroprvni, INPUT);
pinMode(PINbtnPatrodruhy, INPUT);
pinMode(PINbtnPatrotreti, INPUT);
pinMode(PINsensPatroprvni,INPUT);
pinMode(PINsensPatrodruhy,INPUT);
pinMode(PINsensPatrotreti,INPUT);
lcd.begin();
}

void loop(){    //zde přidělit proměnným hodnoty z digitálních vstupů
 
  if(sensPatro1){
    aktualniPatro = 1;}
   
  if(sensPatro2){
    aktualniPatro = 2;}
   
  if(sensPatro3){
    aktualniPatro = 3;}
   
  if(vytahStoji && stisknutoPrivolavaciTlacitko)
  {
    if(aktualniPatro < pozadovanePatro){
      jedNahoru = true;
    }
   
    if(aktualniPatro > pozadovanePatro){
      jedDolu = true;}
     
    if(aktualniPatro == pozadovanePatro){
      jedNahoru = false;
      jedDolu = false;}         
  }
  if(jedNahoru && stisknutoPrivolavaciTlacitko){
   
    if(aktualniPatro<pozadovanePatro){
      stop==pozadovanePatro && jedNahoru;}

    if(aktualniPatro>pozadovanePatro){
      jedNahoru = true;}
  }
   if(jedDolu && stisknutoPrivolavaciTlacitko){
   
     if(aktualniPatro<pozadovanePatro){
      jedDolu = true;}
     
     if(aktualniPatro>pozadovanePatro){
       stop==pozadovanePatro && jedDolu;}
   }
}
void VypisPatra(){
 lcd.setCursor(0,0);
 lcd.print("Patro:");
 lcd.print(digitalRead(aktualniPatro));
  }
  void JedNahoru(){
  krokMotoru++;
  if(krokMotoru > 3){
    krokMotoru = 0;
  }
  RizeniMotoru(krokMotoru);
}

void JedDolu(){
  krokMotoru--;
  if(krokMotoru < 0){
    krokMotoru = 3;
  }
  RizeniMotoru(krokMotoru);
}

void RizeniMotoru(int step){
if(step < 0 || step > 3){
  //jenom takovej sichr.
  //Pokud je proměnná step menší než 0, nebo větší než 3, tak se do proměnné přiřadí 0, tedy první krok
  step = 0;
}

switch(step){
  case 0:
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  break;
  case 1:
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  break;
  case 2:
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  break;
  case 3:
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  break;   
}

delay(3);

8
Služby / 3D tisk zdarma (tedy ne úplně:))
« Poslední příspěvek od Sharplayers kdy Prosinec 30, 2018, 18:57:45 odpoledne »
Ahoj, v rámci prací na novém webu nabízíme 3D tisk za "referenci". Respektive za fotky pro case study.

Pokud potřebujete vytisknout třeba krabičku elektroniky pro nějaký projekt, rádi vytiskneme zdarma, včetně dopravy zdarma. Jediné co požadujeme je fotodokumentace hotového projektu, a krátký popis toho, k čemu slouží.

3D model není podmínkou, ale může být rozhodujícím faktorem pro realizaci.

Čas realizace v případě dodaného 3D modelu (pro Arduino, Raspbery apod. je hodně krabiček k nalezení třeba na thingiverse.com) je 24 hodin.

V případě zájmu pošlete soubory a popis projektu do emailu info@sharplayers.cz.

Tomáš.
9
Projekty / Arduino stopky cez Arduino
« Poslední příspěvek od martinius96 kdy Prosinec 22, 2018, 22:54:02 odpoledne »
Dnes vám predstavím v krátkosti hasičské stopky, respektíve časomieru, ktorú som vytváral ako fanúšik hasičského športu.
Súťažné hasičské družstvo má hádam každá dedina, či časť mesta.
Každý týždeň najmä letnom období sa konajú súťaže po dedinách a mužstvá si pripisujú cenné body, úspechy i neúspechy, o ktorých rozhodujú stotiny, či tisíciny sekundy.

Pre tento účel som vytvoril jednoduché stopky, ktoré mi do istej miery dovolili použiteľne merať čas, napríklad pri tréningoch domácich požiarnikov.
Pre celú logiku systému som využil som millis, čo je funkcia interného časovača Arduina, ktorá vracia počet milisekúnd od štartu procesora. Vieme teda merať čas na 3 desatinné miesta (1000 ms = 1 sekunda). Presnosť vieme teda určiť na 1 tisícinu (obrazne povedané  :)  ).

Prostredníctvom tejto funkcie vieme teda merať čas. Potrebujeme nejaký prvotný impulz - niečo, čím si odmeriame štartovací čas a spustíme celú logiku systému. Použil som teda fyzické tlačidlo, ktoré je nutné manuálne stlačiť. Tento čas sa uloží a časy sa začnú počítať od tohto momentu. Refresh-rate je nastavený na 10ms, i keď do displeja by bolo možné dáta posielať každú milisekundu, čo by znamenalo 1000Hz refreshrate, ale to by samozrejme displej nezvládol spracovať a text na ňom by pripomínal rozsypaný čaj. Arduino zvláda posielať dáta aj v milisekundovom intervale vďaka vysokorýchlostnej zbernici, ktorou je prepojené s LCD znakovým displejom. Sú to údaje o veľkosti len pár bajtov.
(Programové počítanie času):

V programe bežia 2 podprogramy, jeden pre ľavý, druhý pre pravý prúd, kde sa skúma, či bol čas zastavený a v premenných sa nachádzajú jednotlivé údaje (minúty, sekundy, desatiny, stotiny, tisíciny), tie sa odosielajú na displej.
(Odosielané dáta na displej do riadku - pre jeden z útokov)

Pre impulz spadnutého terča som využil kontakt, ktorý zopne terč pre spadnutí. Rovnako pre oba terče. Čas sa zastaví prakticky okamžite ( ak zanedbáme oneskorenie na vedení a pod.).
V prípade, že mužstvo zle odštartuje s neplatným pokusom, je možné stopky ihneď vynulovať druhým tlačidlom a ihneď ich pripraviť na štart. Funkčnosť je veľmi jednoduchá.
Čo teda po technickej (hardvérovej) stránke potrebujeme k projektu?
    Arduino, alebo samostatný AtMega čip
    LCD displej 16x2 alebo 20x4 s I2C prevodníkom
    2 tlačidlá
    2 spínacie kontakty
Aby som minimalizoval použité elektrotechnické súčiastky, využil som interné pullup rezistory Arduina, prostredníctvom ktorých je možné spínať kontakt proti zemi a jednoducho zaznamenať zmenu, pin je v stave active-high. Pri zapojení s rezistorom sa používa 10kohm rezistor, ak sa kontakt spína proti 5V RAW pinu Arduina.
Prečo som na začiatku rozprával o obraznej presnosti na 1 tisícinu?
Takmer každý, kto si plánuje kúpiť Arduino pozerá na cenu. Dať 30€ za originálne Arduino, alebo 3€ za čínsky klon, odpoveď je myslím jasná..
Čínske klony sú hardvérovo totožné s originálmi. Je to ale istý rozdiel a to v kvalite oscilátora, ktorý dáva Arduinu takt. V originálnych Arduinách sa využíva presný 16MHz oscilátor. Pri klonoch sa používa rovnaký, ale nie až taký presný, dá sa predstaviť ako 15.9998MHz.
Z toho vyplýva, že sa po určitom čase presnosť zmenšuje na tisícinách, pri dlhšom meraní i na stotinách, desatinách, sekundách. Ďalší útlm predstavuje aj vedenie, po ktorom signály prichádzajú. Arduino stopky nikdy nenahradia certifikovanú časomieru, ktorá sa používa pre hasičské športy!

Celý systém je možné napájať i na batérie či powerbanku, jeho celkový odber je do 60mA pri 5V.
Viac o podobných projektoch môžete nájsť aj na mojich stránkach: https://arduino.php5.sk/hasicske-stopky.php
10
Bastlírna / Re:Arduino micro - ovladače?
« Poslední příspěvek od Rudolf kdy Prosinec 14, 2018, 10:04:05 dopoledne »
ano, stejný problém, stačí stáhnout správné ovladače na čínskou verzi...levnější čip...(měl by fungovat od XP až do 10)
https://uloz.to/!v2T2s1DluokW/ch341ser-exe
Stran: [1] 2 3 ... 10