duinozone.cz - Arduino a Raspberry fórum

Poslední příspěvky

Stran: [1] 2 3 ... 10
1
Vědátorna / Re:Linearni actuator
« Poslední příspěvek od Fenretooth kdy Únor 25, 2019, 05:35:36 dopoledne »
Each of these stories may not be the same.
2
Bastlírna / Re:komunikace po RS-485
« Poslední příspěvek od Fenretooth kdy Únor 25, 2019, 05:34:50 dopoledne »
I really like these things. Always trying to find information but didn't find the answer
3
Projekty / Capture points (DOMINATION) - Arduino + WiFi
« Poslední příspěvek od martinius96 kdy Únor 24, 2019, 00:28:50 dopoledne »
Airsoft je outdoor hra radiacia sa k extrémnym športom. Hra je veľmi populárna a tak si vyslúžila postupom času aj rôzne štýly hrania, teda herné módy. Väčšina z nich je postavená na populárnych FPS tituloch ako Counter Strike či Call of Duty. Od útočných a obranných módov až po Free-for-all. Jedným  veľmi obľúbených módom je aj Capture points, respektíve DOMINATION. V tomto hernom móde ide o minimálne dve lokácie, o ktoré tímy bojujú.

Cieľom hry je obsadiť a udržať oba body jedným tímom. Body sú umiestnené v neutrálnej lokácii, napríklad na úrovni stredu mapy po stranách, alebo každý v sídle druhého tímu. Aby bola hra dostatočne rýchla, stačí ak tím obsadí oba body. Ak je zapísaný na oboch bodoch (nemusí ho udržať po x sekúnd), hra sa končí a tím vyhral. Aby som hru urobil zaujímavejšou, vyhotovil som takéto dva body.
Každý bod obsahoval po hardvérovej stránke:
    Arduino Nano/Uno
[/list]
    buzzer (typu active/passive) pre ohlásenie konca hry
[/list]
    wifi modul nRF24l01 + PA + LNA
[/list]
    dvojica tlačidiel - pushbuttonov
[/list]
    LED diódy s farbami tímov
[/list]
    *doplnkové relé pre zopnutie silnejších svetiel na 12V/24V/230V
[/list]

Ako funguje systém po stránke funkčnosti?
Jedno tlačidlo je pre Tím 1 (žltý tím) a druhé pre Tím 2 (červený tím). Tím pri obsadení stlačí svoje tlačidlo, čo zmení farbu bodu podľa ich tímu. Ak jeden tím obsadí oba body, rozuzvučia sa hlásiče na oboch bodoch (hra sa skončí, alebo pokračuje ďalej podľa pravidiel organizátora akcie, napr. do posledného muža pre druhý bod za hru). Hra nie je časovo ohraničená limitom.

V reálnom čase medzi sebou obe Arduiná komunikujú s modulmi nRF24l01 + PA + LNA. Odozva medzi oboma Arduinami je na úrovni 1-5ms.Vďaka modulom nRF24l01 je možné komunikovať medzi Arduinami na obrovské vzdialenosti na stovky metrov v nezarušenom prostredí (nRF24l01 ponúka vyše 120 kanálov pre komunikáciu na 2,4Ghz.)

Pri využití externého 5v/3.3v zdroja je možné komunikovať až na 1,1 kilometra v nezarušenom prostredí najnižšou prenosou rýchlosťou (250kb/s). V programe pre Arduino sa určuje komunikačný kanál, výkon nRF modulu, prenosová rýchlosť (250kb/s až 2Mbps). Čím je vyššia rýchlosť zvolená, tým náchylnejší je systém na rušenie. V prostredí lesa sme s najnižšou prenosou rýchlosťou a maximálnym vysielacím výkonom dosiahli prenos na 310 metrov.

Princíp je teda veľmi jednoduchý a systém je možné rozšíriť o ďalšie nRF moduly. Jeden modul dokáže komunikovať až s ôsmymi modulmi, systém je teda možné rozšíriť až na 9 bodov, o ktoré sa bojuje. Najvyšší prenosový výkon nie je možné nastaviť pri napájaní z Arduina, nakoľko odber nRF prevyšuje prúdové charakteristiky regulátora. Využíva sa preto napájanie na 5-12V cez adaptér, do ktorého sa modul zasadí a má on-board regulátor na 3.3V.

Do modulu zapasuje aj modul nRF24l01 (bez PA + LNA). PA + LNA je označenie pre modul s anténou, ktorý je 10-12x lepší dosahovo ako pôvodný nRF24l01 modul. Pôvodný modul má maximálny dosah 100 metrov v nezarušenom prostredí s maximálnym výkonom. Modul nRF24l01 komunikuje po SPI zbernici a má voliteľné piny CE (Chip state) a CS (Chip select). Komunikácia je rýchla s nízkou latenciou. Tieto moduly vedia komunikovať iba medzi sebou, nie je ich možné použiť napríklad pre pripojenie k internetu a pod. Jedná sa výlučne o komunikačné moduly medzi sebou na frekvencii 2,4GHz. Hlavnou nevýhodou týchto modulov je vzdialenosť pinov od seba v oboch radoch, čo neumožňuje modul použiť do breadboardu. Preto sa pri vývoji bez adaptéra zrejme nezaobídete.

Pri použití hlásiča (buzzra) je možné generovať frekvenciu signálu, ktorú bude buzzer vydávať, minimum je 31Hz a možnosť je zvoliť až cez 65 5XXHz. Aktívne i pasívne buzzre k Arduinu znejú prakticky rovnako. Povedal by som, že aktívne sú o niečo hlasnejšie. Z vlastnej skúsenosti používam 800 - 4000Hz pre frekvenciu tónnov, čo sú tóny pomerne zreteľné a vhodné pre pípajúci zvuk, nie sú príliš otravné a je ich dobre počuť. Ovládať hlasitosť ako takú nie je u takýchto modulov možné. Pri nastavení novej hry je možné oba zariadenia odpojiť a pripojiť na batériu/adaptér, alebo obe zariadenia reštartovať tlačidlom pre premazanie uložených stavov tímov, aby hlásič ustal.

Ďalšie zaujímavé projekty vrátane stručných o tomto projekte je možné nájsť na mojom webe: https://arduino.php5.sk/airsoft-wifi.php

Riešenie používa vstavanú knižnicu SPI.h pre komunikáciu a knižnicu RF24.h pre nRF24l01 moduly. Je možné použiť i Radiohead knižnicu, ktorá ale neumožňuje regulovať vysielací výkon a voliť špecifické kanály, využíva tzv. pipes pre komunikačnú cestu, nie navolené číslo kanálu. Priložené zdrojové kódy môžete vyskúšať pre funkcionalitu spísanú vyššie a vyskúšať si takýto štýl hry. Pozor pri zapojení tlačidiel, používa sa zapojenie INPUT_PULLUP, teda tlačidlo je aktívne (stlačené) pri hodnote LOW - zem. Tento systém je vhodný pre športy typu Airsoft, Paintball, Nerf Wars. Vhodný pre tímy, športový areál a pod.
Zdrojový kód pre BOD 1:
Kód: [Vybrat]
// nRF24L01 BOD1
#include  <SPI.h>
#include "RF24.h"
#define CE 4
#define CS 3
RF24 nRF(CE, CS);
int odozva = 8;
int prijem = 12;
const int buzzer = 2;
const int cervenytim = 5;
const int zltytim = 6;
const int cervenaled = 7;
const int zltaled = 8;
byte adresaPrijimac[] = "prijimac00";
byte adresaVysilac[] = "vysilac00";
void setup() {
 Serial.begin(9600);
 pinMode(buzzer, OUTPUT);
 pinMode(cervenaled, OUTPUT);
 pinMode(zltaled, OUTPUT);
 pinMode(cervenytim, INPUT_PULLUP);
 pinMode(zltytim, INPUT_PULLUP);
 nRF.begin();
 nRF.setDataRate( RF24_250KBPS );
 nRF.setPALevel(RF24_PA_HIGH);
 nRF.openWritingPipe(adresaVysilac);
 nRF.openReadingPipe(1, adresaPrijimac);
 nRF.startListening();
}

void loop() {
 if (odozva == prijem) {

 tone( buzzer, 900, 800);

 delay(1000);
 } else {
 noTone;
 int vystupcerveny = digitalRead(cervenytim);
 int vystupzlty = digitalRead(zltytim);
 if (vystupcerveny == LOW) {
 odozva = 1;
 digitalWrite(cervenaled, HIGH);
 digitalWrite(zltaled, LOW);
 } else if (vystupzlty == LOW) {
 odozva = 2;
 digitalWrite(cervenaled, LOW);
 digitalWrite(zltaled, HIGH);
 }

 nRF.stopListening();
 nRF.write( &odozva, sizeof(odozva) );
 nRF.startListening();
 while (nRF.available()) {
 nRF.read( &prijem, sizeof(prijem) );
 }
 Serial.println("Prijata volba: ");
 Serial.println(prijem);
 Serial.println("Odozva: ");
 Serial.println(odozva);
 delay(50);
 }
}

Zdrojový kód pre BOD 2:
Kód: [Vybrat]
// nRF24L01 BOD2
#include  <SPI.h> //arduino kniznica pre SPI zbernicu
#include "RF24.h" //kniznica pre moduly
int odozva = 3; //globalna premenna pre odosielany stav timu
int prijem = 4; //globalna premenna pre citany stav timu
const int buzzer = 2; //pin pre hlasic
const int cervenytim = 5; //pin pre cerveny button
const int zltytim = 6; //pin pre zlty button
const int cervenaled = 7;
const int zltaled = 8;
#define CE 4 //chip state pin
#define CS 3 //chip select pin
RF24 nRF(CE, CS); //nrf s volitelnymi pinmi CE a CS
byte adresaPrijimac[] = "prijimac00"; //adresa prijimac
byte adresaVysilac[] = "vysilac00"; //adresa vysielac
void setup() {
 Serial.begin(9600); //Serial monitor na 9600 baud/s
 pinMode(buzzer, OUTPUT); //hlasic nastavit ako vystup
 pinMode(cervenaled, OUTPUT);
 pinMode(zltaled, OUTPUT);
 pinMode(cervenytim, INPUT_PULLUP); //tlacidla ako vstup na pullup rezistor
 pinMode(zltytim, INPUT_PULLUP); //tlacidla ako vstup na pullup rezistor
 nRF.begin(); //zapnut komunikaciu s nRF modulom
 nRF.setDataRate( RF24_250KBPS ); //najnizsia rychlost pre najvacsiu moznu vzidalenost
 nRF.setPALevel(RF24_PA_HIGH); //napajacie napatie na high moznost MAX potrebuje externy zdroj na 5v (3.3v pri napojeni napriamo)
 nRF.openWritingPipe(adresaPrijimac); //zapisujeme na prijimac na jeho adresu
 nRF.openReadingPipe(1, adresaVysilac); //citame na svojej adrese na kanale XX
 nRF.startListening();
}

void loop() {
 if (odozva == prijem) {

 tone( buzzer, 900, 800);

 delay(1000);
 } else {
 noTone(buzzer);
 int vystupcerveny = digitalRead(cervenytim);
 int vystupzlty = digitalRead(zltytim);
 if (vystupcerveny == LOW) {
 odozva = 1;
 digitalWrite(cervenaled, HIGH);
 digitalWrite(zltaled, LOW);
 } else if (vystupzlty == LOW) {
 odozva = 2;
 digitalWrite(cervenaled, LOW);
 digitalWrite(zltaled, HIGH);
 }

 if ( nRF.available()) {
 // čekání na příjem dat
 while (nRF.available()) {
 nRF.read( &prijem, sizeof(prijem) );
 }
 Serial.println("Prijata volba: ");
 Serial.println(prijem);
 Serial.println("Odozva: ");
 Serial.println(odozva);
 nRF.stopListening();
 nRF.write( &odozva, sizeof(odozva) );
 nRF.startListening();
 }
 }

}
4
Projekty / Notifikátor udalostí cez mikrokontróler
« Poslední příspěvek od martinius96 kdy Únor 23, 2019, 00:25:45 dopoledne »
Dnes v krátosti predstavím notifikátor udalostí, ktorý bol pôvodne navrhnutý už k existujúcim projektom. Jeho hlavnou úlohou bolo upozornenie na stavy a krízové situácie, ktoré počas behu systému nastali a vyžadujú pozornosť, alebo vyriešenie.  Upozornenia boli riešené odosielaním e-mailov s časovým obmedzením navoleným používateľom.

To vo výsledku znamená, že ak dôjde ku krízovej situácii, aby systém s každým pripojením mikrokontroléra neodosielal email cez .php stránku, je to ohraničené časovým intervalom - medzerou. V intervaloch (napr. každých 5 min, alebo iný navolený interval) je používateľ informovaný e-mailom na krízovú situáciu. Po prihlásení používateľa do systému sa už e-mailové notifikácie ďalej k tomu konkrétnemu problému neposielajú. V prípade, že je používateľ v systéme a nastane krízová situácia, e-mail sa odošle minimálne 1 krát pre prípad, ak by to prehliadol a pod.
Využitie je plánované hlavne pre tieto účely:
    Pohyb v noci okolo PIR senzora - vhodné pre areály, haly
    Senzor vytopenia - vhodné pre práčovne, byty
    Teplotné senzory - oznam pri mínusovej teplote - vhodné pre sady, kotolne
    Prekročenie vlhkosti, tlaku vzduchu - vhodné pre meteostanice
    Prekročenie otáčok motora - hall snímač s magnetom
    Prekročenie napätia/prúdu
    a ďalšie veličiny, ktoré je možné merať
Každý e-mail je možné odoslať s rôznymi informáciami. Napríklad stav batérie, opis problému, posledné hodnoty, aké riešenie sa vyžaduje a pod.

Systém je teda vhodný aj pre laikov a dokáže zabrániť väčšej katastrofe, napríklad pri vytopení v noci, mimo domu, pomôže s rýchlejšou reakciou na problém s možnosťou okamžitého vyriešenia - napríklad uzavretím solenoid ventilu pre vodu automaticky, nevyžaduje sa akcia od používateľa. O uzavretí môže byť používateľ taktiež notifikovaný. Súčasťou je aj webaplikácia, kde môže používateľ vidieť aj aktuálne hodnoty a po oprave problému vytopenia môže jedným klikom opäť dovoliť systému elektromagnetický ventil - solenoid otvoriť prostredníctvom relé.

Čo sa týka dátovej náročnosti, .php súbor, na ktorý sa mikrokontróler pripojí má do 1kB, podľa rozsiahlosti kódu. Je teda vhodný aj 3G router s dátovým balíkom nižších tried s použitím napríklad pre sady a iné exteriérové miesta, kde nie je wifi, či Ethernet. Mikrokontróler môže aj spať a v prípade nehodovej udalosti ho akcia na pine (napríklad pri vytopení dôjde k spojeniu kontaktov pre záznam) zobudí a mikrokontróler môže informovať o udalostiach. V spánku je možné pri mikrokontroléroch dostať odber rádovo v jednotkách µA, teda je systém možné prevádzkovať aj na batérie.

Arduino s Ethernet shieldom, respektíve modulom vie komunikovať po HTTP protokole. V prípade ESP8266 a ESP32 môžeme komunikovať aj po HTTPS protokole. ESP32 vyžaduje špecifickú konfiguráciu HTTPS spojenia na webserver, nakoľko sa vyžaduje Root CA certifikát daného webu v .pem formáte. GET, alebo POST parametrami je možné do .php súboru, ktorý odosiela mail vložiť aj hodnoty, ktoré budú súčasťou problému pre lepšiu identifikáciu problému.

Web časť projektu je univerzálna a vie sa na ňu napojiť akýkoľvek mikrokontróler či už po HTTP alebo HTTPS protokole. Pripojenie na webserver a na súbor, ktorý odošle e-mail môže vyzerať následovne (Arduino + Wiznet W5100 po HTTP):
Kód: [Vybrat]
#include <SPI.h>
#include <Ethernet.h>
#define Hostname "Arduino"   
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};   
char server[] = "www.mywebsite.com";     
IPAddress ip(192, 168, 1, 254); //IP adresa zo subnet rozsahu
EthernetClient client;   
void setup() {
 Serial.begin(9600);
}
 
void loop() {
   if (Ethernet.begin(mac) == 0) {   
    Serial.println("Chyba konfiguracie DHCP, nastavim manualnu IPv4");
    Ethernet.begin(mac, ip);                       
  } 


if (client.connect(server, 80)) {
    Serial.println("Pripojenie na webserver prebehlo uspesne..");
    client.print("GET /email.php");   //umiestnenie php scriptu na webserveri 
    client.println(" HTTP/1.1");             
    client.println("Host: www.mywebsite.com");
    client.println("Connection: close");   
    client.println();                       
 client.stop();   
 Serial.println("E-mail uspesne odoslany!");
  } else {                                         
    Serial.println("Pripojenie neuspesne");
  } 
delay(10000);
}
E-mail je možné odoslať prostredníctvom .php stránky cez SMTP server cez mail(); funkciu. V prípade, že neuvedieme odosielaciu e-mailovú adresu, e-mail sa odošle prostredníctvom sendmail_from parametra z nastavenia webservera (Apache / Nginx). Implementácia teda nie je zložitá.
Príklad:
Kód: [Vybrat]
<?php
$sprava
"Ahoj svet!";
$spravawordwrap($msg,70);
mail("adresaprijimatela@jehomail.com","Predmet spravy",$sprava);
?>

V prípade korektnosti nastavenia SMTP servera na vašich .php stránkach po spustení tohto e-mailu dostanete e-mail s textom Ahoj Svet! a zvoleným predmetom.
Vo frameworkových systémoch (Laravel, Symphony) sa stretneme skôr s použitím PHPMailer knižnice. E-mail je možné doplniť aj o obrázky, doplnkové info s detailným opisom problému. Cieľovú e-mailovú adresu treba na prichádzajúce e-maily s rovnakou správou od rovnakého odosiellateľa pripraviť, aby to nevyhodnocoval ako spam a tým pádom nenotifikoval používateľa. Špeciálne to platí pre G-mail a podobné služby s dobrou SPAM filtráciou.
O projekte je niečo spísané aj na mojom webe, ktorý môžete taktiež navštíviť, nájdete tam aj rôzne ďalšie realizované projekty cez Arduino, ESP dosky, devkity s použitím webových riešení: https://arduino.php5.sk/mailer.php
5
Projekty / Meteostanica s ESP8266 - NodeMCU
« Poslední příspěvek od martinius96 kdy Únor 06, 2019, 02:04:30 dopoledne »
Dnes by som vám v krátosti predstavil projekt, ktorý som tvoril už pred takmer dvomi rokmi. Bol to druhý webovo orientovaný projekt, ktorý som tvoril v súvislosti s mikrokontrolérmi a za svoju životnosť si prešiel rôznych úpravami - najmä v oblasti využitých senzorov, ktoré sa niekoľko krát menili z dôvodu spoľahlivosti, chybných meraní a ďalších javov. Po hardvérovej stránke som pre mozog projektu využil vývojovú dosku NodeMCU v3 Lolin s wifi čipom ESP8266 pre pripojenie do wifi siete a odosielanie nameraných údajov po HTTPS protokole do webového rozhrania POST metódou. Vývojovú dosku ESP8266 je možné programovať v prostredí ArduinoIDE ako klasické Arduino s knižnicou Wifi.h pre pripojenie k wifi sieti po doinštalovaní Arduino "jadra" pre ESP.

Meteostanica umožňuje ukladať do MySQL databázy:
    Teplota dnu
    Teplota von
    Vlhkosť vzduchu
    Atmosférický tlak

Poďme si bližšie predstaviť webové rozhranie a zistiť, čo vlastne ponúka pre používateľa:
    Real-time tabuľka pre zobrazenie posledných nameraných údajov so zobrazením času a tendencie - stúpa/klesá/ustálená (Štandardne je čas záznamu 5-15min)
    Zmena názvov - umiestnenie senzorov, pomenovanie senzora
    História meraní - 30 dní dozadu v tabuľkovom prevedení
    Maximá, minimá, priemer za deň / 7 dní / 30 dní - budíková reprezentácia
    Grafická reprezentácia vývoja počasia za 24 hodín / 7 dní
    Prognóza počasia - BETA (predpoveď na základe vývoja počasia)
    Vzdialený reset dosky
    Log (neúspešné prihlásenie so záznamom IP adresy, porucha senzora - neplatné hodnoty)
    Zdrojový kód pre ESP8266
    Zmena loginu, odhlásenie sa, prihlásenie sa

Dáta sú predávané serveru a spracované jazykom PHP. Na základe použitých senzorov viem, aké hodnoty vracajú pri nesprávnom zapojení, vytiahnutom kontakte a pod. Napríklad u populárnych teplotných senzorov DS18B20 na OneWire zbernici je to -127°C pri zlom zapojení (nezapojení) a pri odpojení napájacieho vodiča (Vcc) sa najčastejšie nameria teplota 85°C.

Viem si teda tieto kritické hodnoty ošetriť a prípadný problém oznámiť do logu a zlú hodnotu nezapísať. Nakoľko som potreboval merať aj vlhkosť vzduchu - nech je už tá meteostanica poriadna :), hľadal som senzor pre dvojkombináciu teplota + vlhkosť. Narazil som na DHT22, čo je pomerne používaný senzor v tejto sfére.

Senzor ma ale nepotešil, nakoľko mal často zlé dáta, i keď bol okolím vychválený, že nič lepšie nie je. Často krát sa namerala hodnota 0 pre teplotu i pre vlhkosť. Tento defekt - porucha priemerne vychádzala na jedno z 12 meraní, čo je dosť veľká chybovosť na jednoduchý digitálny senzor. Preto som siahol po náhrade v podobe SHT21, respektíve Si7021 (iné označenie pre modul). Modul komunikuje po I2C zbernici a  osvedčil sa.

Modul bol veľmi spoľahlivý a v prípade problému s komunikáciou doska namerala -5% vlhkosti, teda som tiež vedel ošetriť tento stav a prípadný problém hlásiť do logu a problém riešiť. Senzor sa osvedčil a počas prevádzky niekoľko mesiacov som nenarazil na problém. Keďže som meteostanicu ďalej rozširoval a chcel som zaznamenávať aj atmosférický tlak, vyskúšal som senzor BMP280, ktorý vie merať teplotu a atm. tlak vzduchu. Meranie tlaku vzduchu po prepočte na nadmorskú výšku bol s rozdielom do 0,4hPa, čo si myslím, že je na modul za euro aj niečo výborné.

Onedlho bol senzor vymenený za BME280, ktoré vie zaznamenať teplotu, atmosférický tlak vzduchu a vlhkosť vzduchu. Naozaj kompaktný senzor 3v1, odporúčam. Tento senzor som teda umiestnil von a modul skryl do radiačného štítu, ktorý ho chráni pred vodou, či už v podobe dažďa, alebo kondenzátu.

Moduly BMP a BME sú ľahko zameniteľné a často dochádza k omylom pri nákupe, kedy predajca zašle BMP verziu za cenu BME, býva 3x drahšia. Rozlišovať by sa mali zvýraznením písmena na senzore, ale často to nie je pravidlom. Nakoľko BMP, resp. BME280 komunikuje po I2C zbernici, má určitú adresu pod ktorou vystupuje. Problém môže nastať, ak chceme použiť viacero týchto senzorov. Riešením je emulovať softvérovo I2C zbernicu na iných pinoch, kam sa ďalší senzor pripojí, alebo prostredníctvom SDO pinu je možné napojiť ho voči Vcc (pullup), respektíve GND (pulldown), čím získame inú adresu a môžeme tak využiť viacero rovnakých senzorov na jednej hardvérovej I2C zbernici. Zaujímavosťou u týchto modulov je aj možnosť určiť nadmorskú výšku na základe teploty a absolúteho tlaku vzduchu a i ten prepočítať na relatívny v závislosti od nadmorskej výšky a teploty:
Kód: [Vybrat]
relativny_tlak = absolutny_tlak / pow(1 - ((0.0065 *nadmorska_vyska) / (teplota + (0.0065 *nadmorska_vyska) + 273.15)), 5.257);Doterajšie riešenie bolo vybavené takýmto typom hardvéru pre záznam dát:
    DS18B20 (teplota dnu), BME280 (tlak, teplota, vlhkosť)
    DHT22(teplota dnu, vlhkosť), BMP280 (tlak, teplota)
    DS18B20 (teplota dnu), DHT22 (vlhkosť von), BMP280 (tlak, teplota)
    DS18B20 (teplota dnu, SHT21 (vlhkosť von), BMP280 (tlak, teplota)
Webové rozhranie využíva voľne dostupnú šablónu Klorofil od Bootstrapu, AJAX-ové volania PHP scriptov pre real-time tabuľku, HTML elementy pre tlačidlové rozhranie používateľa. Pre grafy som využil hotový balík Google Charts. Zjednodušenú verziu tejto meteostanice je možné zdarma vyskúšať v pripravenom webovom rozhraní na adrese: https://arduino.php5.sk/meteostanicav2/
Ak si chcete webové rozhranie vyskúšať, máte možnosť! Pri použití Arduina s Ethernet shieldom W5100, alebo ESP8266 (NodeMCU) s hardvérom: DS18B20 (teplota dnu), DHT22 (vlhkosť), BMP280 (teplota, tlak vzduchu). ESP8266 využíva HTTPS pripojenie s knižnicou WifiClientSecure. Arduino podporuje iba HTTP spojenia. Vo webovom rozhraní meteostanice nájdete aj potrebné knižnice pre senzory.
Zdrojový program pre Arduino: https://arduino.php5.sk/meteostanica-arduino.php
Zdrojový program pre NodeMCU: https://arduino.php5.sk/meteostanica-nodemcu.php
Fotogaléria webového rozhrania: Obrázky sú ilustračné z webového rozhrania, ktorá je voľne prístupné, každý tam môže nahrať čo chce, teda dáta sú neplatné, prestrelené, atď....



6
Projekty / Wifi teplomer s ESP8266 v STA - AP móde
« Poslední příspěvek od martinius96 kdy Únor 04, 2019, 01:19:02 dopoledne »
Dnes v krátkosti predstavím projekt wifi teplomera. Teplomer využíva wifi čip ESP8266 na vývojovej doske NodeMCU v3 Lolin. Wifi čip okrem záznamu údajov drží aj webový server, kde vypisuje namerané údaje. Údaje sa odmerajú vždy pri načítaní stránky. V nečinnosti sa dáta nezaznamenávajú. Webový server umožňuje spúšťať HTML + CSS kód, čo umožňuje do istej miery spraviť aj pekné grafické rozhranie pre vykreslenie teplôt používateľovi napríklad do tabuľky. Prostredníctvom Javascriptu je možné dáta aj automaticky aktualizovať na stránke, avšak túto možnosť som nevyužil, nebola potrebná.

Existujú dve verzie tohto projektu, pričom funkčnosť webstránky ako takej je totožná. V oboch prípadoch na ESP8266 beží webserver, ktorý vykreslí teploty do tabuľky. Pri verziách sa rozlišuje konektivita. V jednom prípade je možné využiť už existujúcu LAN sieť, do ktorej sa doska pripojí a na statickej, alebo dynamickej IP adrese drží webserver. Používateľ po zadaní IP do okna prehliadača dostane na požiadavku stránku od ESP s teplotami.

V druhom prípade doska vysiela vlastnú SSID v AP móde ako prístupový bod. Používateľ k doske pristúpi zadaním hesla do siete (je obsiahnuté v programe ESP8266). Doska vysiela SSID so šifrovaním WPA/WPA2 PSK, prípadne je možné vysielať otvorenú wifi sieť. Dáta sú prístupné iba v dosahu tejto wifi siete mimo LAN siete domácnosti. Na ESP beží aj DHCP server, ktorý po úspešnej autentizácii používateľa pridelí IP adresu z rozsahu. Webová stránka sa nachádza na IP adrese brány - ESP.

Dáta o teplote sú zaznamenávané z dvojice teplotných senzorov DS18B20, ktoré sú zapojené na OneWire zbernici, ktorá umožňuje zber dát po jednom vodiči s možnosťou ťahania vodiča na desiatky až stovky metrov. DS18B20 sa vyrábajú v dvoch hlavných verziách - tzv. interiérový senzor v obale tranzistora, alebo vo vodotesnom - exteriérovom vyhotovení v hliníkovej rúrke. Zbernica OneWire je vhodná do interferenčného prostredia a je možné na ňu zapojiť až 256 senzorov. Jednotlivé senzory sú rozdelené svojou adresou z výroby - sériovým číslom. Existujú 2 hlavné možnosti pripojenia senzorov. Normálne zapojenie a parazitné, u oboch je možné napájať na 3.3 - 5.5V.
Rozdiely sú patrné už zo schém:


Viac o projekte je možné nájsť na webe: https://arduino.php5.sk/wifi-teplomer.php a dozvedieť sa ďalšie zaujímavé info k projektu.
7
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:





8
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".

9
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
10
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
Stran: [1] 2 3 ... 10