Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   513 / 839
(#) jointsilver36 válasza KoblogPerGyok hozzászólására (») Feb 25, 2019 /
 
  1. .     /*
  2.   Soldering Iron Controller
  3.   To change controler mode press UP and DOWN at the same time !!!
  4.   24.4.2014. Milos.
  5.  */
  6.  
  7. // include the library code:
  8. #include <LiquidCrystal.h>
  9.  
  10. // initialize the library with the numbers of the interface pins
  11. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  12.  
  13. int analogPin = 0;     // potentiometer wiper (middle terminal) connected to analog pin A0  // outside leads to ground and +5V
  14. const int btnMode = 6;     // the number of the pushbutton pin
  15. const int btnUp = 7;     // the number of the pushbutton pin
  16. const int btnDown = 8;     // the number of the pushbutton pin
  17. const int pwmHeater =  10;      // the number of the PWM pin
  18.  
  19. const float fAmplification = 183 ; // measured by series of experiment, for ex.: input 21.2mV, output 3.9V
  20. // const float fKTypeSensitivity = 0.000041; // V/degC   this is in theory for K type
  21. // 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
  22. // so sensitivity is calculated as 0.015/215 = 6.9767e-5
  23. //const float fKTypeSensitivity = 0.000075; //old
  24. const float fKTypeSensitivity = 6.9767e-5;
  25.  
  26. const float fADResolution = 1024.0; // for 10 bit AD converter
  27. const float fADMax = 5.0; // AD convertor max range
  28. //--PID
  29. const float fKp = 10.0; //proportional gian (Value tested with HQ Soldering Iron = 10 )
  30. const float fKi = 1.0; //integral gian (Value tested with HQ Soldering Iron = 1)
  31. const float fKd = 10.0; //derivative gian (Value tested with HQ Soldering Iron = 10)
  32. //--Graphic
  33. const int iHowManyCyclesToRefreshDisplay = 4; //Printing on Display after specified number of sampling cycles
  34. const int iSerialSend = 1; //0-don't send, 1-send to serial
  35.  
  36. //calculation
  37. float fTemp = 0.0;   // Temperature [C]
  38. float fTAmb = 25.0;  // Ambient temperature [C]
  39. float fTSet = 0.0; // Set point [C]
  40. float fVoltage; // Voltage from Ain0
  41.  
  42. float fLSB = 0.0 ; // one LowSiginificantBit [V], (5/1024=0.0048828125)
  43. float fScaleFactor = 0.0; // [degC/LSB] (0.0048828125/340/0.000041=0.35)
  44. float fTime = 0.0; // Time
  45. //---------
  46. float fTimeSampling;
  47. float fTimeLast;
  48. int iCycleCounter=0; //Counter of cycles for printing on display
  49. int iPID_or_OnOff = 0; //0=PWM, 1=OnOff  !!!!! HERE THE INITIAL CONTROLER IS SET !!!!
  50. //--PID
  51. float fEk = 0.0; //current error
  52. float fEk_1 = 0.0; //last error
  53. float fPWM; //output PWM
  54. float fIntegralTerm =0.0;
  55.  
  56. void setup() {
  57.   fLSB = fADMax / fADResolution; // one LowSiginificantBit [V], (5/1024=0.0048828125)
  58.   fScaleFactor = ( 1.0 / fAmplification ) / fKTypeSensitivity;  // [degC/LSB] (0.0048828125/340/0.000041=0.35)
  59.   lcd.begin(16, 2);   // set up the LCD's number of columns and rows:
  60.   pinMode(pwmHeater, OUTPUT);      
  61.   pinMode(btnMode, INPUT);  
  62.   pinMode(btnUp, INPUT);  
  63.   pinMode(btnDown, INPUT);  
  64.   Serial.begin(9600);  
  65.   fTimeLast = millis();
  66. }
  67.  
  68. float fMeasureOversampling() {
  69.   // Iako mozda nema potrebe, uradimo vise merenja za jedno odredjivanje temperature (oversampling), teoretski sa 4^n merenja dobijamo dodatnih n bita.
  70.   // 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  
  71.   float fSum = 0.0;
  72.   for (int i=1; i <= 1024; i++){
  73.     fSum = fSum + analogRead(analogPin);
  74.   }
  75.   return fSum / 1024 ;
  76. }
  77.  
  78. float fLimit (float fPromenljiva, float fMax, float fMin){ //Saturation function
  79.   if (fPromenljiva > fMax)  {  fPromenljiva = fMax ; }
  80.   if (fPromenljiva < fMin)  {  fPromenljiva = fMin ; }
  81.   return fPromenljiva ;
  82. }
  83.  
  84. float fSimplePID() {
  85.   // calculate PID command, first calculate the coeficients
  86.   float fSimplePID;
  87.   fIntegralTerm = fIntegralTerm + fKi * fEk * fTimeSampling;
  88.   fIntegralTerm = fLimit(fIntegralTerm, 255.0, 0.0);
  89.   fSimplePID = fKp * fEk + fIntegralTerm + fKd * (fEk - fEk_1); // SimplePID
  90.   fSimplePID = fLimit(fSimplePID, 255.0, 0.0);
  91.   return fSimplePID;
  92. }
  93.  
  94. void RefreshDisplay() {
  95.   //         1234567890123456
  96.   lcd.setCursor(0, 0);
  97.   lcd.print("Set:    Temp:   ");
  98.   lcd.setCursor(4, 0);
  99.   lcd.print(fTSet,0);
  100.   lcd.setCursor(13, 0);
  101.   lcd.print(fTemp,0);
  102.  
  103.   lcd.setCursor(0, 1);
  104.   lcd.print("Err:            ");
  105.   lcd.setCursor(4, 1);
  106.   lcd.print(fEk,0);
  107.  
  108.   if (iPID_or_OnOff == 0)  {   //PID is active controler
  109.     lcd.setCursor(8, 1);
  110.     lcd.print("%PWM=");
  111.     lcd.print(fPWM/2.55 ,0);
  112.   }
  113.   if (iPID_or_OnOff == 1)  {   //OnOff is active controler
  114.     lcd.setCursor(8, 1);
  115.     if (fEk < 0) { lcd.print("Heater:-");     }
  116.     else         { lcd.print("Heater:A");   }
  117.   }
  118. }
  119.  
  120. void SerialSend() {
  121.   Serial.print(fTime,3);  
  122.   Serial.print(", ");
  123.   Serial.print(fTSet,1);  
  124.   Serial.print(", ");
  125.   Serial.print(fTemp,1);  
  126.   Serial.print(", ");
  127.   Serial.print(fEk,1);
  128.   Serial.print(", ");
  129.   Serial.print(fVoltage,3);
  130.   Serial.print(", ");
  131.   Serial.print(fTimeSampling,4);
  132.   Serial.print(", ");
  133.   Serial.print(fEk,3);
  134.   Serial.print(", ");
  135.   Serial.print(fIntegralTerm,3);
  136.   Serial.print(", ");
  137.   Serial.print(fPWM,2);
  138.   Serial.print(", ");
  139.   Serial.println(fIntegralTerm,2);
  140. }
  141.  
  142. void Buttons() {
  143.   if ((digitalRead(btnUp) == HIGH) && (digitalRead(btnDown) ==LOW )) {  
  144.       fTSet = fTSet + 5.0 ;
  145.       if (fTSet > 380.0)  {       fTSet = 380.0 ; }  //LIMIT to 380 degC
  146.   }  
  147.   if ((digitalRead(btnUp) == LOW) && (digitalRead(btnDown) ==HIGH )) {  
  148.       fTSet = fTSet - 5.0 ;
  149.       if (fTSet < 0.0)  {    fTSet = 0.0 ; } //LIMIT to 0
  150.   }  
  151.   if ((digitalRead(btnUp) == HIGH) && (digitalRead(btnDown) ==HIGH )) {  
  152.       iPID_or_OnOff++ ; //increment
  153.       if (iPID_or_OnOff > 1)  {     iPID_or_OnOff = 0; } //then reset it to 0
  154.   }
  155.   if (digitalRead(btnMode) == HIGH) {  
  156.     fTSet = fTSet + 5.0;
  157.     if (fTSet < 150.0) {  
  158.         fTSet = 150.0 ;
  159.       }    
  160.       if ( (fTSet > 150.0) && (fTSet < 280.0 ) ) {  fTSet = 280.0 ;   }    
  161.       if ( (fTSet > 280.0) && (fTSet < 320.0 ) ) {  fTSet = 320.0 ;   }    
  162.       if ( (fTSet > 320.0) && (fTSet < 350.0 ) ) {  fTSet = 350.0 ;   }    
  163.       if (fTSet > 350.0)                         {  fTSet = 0.0 ;     }    
  164.   }  
  165. }
  166.  
  167. void loop() {
  168.   fTime = millis() / 1000.0 ;
  169.   fTimeSampling = fTime - fTimeLast;
  170.   fTimeLast = fTime ;
  171.  
  172.   fVoltage = fMeasureOversampling() * fLSB; // read the input pin and calculate Voltage
  173.   fTemp = fTAmb + fScaleFactor * fVoltage;    // calculate the Temperature
  174.  
  175.   fEk = fTSet - fTemp; //error for simple PID
  176.  
  177.   if (iPID_or_OnOff == 1 )  { //On-Off regulator  // simple ON-OFF control, works well (about +8 and -2 degC about SetPoint)
  178.     if (fEk < 0) { analogWrite(pwmHeater, 0);     }
  179.     else         { analogWrite(pwmHeater, 255);   }
  180.   }
  181.  
  182.   if (iPID_or_OnOff == 0 )  { //PID regulator
  183.     fPWM = fSimplePID(); //calculate PID command
  184.     fEk_1 = fEk;  //store the last error
  185.     analogWrite(pwmHeater, fPWM);  //execute the command
  186.   }
  187.  
  188.   Buttons(); //read the buttons
  189.  
  190.   if (iSerialSend == 1)  {  SerialSend() ; } //print on UART, serial port
  191.   iCycleCounter++; //increment cycle counter
  192.   if (iCycleCounter >= iHowManyCyclesToRefreshDisplay )  { //print od dislplay
  193.     RefreshDisplay() ;  
  194.     iCycleCounter = 0; //reset counter
  195.   }
  196. //  delay(100); //omitted - goes on approx 0.144 seconds per cycle
  197. }
(#) jointsilver36 válasza morgo hozzászólására (») Feb 25, 2019 /
 
Arduino nanó kaphat kilenc voltot ? A betápról 19,4 voltrol lekotve?
(#) tbarath válasza jointsilver36 hozzászólására (») Feb 25, 2019 /
 
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
(#) vargaf válasza jointsilver36 hozzászólására (») Feb 25, 2019 /
 
A Vin bemenetén kaphat.
(#) KoblogPerGyok válasza jointsilver36 hozzászólására (») 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
(#) KoblogPerGyok válasza jointsilver36 hozzászólására (») Feb 25, 2019 /
 
A másik, hogy nem túl gyors esetleg?

  1. if (iSerialSend == 1)  {  SerialSend() ; } //print on UART, serial port
  2.   iCycleCounter++; //increment cycle counter
  3.   if (iCycleCounter >= iHowManyCyclesToRefreshDisplay )  { //print od dislplay
  4.     RefreshDisplay() ;  
  5.     iCycleCounter = 0; //reset counter
  6.   }



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
(#) morgo válasza KoblogPerGyok hozzászólására (») Feb 27, 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.
(#) jointsilver36 válasza morgo hozzászólására (») Feb 27, 2019 /
 
Ha a szoftal semmi baj akkor nekem miert nem megy?
(#) tbarath válasza jointsilver36 hozzászólására (») Feb 27, 2019 /
 
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
(#) sany válasza p100 hozzászólására (») Feb 28, 2019 /
 
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.
(#) p100 válasza sany hozzászólására (») Feb 28, 2019 /
 
Akkor nem lehet teljesen "szűz"-re takarítani?
(#) sany válasza p100 hozzászólására (») Feb 28, 2019 /
 
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.

  1. void setup() {
  2.   // put your setup code here, to run once:
  3.  
  4. }
  5.  
  6. void loop() {
  7.   // put your main code here, to run repeatedly:
  8.  
  9. }



Miért lenne fontos, hogy üres legyen?
A hozzászólás módosítva: Feb 28, 2019
(#) p100 válasza sany hozzászólására (») 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
(#) sargarigo válasza p100 hozzászólására (») Feb 28, 2019 /
 
Igen. Ha fixen kikapcsolod, akkor nem fog világítani.
(#) mateatek válasza p100 hozzászólására (») Feb 28, 2019 /
 
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.
(#) roland9 hozzászólása Márc 1, 2019 /
 
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?
(#) roland9 válasza roland9 hozzászólására (») Márc 1, 2019 /
 
Közben sikerült megoldanom.
(#) Kovidivi válasza p100 hozzászólására (») Márc 1, 2019 /
 
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!
(#) david10 hozzászólása Márc 3, 2019 /
 
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!
(#) ludus válasza david10 hozzászólására (») Márc 3, 2019 /
 
(#) david10 válasza ludus hozzászólására (») Márc 3, 2019 /
 
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.
(#) ronin75 válasza david10 hozzászólására (») Márc 3, 2019 /
 
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
(#) david10 válasza ronin75 hozzászólására (») 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.
(#) ronin75 válasza david10 hozzászólására (») Márc 3, 2019 /
 
A címzés tuti jó?
(#) sany válasza david10 hozzászólására (») Márc 3, 2019 /
 
Lehet nem látja ez eszközt. Itt egy példa program, amelyik kiírja a csatlakozott eszköz címét.
(#) david10 válasza david10 hozzászólására (») Márc 3, 2019 /
 
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
(#) kapu48 válasza david10 hozzászólására (») Márc 4, 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
(#) david10 válasza kapu48 hozzászólására (») Márc 8, 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.
(#) AutoKobot hozzászólása Márc 8, 2019 /
 
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!
Következő: »»   513 / 839
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem