JardaL
Vytvořené odpovědi
-
AutorPříspěvky
-
BlindP
ÚčastníkProblém přetrvává, ukazuje to jiný čas na hlavní stránce, pod-stránce. Celé to vypisování posledních příspěvků je nešťastné. 🙂 Chybí celkový přehled nových příspěvků… btw jak dopadla nedávná anketa okolo fóra? Nějak to utichlo. 😀 Já jsem pro phpBB.
BlindP
ÚčastníkAhoj, tohle mi taky dělalo (arduino pro mini) – použil jsem jinou kartu, popř. adaptér. Na mega používám SD modul s default knihovnou bez problémů.
Attachments:
posjirka
Účastníkzátěž byl 1k takže cca 1mA ale nepředpokládám zhoršení když je jako oddělovač použitý OZ ze zpětnou vazbou
posjirka
Účastníktady je fotka pro 150/255 zvlnění tu velké, ale jak říkám stavěl jsem to z toho co bylo po ruce.
Attachments:
posjirka
Účastníktak jsem to dnes odzkoušel :
http://www.mikrocontroller.net/attachment/10061/pwm_to_analog.jpgzapojení jsem výrazně zjednodušil pro rychlou zkoušku (nebyl tam trimr, kapacity co přišli pod ruku, OZ by TL072, …) Trochu jsem měl strach z toho abych neodpáli Arduino, když PWM signál je spojný přes odpor z výstupem až 10V.
No výsledek je, že se mi to jevý jako funkční řešení, jen oddělit vstup arduinu od zbytku zapojení pomocí optočlenu.
dosáhl jsem rozsahu 0-9V (12V nájení) což při podmínkách testu je zcela vyhovující.
Linearitu jsem netestoval ale šlo mi o výslednou křivku. Testoval jsem nastavení 80/255, 150/255, 250/255 .
Zvlnění tam je Při 3 V to bylo cca 0,5V zvlnění ale používal jsem vstup s 500Hz PWM signálem. Se zvyšujícím se napětím zvlnění mizelo až při 9V mělo cca 0,1V.Attachments:
krkstex
ÚčastníkDobrý den,
co se týče Eurosteru tak mám kotel Atmos a ten má také odtahový ventilátor a je to OK.
V konstrukci řízení kotle jsem už postoupil. Zvolil jsem jinou platformu než Arduino ( Siemens Logo). Finišuji s programováním a pořád sháním někoho, kdo by mi pomohl se zbastlením čidel. Vím jaká čidla použít, ale nevím jak je pořádně zapojit a uchodit.posjirka
Účastníkřekl bych, že ten kondenzátor dělal impulz na zavření tranzistoru méně strmý/šikmý a tím pádem to mělo takový pozvolnější průběh. Je třeba to vyzkoušet, ale když jsem se díval na ten převodník na ebay tak mi připadjí ty součástky velmi podobné tomu c jsem zkoušel simulovat. Ono se to totiž prodává i u nás v ČR. :
http://www.c-n-c.cz/viewtopic.php?f=56&t=8650
http://www.cncshop.cz/prevodnik-pwm-na-0-10vv podstatě podle součástek podobné zapojení jako toto:
http://www.mikrocontroller.net/attachment/10061/pwm_to_analog.jpgjen to má navíc optočlenem oddělené .
Aleš
ÚčastníkNa pinech 5 a 6 je PWM 1kHz, na 9, 10, 11, a 3 jenom 500Hz takže by to teoreticky fungovat mohlo. I když mi teď osciloskop ukazuje na UNO jenom 977Hz 🙁
S tím zapojením kondenzátoru v bázi tranzistoru jsi měl pravdu. Napětí je stejné, mění se jenom šířka pulzů. Zajímavé ale je, že když ten kondenzátor vyhodím, tak se mi ventilátor z PC při některých hodnotách PWM netočí (zřejmě když jsem na nějaké harmonické frekvenci oscilátoru větráku), kdežto s kondenzátorem se točí plynule.
posjirka
Účastníkvšechno jde. Jen když se dívám na to řešení je docela „not friendly“ pro tuto funkci.
Kdyby spoužil celý krok pro otáčení a né půl kroky mohls to vše dělat ve smyčce Loop, jen posunem bitu a reagovalo by ti to kdy budeš potřebovat. Takto musíš použít před definicí proměnné příkaz „volatile“ ( https://www.arduino.cc/en/Reference/Volatile ) aby ti reagoval i v případě přerušení hlavní smyčky a nastavit přerušení na pin tlačítka ( https://www.arduino.cc/en/Reference/AttachInterrupt ). Toto přerušení přeruší hlavní program a vykoná funkci, na kterou se v definici přerušení odkazuješ. Až skončí tato funkce, smyčka hlavního programu se opět rozjede tam, kde skončila a v klidu pokračuje. Jen musíš hlídat aby se ti nezacyklila. To nastane, kdy funkce volaná přerušení trvá déle než interval mezi přerušeními. Můžeš dokonce ragovat zvlášť na na změnu stavu, na přechod na log. 0 a na přechod na log.1.posjirka
Účastníkto bude asi něco podobného. jen mám trochu obavy z té nominální frekvence. Tady uvádí 1-3kHz, arduino má defaultně cca 450Hz.
posjirka
Účastníkrád jsem pomohl 🙂
Aleš
ÚčastníkMyslím, že by to mělo fungovat. Tady je to za nějakých 125Kč, tak to kupte. To zase není tolik peněz. http://www.ebay.com/itm/172379919799
romansis
ÚčastníkPárové značky opraveny. SUPER, změna rychlosti funguje, ale projeví se až po projetí cyklu tam a zpět. Já bych potřeboval aby reakce na tlačítko byla okamžitá. Zatím díky moc.
Oldast
ÚčastníkDisplej začal fungovat,ale zobrazil číslo 255 a při minusových teplotách odečítal 255-teplotu čídla(-1=254).Tak jsem se podíval do příručky a změnil byte na int a už to jede tak jak má.Díky za vysvětlení a jdu pokračovat!
posjirka
Účastníkto bohužel není muj boj. Tuto část jsem převzal z tveho kodu.
NAUČTE SE POUŽÍVAT PÁROVÉ ZNAČKY „CODE“romansis
Účastníkzdravím, když nechám zkontrolovat tento kód tak sketch hlásí chybu.
for(int i=0;i<(uhel*64/45);i++){sutneosv
ÚčastníkDobrý den, omlouvám se, ale mám asi podobný problém s řízení kotle na tuhá paliva. Toto forum jsem našel náhodou, jak jste dopadl? povedlo se vám nějaké řízení dát zprovoznit?
Mám kotel Viessmann Vitoligno 100 (asi 7 roklů) odešlo řízení a obchodní zastoupení v Praze kde jsem poptával opraVU MLČÍ A MLČÍ, ZATÍM ŘÍDÍM KOTEL MANUELNĚ (TERMOSTAT NA ČERPADLO, REGULÁTOR OTÁČEK NA VENTILÁTOR) Ten regulátor Euroster 11 W jsem našel taky, mě by stačil ale podle popisu řídí dmychadlo, já mám odtahový ventilátor. Tak nevím, šlo by to „překopat“
děkuji za odpověď
SutnerZbyšek Voda
ÚčastníkNení zač, mějte se 🙂
Jerry
ÚčastníkOndro díky moc. Knihovnu jsem ani měnit nemusel jen jsem přepsal řádek
return 0; na 1 a displej funguje. Moje více něž týdenní trápení skončilo. Nevím jestli je to chyba i ostatních knihoven (ale asi ano protože jsem jich postahoval fůru), ale důležitý je, že se to vyřešilo a snad to pomůže i dalším se stejným problémem. Ještě jednou díky 🙂rades
ÚčastníkDěkuji moc, jsem Vám zavázán. Opravdu tak pohotové lidi aby pohledal.
posjirka
Účastníkprosím používejte párové značky CODE, jinak je kod špatně formátovaný a zároveń není použitelný.
zkus tento upravený kod:// Krokový motor a driver #define tlacitko 2 // cislo pinu s talcitkem #define rychlost1 1 // prvni -standratni rychlost #define rychlost2 2 // rychlost pri stisku tlacitka // čísla pinů pro digitální výstupy const int in1 = 8; const int in2 = 9; const int in3 = 10; const int in4 = 11; // proměnná pro nastavení rychlosti, // se zvětšujícím se číslem se rychlost zmenšuje int rychlost =1; // int uhel = 90; void setup() { // inicializace digitálních výstupů pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); pinMode(tlacitko, INPUT); } void loop() { if(digitalRead(tlacitko) == 0){ // kdyz je stisknuto tlacitko rychlost = rychlost2; // sniz rychlost } else { // jinak rychlost = rychlost1; // pouzij normalni rychlost } // plná rotace o 360 stupňů = 512 volání // funkce rotacePoSmeru() či rotaceProtiSmeru() for(int i=0;i<(uhel*64/45);i++){ rotacePoSmeru(); } // pauza po dobu 1 vteřiny delay(1000); for(int i=0;i<(uhel*64/45);i++){ rotaceProtiSmeru(); } // pauza po dobu 1 vteřiny delay(1000); } // zde následují funkce pro volání jednotlivých // kroků pro otočení po či proti směru hodinových // ručiček void rotacePoSmeru() { krok1(); krok2(); krok3(); krok4(); krok5(); krok6(); krok7(); krok8(); } void rotaceProtiSmeru() { krok8(); krok7(); krok6(); krok5(); krok4(); krok3(); krok2(); krok1(); } // každý krok obsahuje výrobcem dané pořadí // pro správné spínání motoru a následnou // pauzu, kterou určujeme rychlost otáčení void krok1(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok2(){ digitalWrite(in1, HIGH); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok3(){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(rychlost); } void krok4(){ digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(rychlost); } void krok5(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(rychlost); } void krok6(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, HIGH); delay(rychlost); } void krok7(){ digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(rychlost); } void krok8(){ digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(rychlost); }
posjirka
Účastníkto je vcelku jasné. bavíme se o proměnné typu byte která nabývá hodnot 0-255.
Když dělíš -5 st. c tak ti vyjde 255-5 = 250 což je v hex. kodovani rovno „FA“.
zkus toto:#include <OneWire.h> #include <DallasTemperature.h> #include <Arduino.h> #include <TM1637Display.h> #define CLK 2 #define DIO 3 TM1637Display displej(CLK,DIO); const int pinCidlaDS = 4; // nastavení čísla vstupního pinu OneWire oneWireDS(pinCidlaDS); DallasTemperature senzoryDS(&oneWireDS); byte teplota=0; int rele=8; void setup() { pinMode(rele,OUTPUT); Serial.begin(9600); senzoryDS.begin(); displej.setBrightness(8);//jas displeje 8-15 } void loop() { senzoryDS.requestTemperatures(); teplota=senzoryDS.getTempCByIndex(0); Serial.print("Teplota cidla DS18B20: "); Serial.print(senzoryDS.getTempCByIndex(0)); Serial.println(" stupnu Celsia"); // pauza pro přehlednější výpis delay(1000); if(teplota>25){ digitalWrite(rele,LOW);//sepne rele } else { digitalWrite(rele,HIGH);//rozepne rele } uint8_t vypis[] = { 0, 0, 0, 0 };//nastavení displeje na zobrazení teploty if(teplota<1){ vypis[0]=(SEG_G); } teplota = abs(teplota); // prepocet na absolutni hodnotu vypis[1]=displej.encodeDigit((teplota/10)/10);//teplota stovky vypis[2]=displej.encodeDigit((teplota/10)%10);//teplota desítky vypis[3]=displej.encodeDigit((teplota%10)%10);//teplota jednotky displej.setSegments(vypis); }
jinak pro vkladani kodu používej párové značky CODE. Je to to tlačítko v horni části odpovědi s nápisem CODE. jinak se ti špatně vloží text a není pak čitelný
Jerry
ÚčastníkDíky jak bude čas zkusím
Zbyšek Voda
ÚčastníkDobrý den, můžete si udělat třeba nějaké počitadlo.
Kód by pak mohl vypadat například takto (předpokládám, že chcete získat 5 znaků).
int poc = 0; String zadano; char znak; char menu; void setup() { Serial.begin(9600); } void loop() { while (Serial.available()) { znak = Serial.read(); if (znak < 32 || znak > 126) continue; //přeskočí znaky mimo rozumný rozsah (konec řádku...) zadano.concat(znak); poc++; Serial.println(zadano); } if (poc >= 5) { if (zadano == "HELP") menu = 'H'; else menu = '0'; switch (menu) { case 'H': Serial.println(" //================================================\\"); Serial.println(" ||================================================||"); Serial.println(" ||Vypis prikazu ||"); Serial.println(" ||================================================||"); Serial.println(" ||COSI popis instrukce jshfjashfjsah ||"); Serial.println(" ||================================================||"); Serial.println(" \\================================================//"); default: delay(5); } poc = 0; zadano = ""; } }
rades
Účastníkvoid setup() {
Serial.begin(9600);}
void loop() {
String zadano;
char znak;
char menu;while(Serial.available()) {
znak = Serial.read();
zadano.concat(znak);
}if (zadano != „“) {
Serial.println(zadano);
}
if (zadano == „HELP“)
menu = ‚H‘;
else
menu = ‚0‘;
switch (menu)
{
case ‚H‘: Serial.println(“ //================================================\\“);
Serial.println(“ ||================================================||“);
Serial.println(“ ||Vypis prikazu ||“);
Serial.println(“ ||================================================||“);
Serial.println(“ ||COSI popis instrukce jshfjashfjsah ||“);
Serial.println(“ ||================================================||“);
Serial.println(“ \\================================================//“);
default: delay(5);
}}
`rades
ÚčastníkTak jsem to nakonec vyřešil takto, ale stále uvažuji, jak vyřešit to, aby program čekal na zadání dalšího znaku..
Chucky77
ÚčastníkTen program co máš v prvním příspěvku funguje dobře. Není asi důvod zkoušet něco jiného.
Mám IDe 1.6.12 a knihovny přikládám. Zkus vymazat všechny co k liquid I2c máš a zkusit to znovu.
Obvykle jsou v C:\Users\ doplnit \Documents\Arduino\librariesV knihovně
LiquidCrystal_I2C.cpp
je změna z 0 na 1 v této části kódu#define printIIC(args) Wire.write(args)
inline size_t LiquidCrystal_I2C::write(uint8_t value) {
send(value, Rs);
return 1;Tak hodně zdaru.
OndřejAttachments:
romansis
ÚčastníkTady je ten kód.
// Krokový motor a driver
// čísla pinů pro digitální výstupy
const int in1 = 8;
const int in2 = 9;
const int in3 = 10;
const int in4 = 11;// proměnná pro nastavení rychlosti,
// se zvětšujícím se číslem se rychlost zmenšuje
int rychlost =1;
//
int uhel = 90;void setup() {
// inicializace digitálních výstupů
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
}void loop() {
// plná rotace o 360 stupňů = 512 volání
// funkce rotacePoSmeru() či rotaceProtiSmeru()
for(int i=0;i<(uhel*64/45);i++){
rotacePoSmeru();
}
// pauza po dobu 1 vteřiny
delay(1000);for(int i=0;i<(uhel*64/45);i++){
rotaceProtiSmeru();
}
// pauza po dobu 1 vteřiny
delay(1000);
}
// zde následují funkce pro volání jednotlivých
// kroků pro otočení po či proti směru hodinových
// ručiček
void rotacePoSmeru() {
krok1();
krok2();
krok3();
krok4();
krok5();
krok6();
krok7();
krok8();
}
void rotaceProtiSmeru() {
krok8();
krok7();
krok6();
krok5();
krok4();
krok3();
krok2();
krok1();
}
// každý krok obsahuje výrobcem dané pořadí
// pro správné spínání motoru a následnou
// pauzu, kterou určujeme rychlost otáčení
void krok1(){
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(rychlost);
}
void krok2(){
digitalWrite(in1, HIGH);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(rychlost);
}
void krok3(){
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(rychlost);
}
void krok4(){
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(rychlost);
}
void krok5(){
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(rychlost);
}
void krok6(){
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, HIGH);
delay(rychlost);
}
void krok7(){
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(rychlost);
}
void krok8(){
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(rychlost);
}Jerry
ÚčastníkZapojení jsem zkusil i přehodit ale to nereaguje vůbec
Oldast
ÚčastníkZdravím a děkuji za vysvětlení,po klesnutí teploty pod 0st.mi zobrazí mínus,ale na displeji jsou nuly nebo F,C a nevím proč mi nezobrazuje teplotu(čísla),když čidlo ds18xxx by mělo ukazovat až -55st.Na serivém portu ukazuje i mínusové teploty a rele spíná tak jak má ale na displeji nic.nevím kde dělám chybu?
-
AutorPříspěvky