duinozone.cz - Arduino a Raspberry fórum

Autor Téma: Nastavnie hysterezi na spinanie rele  (Přečteno 4430 krát)

Offline drawtt

  • Bastlíř začátečník
  • *
  • Příspěvků: 48
Re:Nastavnie hysterezi na spinanie rele
« Odpověď #75 kdy: Leden 05, 2017, 17:00:52 odpoledne »
Ahoj tak som kompletne prepinoval megu na nano . všetko funguje 100% za čo veľká vďaka, ja by som to lepil ešte dlho .
Skúšobne som tam osadil vysielač 433Mhz RF Wireless transmitter module and receiver. Predbezne som ho definoval na pin 7 ešte je blokovany  nainstaloval som kniznicu VirtualWire zo stránky :
http://navody.arduino-shop.cz/navody-k-produktum/vysilac-a-prijimac-433-mhz.html
prikladám kompletná aktuálny kod v6.
Kód: [Vybrat]
// Regulace kotle
// duinozone.cz
// by drawtt & JP
// v2.3
// change log>
// v2
// lcd.println nahrazen za lcd.print
// v1
//v2.1 odstránenie druhej obrazovky, rozloženie  T1, Hys a Alarm teplota na druhopm riadku , ovladanie  3x trimrom 10k zapojene  bežec ba A0,A1,A2
//v hornom riadku teplota UK :   a teplota AN : .
// - uprava originalniho programu na zakladni bloky (sber dat, vyhodnoceni, nastaveni vystupu, zobrazeni na LCD)
// - komentare
//v2.2
// pripojenie RGB diody a nastavenie  - system OK  zelena, chyba cidla  modra a alarm cervena..
//pokus o pripojenie led diody na spinanie rele  v kode zatial vsunute a anulovane , pri zapojeni  pin3 anoda , odpor na GND  a spusteni rele , ledka nereaguje
// v5
// uprava LCD pro 1 obrazovku
// optimalizace kodu
// uprava ovl. LED diody
// oprava svietienie RGB podla poziadavky prehodene piny v kode
//osadeny bzucak
//v6
//priprava na transmiter

// knihovny
#include <OneWire.h> // *** kde jsi vzal knihovnu sem napis adresu kde jsi ji stahnul a jako verzi
#include <DallasTemperature.h> // *** kde jsi vzal knihovnu sem napis adresu kde jsi ji stahnul a jako verzi
#include <LCD.h> // *** kde jsi vzal knihovnu sem napis adresu kde jsi ji stahnul a jako verzi
#include <LiquidCrystal_I2C.h>  // *** kde jsi vzal knihovnu sem napis adresu kde jsi ji stahnul a jako verzi
#include <RGB_LED.h>
#include <VirtualWire.h>


// konstanty
#define ONE_WIRE_BUS 2    // pin ONE WIRE sbernice
#define RELE 8 // pin regulacniho rele
#define ALARM 9 // pin bzucaku alarmu *** dopln si spravny pin
//#define wirtual 7
#define BLUE  10
#define GREEN 11
#define RED   12     
//#define LEDka  3                // LED připojena na pin 3         

#define setTEPLOTA A0 // analogovy pin nastaveni teploty rele *** nastav si jak potrebujes
#define setTEPLOTAmin 15 // nastaveni rozsahu teploty sepnuti - minimum  *** nastav si jak potrebujes
#define setTEPLOTAmax 35 // nastaveni rozsahu teploty sepnuti - maximum *** nastav si jak potrebujes

#define setHYSTEREZE A1 // analogovy in nasteveni hysterze teploty *** nastav si jak potrebujes -1* rozdiel 1 st od teploty T zopnutia rele
#define setHYSTEREZEmin 1 // nastaveni rozsahu hystereze teploty sepnuti - minimum *** nastav si jak potrebujes
#define setHYSTEREZEmax 15 // nastaveni rozsahu hystereze teploty sepnuti - maximum *** nastav si jak potrebujes

#define setALARM A2// analgovy pin nastaveni teploty alarmu *** nastav si jak potrebujes
#define setALARMmin 10 // nastaveni rozsahu teploty alarmu - minimum *** nastav si jak potrebujes **   tu som prestavil hodnotu a  nasta: na LCD reaguje na ALARM
#define setALARMmax 99 // nastaveni rozsahu teploty alarmu - maximum *** nastav si jak potrebujes

#define znak_Stupen 0 // cislo znaku v LCD

// instance objektu
OneWire oneWire(ONE_WIRE_BUS); // instance sbernice ONE WIRE
DallasTemperature sensors(&oneWire); // instance cidel DS18B20
LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7); // 0x27 0x3F is the default I2C bus address of the backpack-see article // instance LCD displaye

 // promenne
DeviceAddress Probe01 = { 0x28, 0xFF, 0xAF, 0x77, 0x55, 0x16, 0x03, 0xD0 }; // 1.cidlo "4"      28 FF AF 77 55 16 3 D0
DeviceAddress Probe02 = { 0x28, 0xFF, 0xAE, 0x2A, 0x55, 0x16, 0x03, 0x58 }; // 2.cidlo "5"      28 FF AE 2A 55 16 3 58
int Tprobe1 = 0; // teplota 1.cidla
int Tprobe2 = 0; // teplota 2.cidla
int nastavenaTeplota = 0; // teplota sepnnti rele
int nastavenaHystereze = 0; // hystereze vypnuti rele
int Talarm = 0; // nastavena teplota alarmu
int chyba= 0; // promena pro indikaci chyby  - 0(V PORADKU), 1(CHYBI CIDLO 1), 2(CHYBI CIDLO 2)


// vlastni znaky
// STUPEN CELSIA
byte stupen[8] = {
  B01000,
  B10100,
  B01000,
  B00110,
  B01001,
  B01000,
  B01001,
  B00110
  };

void setup() {
  sensors.begin(); // zavedeni teplotnich cidel
 
  lcd.begin (16,2); // zavedeni LCD displaye
  lcd.setBacklightPin(3,POSITIVE); // nastaveni LCD - BL, BL_POL
  lcd.setBacklight(HIGH); // zapunti podsviceni
 
  // zapsani vlastnich znaku na LCD
  lcd.createChar(znak_Stupen, stupen);

  pinMode(RELE, OUTPUT); // pin RELE jako výstup
  digitalWrite(RELE, LOW); // vypni RELE
                          // digitalWrite(LEDka, LOW); // vypni led diodu kontroly rele
  pinMode(setTEPLOTA, INPUT); // pin jako vstup - nastaveni teploty
  pinMode(setHYSTEREZE, INPUT); // pin jako vstup - nastaveni hystereze
  pinMode(setALARM, INPUT); // pin jako vstup - nastaveni alarmu

  pinMode ( 10, OUTPUT);//vystup na RGB diodu modrá
  pinMode ( 12, OUTPUT);//vystup na RGB diodu zelená
  pinMode ( 11, OUTPUT);//vystup na RGB diodu červená

  pinMode ( 9, OUTPUT);//vystup na  bzucak ON
 
}

void loop(){
  // nulovani promennych
  Tprobe1 = 0; // teplota 1.cidla
  Tprobe2 = 0; // teplota 2.cidla
  chyba = 0; // promena pro indikaci chyby  - neni cidlo


 
  // ziskani dat / mereni
  sensors.requestTemperatures(); // Posiela príkaz na získanie teplot
  Tprobe1 = int(sensors.getTempC(Probe01)); // mereni teplotu 1.cidla
  if (Tprobe1 == -127) chyba = 1; // kontrola zapojeni cidla
  Tprobe2 = int(sensors.getTempC(Probe02)); // mereni teplotu 2.cidla
  if (Tprobe2 == -127) chyba = 2; // kontrola zapojeni cidla

  // ziskani nastaveni z trimru
  nastavenaTeplota = map(analogRead(setTEPLOTA), 0, 1023, setTEPLOTAmin, setTEPLOTAmax); // nastaveni teploty sepnti rele - cteni trimru a rozlozeni podle min/max
  nastavenaHystereze = map(analogRead(setHYSTEREZE), 0, 1023, setHYSTEREZEmin, setHYSTEREZEmax); // nastaveni hystereze teploty sepnti rele - cteni trimru a rozlozeni podle min/max
  Talarm = map(analogRead(setALARM), 0, 1023, setALARMmin, setALARMmax); // nastaveni teploty alarmu - cteni trimru a rozlozeni podle min/max

  // regulace/podminky
  if (chyba == 0) { // pokud nenastala chyba mereni
  if (Tprobe1 > nastavenaTeplota) digitalWrite(RELE,HIGH); //prekroceni nastavene teploty 1.cidla = sepnuti RELE** opravene na cidlo 1 UK
   
   
    // pri zapnuti rele  svieti zelena led
    GreenLED(); //nastavenie spinania RGB diody pri  nastavenej teplote  cidla UK svieti  zelena led
     
    if (Tprobe1 < (nastavenaTeplota - nastavenaHystereze)) digitalWrite(RELE,LOW); // teplota 2.cidla spadla pod nastavenou teplotu-hystereze = vypnuti RELE**oprava cidlo
    if (Tprobe1 > Talarm){
    tone( ALARM, 2000, 500);
    //nastavenie RGB diody pri spusteni alarmu svieti cervena
    RedLED(); // rozsvit rudou LED
     
     

    } else {
      digitalWrite(ALARM,LOW); // neprekroceni nastavene teploty 1.cidla = vypnuti alarmu
    }
  } else { // nastala chyba mereni
    digitalWrite(RELE,HIGH); // zapni RELE
    tone( ALARM, 2000, 500);
    // sepni ALARM a zvukovu signalizaciu 9 pin 2000 hercz 500 frekvencia
    delay(200); // cekej 200ms
    digitalWrite(ALARM,LOW);// vypni ALARM
   
   
  }

  // zobrazeni na LCD
  if (chyba > 0) { // pokud nastala chyba mereni
    lcd.clear(); // smaz LCD
    lcd.setCursor(0,0); // nastav kurzor
    lcd.print("CHYBA CIDLA ");
    lcd.print(chyba);
    BlueLED(); // rozsvit modrou LED
  } else {
    // pokud nenastala chyba vypis zakladni obrazovku
    // prvni radek
    lcd.clear(); // smaz LCD
    lcd.setCursor(0,0); // nastav kurzor
    lcd.print("UK:");
    lcd.print(Tprobe1); // teplota cidla 1 - UK
    lcd.write(byte(znak_Stupen)); // znak st.Celsia
    lcd.setCursor(9,0); // nastav kurzor
    lcd.print("AN:");
    lcd.print(Tprobe2); // teplota cidal 2 - AN
    lcd.write(byte(znak_Stupen)); // znak st.Celsia
    // DRUHY RADEK
    lcd.setCursor(0,1); // nastav kurzor
    lcd.print("T:"); // nebo normalni T:
    lcd.print(nastavenaTeplota);  // nastaveni spinaci teploty rele
    lcd.write(byte(znak_Stupen)); // znak st.Celsia
    lcd.setCursor(6,1); // nastav kurzor
    lcd.print("H:");
    lcd.print(nastavenaHystereze); // ukaz nasatveni hystereze
    lcd.write(byte(znak_Stupen)); // znak st.Celsia
    lcd.setCursor(11,1); // nastav kurzor
    lcd.print("A:"); // nebo normalni A:
    lcd.print(Talarm); // nastavena teplota alarmu
    lcd.write(byte(znak_Stupen)); // znak st.Celsia
  }
  delay(2000); // pauza 2s
}

void RedLED(){ // rozsvit rudou LED
  digitalWrite  ( 10, LOW); // blue
  digitalWrite  ( 11, LOW); // green
  digitalWrite  ( 12, HIGH); // red
}

void BlueLED(){ // rozsvit modrou LED
  digitalWrite  ( 10, HIGH); // blue
  digitalWrite  ( 12, LOW); // green
  digitalWrite  ( 11, LOW); // red
}

void GreenLED(){ // rozsvit zelenou LED
  digitalWrite  ( 10, LOW); // blue
  digitalWrite  ( 12, LOW); // red
  digitalWrite  ( 11, HIGH); // green
 
  }
 
 

2.
Na mega som nahodil lcd skúšobne  z jednoduchou knižnicou a pripojil som  transmitter  na gnd +5v a dva dátové spojené na pin 6.
Prikladám aj tu knižnicu .
Kód: [Vybrat]
/*
  LiquidCrystal Library - Hello World

 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.

 This sketch prints "Hello World!" to the LCD
 and shows the time.

  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)

 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe

 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// include the library code:
#include <LiquidCrystal.h>
#include <VirtualWire.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);



void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");

  {
  // inicializace komunikace po sériové lince
  Serial.begin(9600);
  // nastavení typu bezdrátové komunikace
  vw_set_ptt_inverted(true);
  // nastavení rychlosti přenosu v bitech za sekundu
  vw_setup(2000);
  // nastavení čísla datového pinu pro přijímač
  vw_set_rx_pin(6);
  // nastartování komunikace po nastaveném pinu
  vw_rx_start();
}
}

void loop() {
}
}
A teraz by som ta chcel poprosiť až by si mal trosku času  mrknúť na to , lebo podobnú vec som ešte nikdy nerobil  takže dokonale tápem .
V jednoduchosti na lcd 2 na mege by mal prvý riadok kopírovať prvý riadok z lcd 1 teda teplota UK a AN
A v druhom riadku by mohlo len svietiť
RELE až sa zapne relé, error až nastane chyba čidla a alarm pri alarme
RELE_ERROR_ALARM
Vždy by svietilo len to čo sa práve deje
No a v prípade chyby alebo alarmu  spusti bzučiak.
Neviem ci je to komplikovane ale takto by to bolo excelentné ....



Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:Nastavnie hysterezi na spinanie rele
« Odpověď #76 kdy: Leden 05, 2017, 20:38:20 odpoledne »
no aktuálně jsem trochu zasekaný prací jestli by to počkalo tak mě prosím děj tak 14 dní a můžu se na to podívat....

Offline drawtt

  • Bastlíř začátečník
  • *
  • Příspěvků: 48
Re:Nastavnie hysterezi na spinanie rele
« Odpověď #77 kdy: Leden 06, 2017, 08:27:53 dopoledne »
no jasne nie je problem aj tak cakam este na male nano , to bude náhrada za mega  a vyrabam karabicku    mozno budem skusat nieco zosmolit keby sa mi zadarilo  dam ti vediet  :)

Offline drawtt

  • Bastlíř začátečník
  • *
  • Příspěvků: 48
Re:Nastavnie hysterezi na spinanie rele
« Odpověď #78 kdy: Leden 12, 2017, 17:40:27 odpoledne »
ahoj  tak po dlhsej dobe sa vraciam k  nasmu projektu . a chcem sa spýtať či by nebolo mudrejsie pouzit Bluetooth modul a prenasat potrebne dáta napr na tablet (pár ich tu mám nevyuzitých ). Zatial v testovacej verzii všetko slape ako má. potenciometre som vymenil za trimre a myslím si že či preblikavanie obrazovky nesposobuju práve oni , je to predsa skrat na systeme aj ked odporový , alebo to uz fakt sposobuje zapojenie lcd cez i2c , len nemam to este prepnute až ked to ulozim do krabicky to prepinujem takze to neriesim  zatial .

toto je ten modul  co som objednal  :  Bluetooth 4.0 For Arduino Android IOS BLE CC2540 CC2541 Serial Wireless Module compatible HM-10

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:Nastavnie hysterezi na spinanie rele
« Odpověď #79 kdy: Leden 13, 2017, 20:33:03 odpoledne »
to pak znamena nechat arduino jako vysilac dat a udelat dalsi program pro tablet. nejake aplikace jiz prednastavene jiz axistuji i pro android. pak se stahne knihovna pro jejich pouziti v arduinu nebo se do arduina nahraje novy firmware a cela funkcionalita se resi pres tablet. tuto cast jsem jeste nedelal tak ti moc neporadim. jeste je varianta pustit data na web treba pres exosite. to opravdu je ale mimo muj rozhled a aktualne i mimo muj casovy plan ...

Offline drawtt

  • Bastlíř začátečník
  • *
  • Příspěvků: 48
Re:Nastavnie hysterezi na spinanie rele
« Odpověď #80 kdy: Leden 13, 2017, 20:50:30 odpoledne »
aha tak to necham zatial na tom transmiteri, alebo skusim wifi scheld . Transmitter mam zapojeny ale nedari sa mi to rozchodit . Cisty kod primac vysielac  to mi funguje , ale spojenie uz v nasom kode nejako nechce fungovat :(

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:Nastavnie hysterezi na spinanie rele
« Odpověď #81 kdy: Únor 04, 2017, 07:59:11 dopoledne »
po dlouhe dobe jsem se zase venoval aplikaci s lcd a doslo mi co asimuzes mit za chybu. ze ty mas modry lcd?

Offline drawtt

  • Bastlíř začátečník
  • *
  • Příspěvků: 48
Re:Nastavnie hysterezi na spinanie rele
« Odpověď #82 kdy: Únor 07, 2017, 20:20:07 odpoledne »
áno mam modrý lcd 16x2, ale teraaz  ked mam chvilku cas skusam prepojit 20x4 zasa modrý

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:Nastavnie hysterezi na spinanie rele
« Odpověď #83 kdy: Únor 07, 2017, 22:23:05 odpoledne »
mě totiž bliká taky a to jej mám napojený na přímo na piny arduina bez převodníku.
Kámošovi to dělalo taky u ročníkovýho projektu.
No ty klasické žluté LCD mělo něco do sebe, tam mě to nedělá...
Napadá mě, použít nějákou funkci , která by měnila text pouze pokud by nastala změna...
Udělal by sis 4 stringy (2 pro starý LCD a 2 pro nový) porovnáním těch textů by si vyhodnotil zda překreslit LCD nebo ne.