HadrDisk
Vytvořené odpovědi
-
AutorPříspěvky
-
rehot79
ÚčastníkTak prikladám znova s úpravami kode.
//M.jakab29@gmail.com //Vsetky kniznice nacitane v arduinoIDE spravca kniznic ///// #include "max6675.h" //Servo #include <Servo.h> Servo myservo; //Oled /////////////////// #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); #if (SSD1306_LCDHEIGHT != 32) #error("Height incorrect, please fix Adafruit_SSD1306.h!"); #endif ///////////// //Definicia pin int thermoSO = 6; int thermoCS = 5; int thermoSCK = 4; MAX6675 thermocouple(thermoSCK, thermoCS, thermoSO); int vccPin = 3; //Napajanie + pre max6675 modul z digitalneho pinu int gndPin = 2; //Napajanie - pre max6675 modul z digitalneho pinu int val; int poloha; void setup() { // definicia napajacich pinou pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH); pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW); ////definicia servo pinu myservo.attach(9); //////////////////////Oled//////////// // by default, we'll generate the high voltage from the 3.3v line internally! (neat!) display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32) // init done // Vycisti logo display.clearDisplay(); //uvod email display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(10,0); display.println("M.Jakab29@Gmail.com"); display.display(); delay(5000); display.clearDisplay(); } void loop() { // Nacitanie teploty val = thermocouple.readCelsius()-2; // text display text display.drawLine(0, 13, 0, display.height()-1, WHITE); display.drawLine(300, 32, 0, display.height()-1, WHITE); display.drawLine(300, 13, 0, display.height()-20, WHITE); display.drawLine(127, 13, 127, display.height() -1, WHITE); display.drawLine(62, 13, 62, display.height() -1, WHITE); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(3,2); display.println("Teplota Poloha%"); display.setTextSize(2); display.setCursor(10,16); display.println(val); val = map(val, 0, 600, 0, 180); myservo.write(val); poloha = myservo.read(); poloha= map(poloha, 0, 180, 0, 100); display.setTextSize(2); display.setCursor(70,16); display.println(poloha); display.display(); delay(5000); display.clearDisplay(); }
Tu už vypisuje aj polohu serva na Display .
rades
ÚčastníkVyřešil jsem to pomocí SW seriovky na analog. portech díky 🙂
rehot79
ÚčastníkSom tu znova s novými úpravami kódu kde pribudol oled Display. Este raz podotykam ze toto je môj prvý projekt. Ak vydite nejake chyby tak kľudne do mňa . Zatiaľ to funguje.
//M.jakab29@gmail.com //Vsetky kniznice nacitane v arduinoIDE spravca kniznic ///// #include "max6675.h" //Servo #include <Servo.h> Servo myservo; //Oled /////////////////// #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); #if (SSD1306_LCDHEIGHT != 32) #error("Height incorrect, please fix Adafruit_SSD1306.h!"); #endif ///////////// //Definicia pin int thermoSO = 6; int thermoCS = 5; int thermoSCK = 4; MAX6675 thermocouple(thermoSCK, thermoCS, thermoSO); int vccPin = 3; //Napajanie + pre max6675 modul z digitalneho pinu int gndPin = 2; //Napajanie - pre max6675 modul z digitalneho pinu int val; int poloha; void setup() { // definicia napajacich pinou pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH); pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW); ////definicia servo pinu myservo.attach(9); //////////////////////Oled//////////// // by default, we'll generate the high voltage from the 3.3v line internally! (neat!) display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32) // init done // Vycisti logo display.clearDisplay(); } void loop() { // basic readout test, just print the current temp val = thermocouple.readCelsius()-2; val = map(val, 0, 300, 0, 180); myservo.write(val); poloha = map(val, 0, 180, 0, 100); // text display text display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.println("Teplota Poloha%_____________________"); display.display(); display.setTextSize(2); display.setCursor(0,17); display.println(thermocouple.readCelsius()-2); display.display(); display.setTextSize(2); display.setCursor(85,17); display.println(poloha); display.display(); delay(3000); display.clearDisplay(); }
rehot79
ÚčastníkĎakujem za rady. S arduinom pracujem cca asi mesiac s prestávkami A toto je môj prvý vlastný projekt ktorý sám programujem. Určite poupravujem podľa tvojich rád, ešte raz ďakujem. Ps už mám tam aj oled i2c 128×32 ..istotne ešte budem sem zdieľať code Z projektu.
posjirka
Účastníkdíky za kod určitě se bude někomu hodit.
jen pár poznámek ke kodu:
– u knihoven si do kodu napiš kde jsi tu knihovnu vzal
– zkus pracovat trochu syststematicky, tady změříš teplotu, pošleš na seriiovou linku, pak změříš znovu, je to zbytečné zdržování a vtěžování procesoru. Změřit, poslat, přepočítat
– dvojitý delay na konci je absolutně zbytečný.
– Servo bych aktualizoval jen při změně. takto jej každou sekundu přepisuješ, takže nuluješ čítač, nasavýš tu samou hodnotu znovu spuštíš …neber to prosím jako pohrdavý pohled, jen v čas určitě většinu těch připomínek oceníš.
Za snahu dávám palec nahoru … jen tak dálrehot79
ÚčastníkTak som tu zas. Po tvojej rade som skúšal a vyzerá že to funguje.Ešte raz ďakujem a prikladám aj code ak by sa niekomu hodil ,ja s tým chcem ovládať polohu komínovej klapky na kotli na koľko max6675 je až do 1024 stupňov Celzia .Časom pribudne aj oled a wifi na sledovanie kotla na dialku napr. v mobile.
//M.jakab29@gmail.com //Nacitanie knihovni #include "max6675.h" #include <Servo.h> Servo myservo; //Definicia pin int thermoSO = 6; int thermoCS = 5; int thermoSCK = 4; MAX6675 thermocouple(thermoSCK, thermoCS, thermoSO); int vccPin = 3; //Napajanie + pre max6675 modul z digitalneho pinu int gndPin = 2; //Napajanie - pre max6675 modul z digitalneho pinu int val; void setup() { Serial.begin(9600); // definicia napajacich pinou pinMode(vccPin, OUTPUT); digitalWrite(vccPin, HIGH); pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW); Serial.println("MAX6675 test"); // cakanie na stabylizaciu max6675 cipu delay(500); myservo.attach(9); } void loop() { // basic readout test, just print the current temp Serial.print("C = "); Serial.println(thermocouple.readCelsius()); val = thermocouple.readCelsius(); val = map(val, 10, 800, 0, 180); myservo.write(val); delay(15); delay(1000); }
rehot79
ÚčastníkĎakujem za reakciu na moju tému, túto možnosť som už pozeral aj ju chapem že si číta Z analógového vstupu hodnotu ktorú prepošle na servo, len môj problém je že mám max6675 ktorý nieje napojený na analog ale používa neaky thermocoupule.read() čo neviem ako poslať na servo. Ďakujem za odpoveď A ďalší nápad, idem skúšať
BlindP
ÚčastníkAhoj, funkce map dělá to co hledáš..
uhel_pro_servo = map(namerena_teplota, 10, 60, 0, 180);
https://www.arduino.cc/en/Tutorial/Knob BP.Mirda0124
ÚčastníkPokud ještě sháníte napište na Mirda2@email.cz
Vojtěch Vosáhlo
ÚčastníkPokud chcete něco co bude po vybalení fungovat tak vyplatí, pokud si chcete pohrát a trochu ušetřit, asi nevyplatí. Postavit se to dá určitě a řekl bych že bez větších problémů. Bezdrátová komunikace by asi byla přes ESP předpokládám. Co vše to má umět? Záleží taky na tom jak se na to cítíte vy. 😉
Miroslava
ÚčastníkĎakujem za odpoveď 🙂 áno s napájaním sa budem musieť potrápiť ešte pretože budem ovládať aj krokové motory a viem že takéto napájanie mi určite stačiť nebude.
Zbyšek Voda
ÚčastníkDobrý den, program nemůže nalézt knihovnu GLIBC_2.11 (viz error).
Zde řeší podobný problém pro Ubuntu: http://askubuntu.com/questions/421642/libc-so-6-version-glibc-2-14-not-found
Mělo by stačit updatovat požadovanou knihovnu.
Zbyšek Voda
ÚčastníkDobrý den,
s tím shieldem se vám to bude jenom jednodušeji zapojovat. Jinak je to jedno 🙂Jen si dejte pozor na to, abyste měla dostatečné napájení. Na stránce píší, že pracovní proud je 400mA, což by Arduino z jeho 5V pinu nemuselo zvládnout.
posjirka
Účastníkto vypadá, že FET odešel do věčných lovišť a je uvnitř zkratovaný. Určitě použít 100kOhm.
to ArduXPP: díval jsem se do špatného katalogu (ges tam má 2 a já otevřel zrovan ten špatný). Max. porud je 100nA viz příloha
Attachments:
hcdady
ÚčastníkA po připojení 3,3V u optočlenu na pozici 1 se objeví na pozici 4 10V za par vteřin spadne na 5V, ale mezi r2 ,r3 a Q pořád nic není
hcdady
Účastníktak jsem to přeměřil na pinu S1-3 jsou 3V na optočlenu 1) 1,1V, 2) gnd 4) 0,8 V, 5) 24V a mezi R2, R3, Q je 0V, já si myslím že ten optočlen vůbec nespíná. A ještě teda k tomu R2 tak myslíte že má být 100K
ArduXPP
ÚčastníkDotaz, na gme.cz jsem koukal do pdf o IRF540, a nemohu najít informaci, že má u GATE 1mA . Pod čem se tato hodnota hledá ?
posjirka
Účastníkto hcdady:
ledka je opravdu součásti optočlenu. to schéma jsem si nevymyslel a je pouze zkopírované z webu. Když na ně koukám, tak tam není nic co by nemělo fungovat. Otázka spíš zní, jeslti si neodpálil FET. Je citlivý na statiku. Napětí 1,1V i přijde hraničně málo. Změř si jaký napětí máš na GATE FETu (uzel mezi R2, R3 a Q1) když přivedeš 3,3V na ledku otočlenu a kolik tam je když to npětí na optočlen nepřivedeš.to vojtech:
na tom zapojení není na pohled nic nefunkčního. Tranzistor je součástka, která se dá zapojit různými způsoby. To co poisuješ je zapojení jako zesilovač třídy A nebo spínač. Tady je to velmi podobné, jen FET má trochu jiné podmínky. Odpor R3 přizemňuje GATE aby se FET sám neotevřel a po ztrátě napětí na GATE rychle zavřel. Přes tranzistor optočlenu se přivede ovl.napětí na GATE, které tranzistor sepne.
Výhoda tohoto zapojení je. že se neneguje signál, takže když přivedeš napětí na LEDku optočlenu, tak se přivede napětí i GATE FETu.
Právě v zapojení optočlenu proti zemi by se tahle funkce obrátila. Dokud bys nepřivedl napětí na ledu optočlenu, tak by byl FET otevřen.teď mě zarazil ten odpor R2. 100R je pro 24V strašně málo. Ve výsledku má IRF540 max. mezní proud pro GATE 1mA. Takže na tom odporu je ztráta 0,1V. Takže z 24V moc neubere a pere plný napětí do GATE. To by FET odpálilo. Měl by tam být odpor tak 47k – 100k.
Vojtěch Vosáhlo
ÚčastníkOtázka spíš na jirku a Zbyška. Když kouknu do schématu, tranzistor v optočlenu je NPN že? Ono se dá NPN tranzistorem spínat tímto způsobem? Celou dobu žiju v tom že musí být na emitoru hlavní zdroj, tzn. VCC nebo GND a na kolektoru je zátěž, to co spínám. Také jsem si myslel že NPN mi povede jen „zemi“ pokud se sepne (je na bázi VCC), a ne VCC. Asi bych tu vůbec neměl být když tohle nevím ale rád se dozvím jak to je.
hcdady
ÚčastníkTak jsem to sletoval a kupodivu nefunguje, jen takový technický dotaz u toho optočlenu jak je v něm kreslená ta světelná dioda to je asi součást toho optočlenu, že ? To jsem asi naletoval zbytečně. No nic vyměnil jsem ho za jiný, ale stejně nic. Jen se chci zeptat když je v cestě ten 470 rezistor tak mi to ovládací napětí srazí u optočlenu z 3,3V na 1,1V to stačí na sepnutí? A ještě jeden dotaz X1-1 a X2-1 jsou vlastně přes to VPP propojeni jestli to dobře chápu.
Za odpověď děkuji.ArduXPP
ÚčastníkTak opravím přechozí příspěvek, jde to buď přes TX a RX a kdyby byly tyto porty KO, tak jde využít ještě ISP6.Myslím tím pro nahrání kodu do arduina, jinak pak jde využít pro komunikaci mezi arduina SoftwareSerial nebo funkční TX a RX .
Zbyšek Voda
ÚčastníkNajděte si složku, kde máte staženou knihovnu Exosite a v ní si otevřete soubor Exosite.h v nějakém textovém editoru. Hned na začátku programu najděte řádek
#include <WiFi.h>
a zakomentujte ho.Nejsem si jistý, jestli takto bude program fungovat, ale kód se zkompiluje bez chybových hlášek. Zkuste to a uvidíme 🙂
Zbyšek Voda
ÚčastníkDobrý den, jak se projevuje to „zabití sériové linky“?
Jde také o to, jestli odešel pouze převodník USB-Serial na desce, nebo přímo obvod starající se o sériovou linku v čipu.
ArduXPP
ÚčastníkAle zapomněl jsem říci, že nevím jak se bude nahrávat kod do toho čipu .
ArduXPP
ÚčastníkJde to přes digitální porty za pomoci SoftwareSerial.
Vojtěch Vosáhlo
Účastník1) proč není do knihovny zakomponován přenos jiného formátu než word?
Přiznám se že nevím, skoro určitě vám tu ale někdo odpoví.
2) lze to nějak obejít aby to začalo float přenášet?
Proč teplotu prostě nepředělat na word? Odstranit desetinou tečku tzn. třeba 23,56 => 2356.
Kdyby jste potřeboval posílat floaty univerzálně, a né vždy 2 desetiná místa, dala by se asi bez problému napsat funkce, která by poslala třeba nejdříve dané číslo bez čárky a hned po něm počet des míst. Třeba jako 23,56 => 2356; 2 a nebo rovnou číslo kterým se musí word vydělit aby vznikl původní float: 23,56 => 2356; 100. Tzn 2356/100= 23,56.Tohle je samozřejmě jedno pokud se to dá nějak obejít.
posjirka
Účastníkvstup PWM :
– S1-1 – zem
– S1-3 – signálzátěž (ventil):
– X1-1 – „+“ zátěže
– X1-2 – „-“ záteženapájení:
– X2-1 – +24V
– X2-2 – -24Vkovové tělo nemusí být uzěmněno a pozor je to většinou spojené s prostředním pine.
4N35M opravdu piny 3 a 6 nezapojuje a klidně použij i něco dostupnějšícho PC817:
https://www.gme.cz/pc817d-k10101d
jen má trochu jinak packy.
Do nepájivého pole bych to nesázel, nebo vyhoří. Je dělané na proudy do 0,5A a kontakty drží jak pes ježka.
Použij univerzální PCB a zapájej to přimo.
Existuje i pár programu pro návrh PCB zdarma:
http://www.fritzng.org
http://www.circuit.io
….hcdady
ÚčastníkJeště takové ujasnění jsem fakt amatér v tomhle. Reaguji na doporučený odkaz od posjirky. V příloze přikládám schéma na které se ptám. Na konektor S1-3 přivedu PWM 3,3V z arrduina DUE, to VCC není potřeba ani zapojovat jestli to dobře chápu. U toho optočlenu 4N35M pin 3 a 6 nezapojuji. VPP je +24V a X1-2 je kostra připojená k ovládanému přístroji?
A ještě jeden technický k tomu tranzistoru ta šrafovaná čára značí ty kovový záda s dírkou na šroubek a ty musí být také ukostřená?
Teď když to po sobě čtu tak si uvědomuji, že v tomhle oboru jsem hrozná lama. Jestli někoho urážím, že neznám základy tak se dopředu omlouvám, ale kdyby měl někdo ochotu mě zkontrolovat budu rád.
Attachments:
johnyhol
ÚčastníkAle co nechápu, že to s tou stejnou knihovnou maká v tomto kódu(posílání na Thingspeak):
#include <OneWire.h> #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS D7 const char* host = "api.thingspeak.com"; // Your domain String ApiKey = "----"; String path = "/update?key=" + ApiKey + "&field1="; OneWire oneWire(ONE_WIRE_BUS); DallasTemperature DS18B20(&oneWire); const char* ssid = "----"; const char* pass = "----"; char temperatureString[6]; void setup(void){ Serial.begin(9600); Serial.println(""); WiFi.begin(ssid, pass); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(100); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); DS18B20.begin(); } float getTemperature() { float temp; do { DS18B20.requestTemperatures(); temp = DS18B20.getTempCByIndex(0); delay(100); } while (temp == 85.0 || temp == (-127.0)); return temp; } void loop() { float temperature = getTemperature(); dtostrf(temperature, 2, 2, temperatureString); // send temperature to the serial console Serial.println(temperatureString); WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } client.print(String("GET ") + path + temperatureString + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: keep-alive\r\n\r\n"); delay(500); }
hcdady
ÚčastníkDěkuji za radu, přiznám se že ten 4x mosfet jsem si objednal, ale jelikož přijde až za měsíc tak jsem se stavil do prodejny součástek, jste mě trochu vyprovokoval :-), z pájení strach nemám ale spíš z toho sestavení na nic zkusit to jde i přes nepájivé pole tak uvidíme.
-
AutorPříspěvky