Fórum témák
- • Erősítő mindig és mindig
- • Digitális adatátvitel
- • Kondenzátor
- • LED szalag
- • Villanyszerelés
- • CNC építése házi alkatrészekből az alapoktól
- • TDA7294 végerősítő
- • Számítógép hiba, de mi a probléma?
- • Klíma szervizelés, javítás
- • Klíma beszerelése, fűtés-hűtés házilag
- • Rádióamatőrök topikja
- • Kombikazán működési hiba
- • Általános antennás kérdések, válaszok
- • Dobozolási technikák, műszerdobozok
- • Elektronikai témájú könyvek újságok
- • Elektromos vezérlésű pneumatika
- • Arduino
- • Nagyfeszültségű tápegység
- • Hangszórójavítás (otthon)
- • Elfogadnám, ha ingyen elvihető
- • Internetes rádióvevő
- • Alternativ HE találkozó(k)
- • 3D nyomtatás
- • Felajánlás, azaz ingyen elvihető
- • Akkumulátor töltő
- • Háromfázisú aggregátor
- • Szintetizátor javítás
- • Boombox javítás
- • Sütő javítás
- • Mosógép vezérlők és általános problémáik
- • Laptop javítás, tuning
- • Elektromos távirányítós kapunyitó
- • Autós erősítős kérdések, problémák
- • Mikrohullámú sütő javítás, magnetron csere, stb.
- • Villanymotor
- • Vegyes barkácsfogások
- • Digitális óra
- • Hűtőgép probléma
- • TV hiba, mi a megoldás?
- • Szünetmentes táp javítása, élesztése
- • Erősítő építése elejétől a végéig
- • Műhelyünk felszerelése, szerszámai
- • Függvénygenerátor építése
- • SMD, mi a típusa?
- • Hibrid erősítő
- • Suzuki Swift elektronika
- • Videomagnó problémák
- • Érdekességek
- • STK erősítők javítások
- • DC-DC konverter max. kapacitív terhelése
- • Audiofil, High End Audio
- • Központi fűtés (vezérlés)
- • IMI villanymotor
- • Borhűtő vezérlő panel
- • Androidos okos telefonok
» Több friss téma
|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
. /*
Soldering Iron Controller
To change controler mode press UP and DOWN at the same time !!!
24.4.2014. Milos.
*/
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int analogPin = 0; // potentiometer wiper (middle terminal) connected to analog pin A0 // outside leads to ground and +5V
const int btnMode = 6; // the number of the pushbutton pin
const int btnUp = 7; // the number of the pushbutton pin
const int btnDown = 8; // the number of the pushbutton pin
const int pwmHeater = 10; // the number of the PWM pin
const float fAmplification = 183 ; // measured by series of experiment, for ex.: input 21.2mV, output 3.9V
// const float fKTypeSensitivity = 0.000041; // V/degC this is in theory for K type
// But based on experiment on known melting point for the Multicore Alloy C99 (Liquidus on 240 degC), generate voltage is 15mV, so it correspond to TMelting-TAmb = 240-25 = 215 degC
// so sensitivity is calculated as 0.015/215 = 6.9767e-5
//const float fKTypeSensitivity = 0.000075; //old
const float fKTypeSensitivity = 6.9767e-5;
const float fADResolution = 1024.0; // for 10 bit AD converter
const float fADMax = 5.0; // AD convertor max range
//--PID
const float fKp = 10.0; //proportional gian (Value tested with HQ Soldering Iron = 10 )
const float fKi = 1.0; //integral gian (Value tested with HQ Soldering Iron = 1)
const float fKd = 10.0; //derivative gian (Value tested with HQ Soldering Iron = 10)
//--Graphic
const int iHowManyCyclesToRefreshDisplay = 4; //Printing on Display after specified number of sampling cycles
const int iSerialSend = 1; //0-don't send, 1-send to serial
//calculation
float fTemp = 0.0; // Temperature [C]
float fTAmb = 25.0; // Ambient temperature [C]
float fTSet = 0.0; // Set point [C]
float fVoltage; // Voltage from Ain0
float fLSB = 0.0 ; // one LowSiginificantBit [V], (5/1024=0.0048828125)
float fScaleFactor = 0.0; // [degC/LSB] (0.0048828125/340/0.000041=0.35)
float fTime = 0.0; // Time
//---------
float fTimeSampling;
float fTimeLast;
int iCycleCounter=0; //Counter of cycles for printing on display
int iPID_or_OnOff = 0; //0=PWM, 1=OnOff !!!!! HERE THE INITIAL CONTROLER IS SET !!!!
//--PID
float fEk = 0.0; //current error
float fEk_1 = 0.0; //last error
float fPWM; //output PWM
float fIntegralTerm =0.0;
void setup() {
fLSB = fADMax / fADResolution; // one LowSiginificantBit [V], (5/1024=0.0048828125)
fScaleFactor = ( 1.0 / fAmplification ) / fKTypeSensitivity; // [degC/LSB] (0.0048828125/340/0.000041=0.35)
lcd.begin(16, 2); // set up the LCD's number of columns and rows:
pinMode(pwmHeater, OUTPUT);
pinMode(btnMode, INPUT);
pinMode(btnUp, INPUT);
pinMode(btnDown, INPUT);
Serial.begin(9600);
fTimeLast = millis();
}
float fMeasureOversampling() {
// Iako mozda nema potrebe, uradimo vise merenja za jedno odredjivanje temperature (oversampling), teoretski sa 4^n merenja dobijamo dodatnih n bita.
// It takes about 100 microseconds (0.0001 s) to read an analog input so we can make 1024 measurements = 4^5 to hopfully add 5 bits to reac 10 bits in AD converter, it will took about 0.1s to execute
float fSum = 0.0;
for (int i=1; i <= 1024; i++){
fSum = fSum + analogRead(analogPin);
}
return fSum / 1024 ;
}
float fLimit (float fPromenljiva, float fMax, float fMin){ //Saturation function
if (fPromenljiva > fMax) { fPromenljiva = fMax ; }
if (fPromenljiva < fMin) { fPromenljiva = fMin ; }
return fPromenljiva ;
}
float fSimplePID() {
// calculate PID command, first calculate the coeficients
float fSimplePID;
fIntegralTerm = fIntegralTerm + fKi * fEk * fTimeSampling;
fIntegralTerm = fLimit(fIntegralTerm, 255.0, 0.0);
fSimplePID = fKp * fEk + fIntegralTerm + fKd * (fEk - fEk_1); // SimplePID
fSimplePID = fLimit(fSimplePID, 255.0, 0.0);
return fSimplePID;
}
void RefreshDisplay() {
// 1234567890123456
lcd.setCursor(0, 0);
lcd.print("Set: Temp: ");
lcd.setCursor(4, 0);
lcd.print(fTSet,0);
lcd.setCursor(13, 0);
lcd.print(fTemp,0);
lcd.setCursor(0, 1);
lcd.print("Err: ");
lcd.setCursor(4, 1);
lcd.print(fEk,0);
if (iPID_or_OnOff == 0) { //PID is active controler
lcd.setCursor(8, 1);
lcd.print("%PWM=");
lcd.print(fPWM/2.55 ,0);
}
if (iPID_or_OnOff == 1) { //OnOff is active controler
lcd.setCursor(8, 1);
if (fEk < 0) { lcd.print("Heater:-"); }
else { lcd.print("Heater:A"); }
}
}
void SerialSend() {
Serial.print(fTime,3);
Serial.print(", ");
Serial.print(fTSet,1);
Serial.print(", ");
Serial.print(fTemp,1);
Serial.print(", ");
Serial.print(fEk,1);
Serial.print(", ");
Serial.print(fVoltage,3);
Serial.print(", ");
Serial.print(fTimeSampling,4);
Serial.print(", ");
Serial.print(fEk,3);
Serial.print(", ");
Serial.print(fIntegralTerm,3);
Serial.print(", ");
Serial.print(fPWM,2);
Serial.print(", ");
Serial.println(fIntegralTerm,2);
}
void Buttons() {
if ((digitalRead(btnUp) == HIGH) && (digitalRead(btnDown) ==LOW )) {
fTSet = fTSet + 5.0 ;
if (fTSet > 380.0) { fTSet = 380.0 ; } //LIMIT to 380 degC
}
if ((digitalRead(btnUp) == LOW) && (digitalRead(btnDown) ==HIGH )) {
fTSet = fTSet - 5.0 ;
if (fTSet < 0.0) { fTSet = 0.0 ; } //LIMIT to 0
}
if ((digitalRead(btnUp) == HIGH) && (digitalRead(btnDown) ==HIGH )) {
iPID_or_OnOff++ ; //increment
if (iPID_or_OnOff > 1) { iPID_or_OnOff = 0; } //then reset it to 0
}
if (digitalRead(btnMode) == HIGH) {
fTSet = fTSet + 5.0;
if (fTSet < 150.0) {
fTSet = 150.0 ;
}
if ( (fTSet > 150.0) && (fTSet < 280.0 ) ) { fTSet = 280.0 ; }
if ( (fTSet > 280.0) && (fTSet < 320.0 ) ) { fTSet = 320.0 ; }
if ( (fTSet > 320.0) && (fTSet < 350.0 ) ) { fTSet = 350.0 ; }
if (fTSet > 350.0) { fTSet = 0.0 ; }
}
}
void loop() {
fTime = millis() / 1000.0 ;
fTimeSampling = fTime - fTimeLast;
fTimeLast = fTime ;
fVoltage = fMeasureOversampling() * fLSB; // read the input pin and calculate Voltage
fTemp = fTAmb + fScaleFactor * fVoltage; // calculate the Temperature
fEk = fTSet - fTemp; //error for simple PID
if (iPID_or_OnOff == 1 ) { //On-Off regulator // simple ON-OFF control, works well (about +8 and -2 degC about SetPoint)
if (fEk < 0) { analogWrite(pwmHeater, 0); }
else { analogWrite(pwmHeater, 255); }
}
if (iPID_or_OnOff == 0 ) { //PID regulator
fPWM = fSimplePID(); //calculate PID command
fEk_1 = fEk; //store the last error
analogWrite(pwmHeater, fPWM); //execute the command
}
Buttons(); //read the buttons
if (iSerialSend == 1) { SerialSend() ; } //print on UART, serial port
iCycleCounter++; //increment cycle counter
if (iCycleCounter >= iHowManyCyclesToRefreshDisplay ) { //print od dislplay
RefreshDisplay() ;
iCycleCounter = 0; //reset counter
}
// delay(100); //omitted - goes on approx 0.144 seconds per cycle
}
Arduino nanó kaphat kilenc voltot ? A betápról 19,4 voltrol lekotve?
Kaphat: "Input Voltage 7-12 V"
Bővebben: Link, a tech. spec alatt.
DE csak a VIN pinen! A hozzászólás módosítva: Feb 25, 2019
Ha kipróbálod, hogy a loop-ban (rögtön az elején) kiíratsz valamit az LCD-re és vársz delay-el kb 2 másodpercet akkor is ez a hiba van?
Ja, valami szöveget ne számított értéket! Ezt elfelejtettem! A hozzászólás módosítva: Feb 25, 2019
A másik, hogy nem túl gyors esetleg?
if (iSerialSend == 1) { SerialSend() ; } //print on UART, serial port
iCycleCounter++; //increment cycle counter
if (iCycleCounter >= iHowManyCyclesToRefreshDisplay ) { //print od dislplay
RefreshDisplay() ;
iCycleCounter = 0; //reset counter
}
A külső If le van zárva, a iCycleCounter lehet túl gyorsan növekszik, és a refresDisplay meghívása túl gyors, amiért nem tudja megjeleníteni. A serial-send-ben nem tudom, hogy vár-e addig míg az összes adatot át nem küldte. A main loop tovább mehet a serail write utasítás után. Ennek nézz utána a kódban, de a refresdisplay meghívása után egy delay(500) beiktatásával rá lehet világírtani, hogy ez-e a hiba. A hozzászólás módosítva: Feb 25, 2019
A szoftverrel semmi baj, én is megépítettem. Igaz, elég sok módosítással. Nokia 3510 lcd-vel, a műveleti erősítő is csak 5 V-ot kap, meg nem arduinoval, hanem "csupasz" mega328 van benne.
Ha a szoftal semmi baj akkor nekem miert nem megy?
Esélyes, hogy valamilyen hw hiba van nálad.
(#) |
p100 hozzászólása |
Feb 28, 2019 |
|
/ |
|
|
Sziasztok!
Mindenek előtt szeretném jelezni, hogy teljesen kezdő vagyok Arduino témában, az első lépésektől indulnék. Sok utánaolvasás és tájékozódás után vásároltam (Magyarországi weboldalról!) egy Arduino Tanuló készletet, amiben van egy Arduino Uno R3 CH340 alappanel is (lásd csatolt kép).
Feltelepítettem a PC-mre (Windows 7 32 bit) az Arduino 1.0.5-r2 keretrendszert, majd rádugtam az USB kábellel az alappanelt a gépre, de elsőre nem ismerte fel. Ekkor letöltöttem egy CH34x drivert, ezzel már automatikusan felismerte a Windows az Uno-t, meg is jelent a COM8 porton.
Viszont mind a Ch34x driver telepítése előtt, mind utána, az USB csatlakoztatása után folyamatosan világít a panelen a beépített ON LED, illetve először gyorsan kezd villogni, majd egyenletes ütemben villogni kezd (kb. 1 mp világítás - 1 mp szünet) az L jelű led.
Először azt hittem, hogy valamit elrontottam, de sok utánaolvasást követően kiderült, hogy a L jelű led villogása azért van, mert állítólag úgy árulják az Arduino UNO kártyákat, hogy a bootloader mellett a LED villogtató Blink mintaprogramot is rátöltik.
Hogyan tudom ezt törölni belőle?
Előre is köszi
Nem kell külön törölnöd. Ha egy úgy programot töltesz majd fel az Arduinoba , akkor majd törlődni fog és az újabb fog futni benne.
Akkor nem lehet teljesen "szűz"-re takarítani?
Egyszerű a megoldás. Ha nem akarod , hogy villogjon illetve világítson. Akkor feltöltöd változó, paraméterek nélkül az "alap" programot. Így nem csinál semmit, illetve csinál , de nem fog látszódni.
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
Miért lenne fontos, hogy üres legyen? A hozzászólás módosítva: Feb 28, 2019
Köszi szépen a segítséget. Viszont ekkor folyamatosan világít az L led. Gondolom ha LOW-ra kapcsolom a pint, akkor elalszik. A hozzászólás módosítva: Feb 28, 2019
Igen. Ha fixen kikapcsolod, akkor nem fog világítani.
Nem értem, hogy miért világítana. Ha nem konfiguráld kimenetként a kivezetést, akkor alap helyzetben az bemenetként funkcionál. Úgy meg nem igazán tud akkora áram folyni, hogy világítson a LED.
Sziasztok!
Adott 2db Arduino UNO, ami RX/TX-en kersztül kommunikál. Ezzel nincs is semmi gond, viszont ahogyan ki szeretném jelezni egy kijelzőn a kapott szöveget(Hello) úgy nem a szöveg jelenik meg hanem egy számsor.
Tudnátok segíteni, hogy mit lehetne vele tenni, hogy a kapott szöveget jelenítse meg?
Közben sikerült megoldanom.
Van a power on LED, ami mindig világít, fixen a tápra van körve, és a 13-as lábon is van egy LED, az üres program esetén nem világít. Ezt a LED-et kapcsolja ki és be az alap blink program is. Ajánlok neked egy 60napos Arduino tanfolyamot (ingyenes), millió kérdésedre választ fogsz kapni, nagyon hasznos!
Sziasztok,
Vásárolt már valaki ilyen modult 16x2 LCD kijelzőhőz?
Összekötöttem egy 16x2-es kijelzővel, az Arduino látja a 0x20-as címen, induláskor (ha program sincs az arduino-n), akkor a kijelzőn a felső sorban fekete színüre változik.
Tud valaki hozza mintaprogramot küldeni?
A választ előre is köszönöm!
Köszönöm a válaszodat!
Sajnos azzal a példaprogrammal se működik.
Ilyen fajta LCD kijelzőm van.
Holnap (elméletileg) tudok szerezni logikai analizátort és azzal mégjobban beletudok nézni.
Azt írod, nincs program az arduinon. Programmal próbáltad? Beparaméterezni, initelni, törölni, kiiratni valamit rá? A hozzászólás módosítva: Márc 3, 2019
Példaprogramokat próbálgattam, a 0x20 cím beállításával, idáig csak a háttérvilágítás ki és bekapcsolása ment, de az se a kijelzőknek a programjával, hanem az Adafruit-os MCP23017 library-vel és az 1-es port kapcsolgatásával.
Gondoltam, hogy valaki a sült galambot a szájamba teszi, de úgy látom, hogy ezzel a kijelzővel ez most nem fog menni Holnap elvileg lesz 8 csatornás kínai logikai analizátorom, azzal szétdebuggolok mindent.
Szerintem kár ma az időt megfelelő szerszám nélkül ezzel töltenem. Holnap folytatom.
Lehet nem látja ez eszközt. Itt egy példa program, amelyik kiírja a csatlakozott eszköz címét.
Igen, a címzés biztosan jó (az I2Cscanner-t már a legelején lefuttatam).
Idézet: „
I2C Scanner
Scanning...
I2C device found at address 0x20 !
done ” A hozzászólás módosítva: Márc 3, 2019
Próbáld meg először I2C nélkül csak simán csatlakoztatni!
Minta alapján: Bővebben: Link
Vagy: Bővebben: Link
Majd ha ez működik? Tovább bővítheted I2C-s adatátvitellel. A hozzászólás módosítva: Márc 4, 2019
Ma megjött a logic analyzer, rátettem, idáig csak arra sikerült rájönnöm, hogy a a 8 adat bitből 4-et használ. Se időm se kedvem nem volt hozza, este (elméletileg) kifogom próbálni Topi cikke alapján egy breadboard-on mikrokontroller nélkül bekötni.
Tisztelt Mindenki!
Felprogramozott arduinora lenne szükségem. A programozás néhány egyszerűbb, mint bejövő jel nagyságától (energiájától) függően adott számú impulzus jel kiadása és hasonlók. Bonyolultabb, mint szervo motor mozgatása több változtatható paraméter alapján. Ebben kérném a segítségeteket, hogy van e valaki, aki tudná vállalni a fent említett feladatokat, Ezek a feladatok ismétlődőek, és mint minden esetben a fejlesztés sosem áll meg, tehát bele kell nyúlni esetenként az aktuális igények miatt az „előző” programba.
Természetesen a lényeg, hogy mindenki jól járjon!
|
|