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   612 / 839
(#) ha1drp válasza usane hozzászólására (») Márc 30, 2020 /
 
Bőven van példa az interneten, csak keresni kell de:
FFt-hez először is mintavételezni kell. Ehhez ADC-t úgy kell beállítani, hogy pontos időközönként vegyen mintát, azaz legalább egy TIMER-rel azt vezérelni kell. Az időzítésben hiba nem lehet!
Annyi mintát kell gyűjtened ahány oszlopot szeretnél * 2 (a darabok száma csak 2 n-ik hatványa lehet, 16..2048). Az FFT eredményét a tömb első fele tartalmazza, a második fele ugyanaz csak annak tükörképe. Az FFT teljes megértéséhez a complex számok ismerete előny, de egyszerű leírást ezen weboldal "cikkek" közt találsz.
(#) ha1drp válasza usane hozzászólására (») Márc 30, 2020 /
 
Amennyiben 48000 Hz -el (20.83 us nem tudom az ESP32 mit tud maximum) veszed a mintákat, és 32 mintát veszel, abban az esetben az FFT függvény első eleme a 0Hz - 1500Hz (=48000Hz/32) spektrumra eső jel nagyságát adja vissza. A második elem 1500-3000 Hz -re esőt és így tovább az utolsó 16. oszlopig.
Az általad felvázolt esetben ezek szerint 32000Hz lehetett a mintavételi frekvencia és 512 mintavételt történt. A 0. elem nem lett felhasználva (ami egyébként nem is javasolt az a DC szint).
Az FFT függvények megvalósítása közti különbségek miatt, lehet olyan változat is, ahol a kimenő tömb két elemű ami tartalmazza a valós, illetve a képzetes elemet is.
A hozzászólás módosítva: Márc 30, 2020
(#) Cooter válasza icserny hozzászólására (») Márc 30, 2020 /
 
Valóban nem lineáris, eddig fel sem tűnt, viszont az szerintem nem lesz probléma. Azt sikerült megoldani, hogy stabilan elérje a maximum fényerőt. De a hiszterézist hogy tudom megcsinálni? Annak kb hogy kell kinézni?
(#) HA2SR hozzászólása Márc 30, 2020 /
 
Tiszteletem.

Segítséget szeretnék kérni , modellvasúti terepasztal szeretnénk mozdony fordítót üzembe helyezni , meghajtó 28BYJ-48_stepper ami már tartalmaz lassító áttételt. A Neten találtam ezt Arduino programot is , sajnos a 50 sorban megakad. Halvány fogalmam sincs a hibáról. Ehhez szeretnék hozzáértőktől segítséget.Segítséget előre is köszönöm.
  1. [code=c]
  2. //--------------------------//
  3. //    Tournut               //
  4. //--------------------------//
  5.  
  6. #include <Stepper.h>
  7.  
  8. #define blue_wire   2 //Coil 1
  9. #define pink_wire   3 //Coil 2
  10. #define yellow_wire 6 //Coil 3
  11. #define orange_wire 5 //Coil 4
  12. #define sensor 11 //IR sensor
  13.  
  14. // Variables
  15. unsigned long millisPrevious = 0;
  16. unsigned long speedRotation = 2; //More faster
  17. int circularShift[8] = {B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001};
  18. int count = 200;
  19. bool latch_sensorToHigh = false;
  20. bool latch_sensorToLow = false;
  21. bool set_Zero = true; //Set poaition to 0 after Power On
  22.  
  23. //Control
  24.  bool stringComplete = false;
  25.  String inputString = "";
  26.  bool rotateTo_MainLine = false;
  27.  bool rotateTo_180 = false;
  28.  
  29.  //Tmp
  30.  
  31.  unsigned long millisPrint = 0;
  32.  
  33. void setup() {
  34.   pinMode(blue_wire, OUTPUT);
  35.   pinMode(pink_wire, OUTPUT);
  36.   pinMode(yellow_wire, OUTPUT);
  37.   pinMode(orange_wire, OUTPUT);
  38.   pinMode(sensor, INPUT);
  39.   Serial.begin(9600);
  40.   inputString.reserve(16);
  41.  
  42.  }
  43.  
  44. void loop() {
  45.  
  46.   //sensor
  47.  
  48.   if (digitalRead (sensor) == HIGH && !latch_sensorToLow) { latch_sensorToHigh = true;
  49.   if (digitalRead (sensor) == LOW && latch_sensorToHigh) {    
  50.      latc_sensorToLow = true;  // Itt jelzi a hibát
  51. //'latc_sensorToLow' was not declared in this scope    
  52.      latc_sensorToHigh = false;
  53.      count = 0;
  54.      Serial.println(count);
  55.   }
  56.  
  57.   if (count >= 1 || count < -1) sensorToLow = false;
  58.  
  59.   //Set to Zero
  60.  
  61.  if (set_Zero) {
  62.    speedRotation = 1; //Faster rotation
  63.    rotateClockwise();
  64.    if (count == 0) set_Zero = false;
  65.  }
  66.   else speedRotation = 2;
  67.    
  68. // Incoming commands
  69. if (stringComplete) {
  70.   if (!inputString.indexOf("z")) set_Zero = true;
  71.   if (!inputString.indexOf("m")) rotateTo_MainLine = true;
  72.   if (!inputString.indexOf("f")) rotateTo_180 = true;
  73.  
  74.    inputString = "";
  75.    stringComplete = false;
  76. }
  77.  
  78. // Rotation
  79.  
  80. if (rotateTo_MainLine) {
  81.   if (count <= -50) speedRotation = 5;
  82.   if (count == -200) rotateTo_MainLine = false;
  83.   rotateCounterclockwise();
  84. }
  85. else speedRotation = 2;
  86.  
  87. if (rotateTo_180) {
  88.   if (count >= 8930) speedRotation = 5;
  89.   if (count == 9080) rotateTo_180 = false;
  90.   rotateClockwise();
  91. }
  92. else speedRotation = 2;
  93.  
  94. // Debug
  95.  
  96.  if (millis() > (millisPrint + 500)) {
  97.   Serial.println(count);
  98.   millisPrint = millis();
  99.  }
  100.  
  101. }
  102.  
  103. // Functions
  104.  
  105. void rotateClockwise() {
  106.  
  107.   static int shift = 0;
  108.  
  109. if (millis() > (millisPrevious + speedRotation)) {
  110.   if (shift < 8) {
  111.     digitalWrite(blue_wire, bitRead(circularShift[shift], 3));
  112.     digitalWrite(pink_wire, bitRead(circularShift[shift], 2));
  113.     digitalWrite(yellow_wire, bitRead(circularShift[shift], 1));
  114.     digitalWrite(orange_wire, bitRead(circularShift[shift], 0));
  115.     shift++;
  116.     if (shift == 8) shift = 0;
  117.     count++;
  118.   }
  119.  
  120.    millisPrevious = millis();
  121.  }
  122. }
  123.  
  124.  void rotateCounterclockwise() {
  125.  
  126.   static int shift = 0;
  127.  
  128.   if (millis() > (millisPrevious + speedRotation)) {
  129.   if (shift < 8) {
  130.     digitalWrite(blue_wire, bitRead(circularShift[shift], 0));
  131.     digitalWrite(pink_wire, bitRead(circularShift[shift], 1));
  132.     digitalWrite(yellow_wire, bitRead(circularShift[shift], 2));
  133.     digitalWrite(orange_wire, bitRead(circularShift[shift], 3));
  134.     shift++;
  135.     if (shift == 8)shift = 0;
  136.     count--;
  137.   }
  138.  
  139.    millisPrevious = millis();
  140.   }
  141.  }  
  142.  
  143.  void serialEvent() {
  144.     if (Serial.available()) {
  145.     char inChar = (char)Serial.read();
  146.     inputString += inChar;
  147.     if (inChar == '\n') {
  148.       stringComplete = true;
  149.    }
  150.  }
  151. }
[/code]
A hozzászólás módosítva: Márc 30, 2020
(#) Massawa válasza HA2SR hozzászólására (») Márc 30, 2020 /
 
Ezzel a motorral ilyen alkalmazásra ne igen fogalkozz. A motir állitolag autokban a klimaberendezés alkatrészeit mozgatja ( a levegö utját zárja ill nyitja). A konstrukcio olyan szerencsétlen, hogy a lépésszámok nincsenek egyöntetü viszonyban a kimenö tengellyel. Ha jol emlékszem egy fordulathoz 7341,5 lépés kell. Az áttétel 63,5!
(Keresd meg a youtubon Steve videoit nagyon pontosan és részletesen tárgyalja ( szo nélkül) a hibát)
URB

Video 1. Rész
Szoval a motorral forgathatod a hidat, de cimezni vagy vezérelni nem egyszerü.
A videon ott vannak a müködö kodok is. Az gitthubon is van egy sereg. Forgatásra jo a motir de másra nem (mint léptetö motor)
(#) asch válasza HA2SR hozzászólására (») Márc 30, 2020 /
 
Sima elgépelés, hiányzik egy h betű a változó nevéből. Persze más hiba is lehet, de ez az ami szembetűnő.
(#) pipi válasza Cooter hozzászólására (») Márc 31, 2020 /
 
Hali!
Elteszed az előző mért értéket(vagy pár mérés átlagát), Az új mérésnél megnézed hogy az előzőhöz képest +-x-el kisebb/nagyobb, ha belül van a hiszterézisen(+-x) akkor nem csinálsz semmit.
(#) Massawa válasza asch hozzászólására (») Márc 31, 2020 /
 
Én is csak a h hiányát látom a latch- ban
(#) Massawa válasza Massawa hozzászólására (») Márc 31, 2020 /
 
Kikerestem a régi infokat. Az áttétel a motorban 63.68395:1, ebböl sajnos az következik, hogy az ajánlott 4076 lépésre csak majdnem 360 fokot fordul a motortengely, mindig marad hiba.
Egy léptetö motor viszont nem ugy müködik, hogy majdnem annyit fordul mint amennyit beprogramozunk.

Motor
(#) David 3g hozzászólása Márc 31, 2020 /
 
Sziasztok. Szeretném kérni a segítségeteket egy olyan projektben hogy. Arduino uno ha kap egy bemeneti jelet pl index kimenetről akkor bekapcsoljon egy mosfetet par másodpercig aztan szépen kapcsoljon ki fokozatosan. Sajnos példát nem találtam még erre a tudásom meg még kevés ehez.
(#) usane válasza ha1drp hozzászólására (») Márc 31, 2020 /
 
Ezt eddig értettem, köszönöm. Ez így fix sávokat fog adni, ha jól étem. Meg lehet oldani, hogy a sávok középfrekvenciája valamint a sávszélesség változtatható legyen?
(#) usane válasza David 3g hozzászólására (») Márc 31, 2020 /
 
Idézet:
„szépen kapcsoljon ki fokozatosan”

Egy FET vagy be, vagy ki van kapcsolva, illetve van átmeneti állapota, de azt nem ilyenkor hsaználjuk. Amit te szeretnél azt PWM-el lehet megvalósítani. Mi lenne ez? Lassan halványuló utastér világítás? Arra az arduino ágyú,vannak egyszerűbb megoldások is de ha mindenképpen arduval akarod akkor nem bonyolult. Mint írtam a FET-et PWM-el kell meghajtani. A jel beérkezésekor teljes kitöltéssel hajtod meg, majd időzítve folyamatosan csökkented a kitöltési tényezőt. Lehet, hogy van már rá kész könyvtár vagy kód is, csak meg kell keresni, de megírni sem bonyolult.
(#) mateatek válasza David 3g hozzászólására (») Márc 31, 2020 /
 
Az analogWrite() lesz a barátod. A youtube tele van a használatával.
(#) Massawa válasza David 3g hozzászólására (») Márc 31, 2020 /
 
Aránylag egyszerüen megoldhatod. Valamelyik analog bemenetre kötsz egy kondit meg egy ellenállást a bemenet felé. Az analog jellel egy PWM-t generálsz arra a kimenetre ahol a FET van. A map funkcioval beállithatod a tartományt.
Ha most a kapcsoloval egy pillanat alatt feltötöd a kondit ami bekapcsolja a FETet és amint a kapcsolot kikapcsolod a bemenet folyatosan csökkenteni fogja a FET kitöltési tényezöét és szép lassan kialszik a LED.
A hozzászólás módosítva: Márc 31, 2020
(#) David 3g válasza usane hozzászólására (») Márc 31, 2020 /
 
Szia. Úgynevezett hazakísérő fényre gondoltam autóba.
(#) ha1drp válasza usane hozzászólására (») Márc 31, 2020 /
 
A sávok középfrekvenciája fix. A sávszélesség is fix. Nem tudom mi a cél, mekkora pontosság fontos, de akár 2048 (4096 minta) sőt több "oszlopot" is készíthetsz . Az pedig vizuális megjelentéshez bőven elégséges lehet.
Azt még érdemes tudni, hogy az oszlopok közt nincs olyan éles vágás ahogy gondolod. Egy bizonyos frekvenciájú hang nem csak a saját spektrumában jelenik meg, hanem a mellette lévőben is. De a szintje log2(n)* nagyságrenddel kisebb. Természetesen lehet összegezni is több "oszlopot" is, az előbbi matematikai szabály szerint. Persze létezik FFT könyvtár is e célra.
Gyakorlati tapasztalatom az, hogy egy zene spektrumának LED-eken való visszajelzésére teljesen felesleges a pontosságra figyelni. Nekem a problémát inkább a bemenő jelszinttől való erős függés jelentette.
*A mértékét illetően elképzelhető, hogy nem jól tudom, ez esetben a korrekciót megköszönöm
(#) proba válasza Massawa hozzászólására (») Márc 31, 2020 /
 
Hamarabb gondolnák egy timmer alkalmazására, pl egy másodpercenként csökkenti a PWM kitöltési tényezőjét . A tiédnek előnye hogy egy potival is lehet utólag állítani a sebességet, bár erre elég lenne maga a poti is kondi nélkül.
(#) Kovidivi válasza proba hozzászólására (») Márc 31, 2020 /
 
Én is a timer-re szavazok. A kondi kiszárad, melegre változtatja a kapacitását, esetleg letörik a nyákról (több µF esetén), plusz alkatrész, plusz nyákfelület, plusz költség, stb.
(#) Massawa válasza proba hozzászólására (») Márc 31, 2020 /
 
Én csak a legprimitivebb megoldást irtam le. Feltölteni egy kondit, és hagyni lassan kisülni. Az igy kapott feszültséget mérni és PWM-re változtatni. Ennyi. Mégis sokkal modernebb megoldás, mint egy analogWrite kimenttel és áteresztö tranyoval.
Bonyolitani mindent lehet, sehol sincs kizárva....
(#) Massawa válasza Kovidivi hozzászólására (») Márc 31, 2020 /
 
Hány autoban érte meg az ilyen elhalványulo lámpa az eredeti kondival és analog megoldással az autobontot.
(#) usane válasza ha1drp hozzászólására (») Ápr 1, 2020 /
 
Értem. Azt tudom, hogy az oszlopok logaritmikusan érzékenyek a sávszél felé.
Az összegzéssel akkor elérhetek bizonyos szintű sávszélesség manipulációt.
Nem kell sok oszlopnak lennie, legalábbis vizuálisan, és nem is a nagy pontosság a lényeg, inkább az lenne a lényege a változtathatóságnak, hogy jobban rá lehessen hangolni bizonyos hangszerekre, mit pl a mély sáv ugyebár elég jól tükrözi a dobszerű hangokat, de közép és magas sávokban ez elég vegyes, hogy épp milyen hangszer a domináló. Persze tudom, ez így nem állja meg a helyét pont az áthatások miatt, de valamelyest azért hatásos lehet.
(#) HA2SR hozzászólása Ápr 1, 2020 /
 
Massawa , és asch , köszönöm a válaszokat.
(#) szikorapéter hozzászólása Ápr 1, 2020 /
 
Sziasztok,kollégámmal építünk egy arduino decoderes DMX vezérelt LED szalagot.
Találtam hozzá egy programot, ellenben amikor lefutna mindig hibaüzenetet dob ennél a sornál:
DMXSerial.init(DMXReceiver);

Válaszokat előre is köszönöm.
A weboldal ahol találtam: weblink


A program maga így fest:
  1. // - - - - -
  2. // DmxSerial - A hardware supported interface to DMX.
  3. // DmxSerialRecv.ino: Sample DMX application for retrieving 3 DMX values:
  4. // address 1 (red) -> PWM Port 9
  5. // address 2 (green) -> PWM Port 6
  6. // address 3 (blue) -> PWM Port 5
  7. //
  8. // Copyright (c) 2011-2015 by Matthias Hertel, http://www.mathertel.de
  9. // This work is licensed under a BSD style license. See http://www.mathertel.de/License.aspx
  10. //
  11. // Documentation and samples are available at http://www.mathertel.de/Arduino
  12. // 25.07.2011 creation of the DmxSerial library.
  13. // 10.09.2011 fully control the serial hardware register
  14. // without using the Arduino Serial (HardwareSerial) class to avoid ISR implementation conflicts.
  15. // 01.12.2011 include file and extension changed to work with the Arduino 1.0 environment
  16. // 28.12.2011 changed to channels 1..3 (RGB) for compatibility with the DmxSerialSend sample.
  17. // 10.05.2012 added some lines to loop to show how to fall back to a default color when no data was received since some time.
  18. // - - - - -
  19.  
  20. #include
  21.  
  22. // Constants for demo program
  23.  
  24. const int RedPin = 5; // PWM output pin for Red Light.
  25. const int GreenPin = 6; // PWM output pin for Green Light.
  26. const int BluePin = 9; // PWM output pin for Blue Light.
  27. const int WhitePin = 10; //PWM output pin for White
  28.  
  29. int ledState = LOW;
  30. int chan1 = 100;
  31. int chan2 = chan1+1;
  32. int chan3 = chan1+2;
  33. int chan4 = chan1+3;
  34. int chan5 = chan1+4;
  35.  
  36. unsigned long previousMillis = 0; // will store last time LED was updated
  37. long interval = 20; // interval at which to blink (milliseconds)
  38.  
  39. boolean strobe = false;
  40.  
  41. #define RedDefaultLevel 100
  42. #define GreenDefaultLevel 200
  43. #define BlueDefaultLevel 255
  44. #define WhiteDefaultLevel 100
  45.  
  46. void setup () {
  47. DMXSerial.init(DMXReceiver);
  48.  
  49.    // set some default values
  50.    DMXSerial.write(1, 80);
  51.    DMXSerial.write(2, 0);
  52.    DMXSerial.write(3, 0);
  53.  
  54.    // enable pwm outputs
  55.    pinMode(RedPin, OUTPUT); // sets the digital pin as output
  56.    pinMode(GreenPin, OUTPUT);
  57.    pinMode(BluePin, OUTPUT);
  58.    pinMode(WhitePin, OUTPUT);
  59.  
  60.    Serial.begin(9600);
  61. }
  62.  
  63.  
  64.  void loop() {
  65.    // Calculate how long no data backet was received
  66.    unsigned long lastPacket = DMXSerial.noDataSince();
  67.    unsigned long currentMillis = millis();
  68.  
  69.    if (lastPacket < 5000) {
  70.      // read recent DMX values and set pwm levels
  71.      int strobeSpeed = DMXSerial.read(chan5);
  72.      if (strobeSpeed > 10) {
  73.          strobe = true;
  74.          interval = strobeSpeed-10;
  75.      } else {
  76.          strobe = false;
  77.      }
  78.  
  79.  
  80.      if(strobe){
  81.          if (currentMillis - previousMillis >= interval) {
  82.                 // save the last time you blinked the LED
  83.                 previousMillis = currentMillis;
  84.                 // if the LED is off turn it on and vice-versa:
  85.                 if (ledState == LOW) {
  86.                      ledState = HIGH;
  87.                      analogWrite(RedPin, DMXSerial.read(chan1));
  88.                      analogWrite(GreenPin, DMXSerial.read(chan2));
  89.                      analogWrite(BluePin, DMXSerial.read(chan3));
  90.                      analogWrite(WhitePin, DMXSerial.read(chan4));
  91.                 } else {
  92.                      ledState = LOW;
  93.                      analogWrite(RedPin, 0);
  94.                      analogWrite(GreenPin, 0);
  95.                      analogWrite(BluePin, 0);
  96.                      analogWrite(WhitePin, 0);
  97.                 }
  98.          }
  99.      } else {
  100.          analogWrite(RedPin, DMXSerial.read(chan1));
  101.          analogWrite(GreenPin, DMXSerial.read(chan2));
  102.          analogWrite(BluePin, DMXSerial.read(chan3));
  103.          analogWrite(WhitePin, DMXSerial.read(chan4));
  104.      }
  105.  
  106.    } else {
  107.          // Show pure red color, when no data was received since 5 seconds or more.
  108.         analogWrite(RedPin, RedDefaultLevel);
  109.         analogWrite(GreenPin, GreenDefaultLevel);
  110.         analogWrite(BluePin, BlueDefaultLevel);
  111.         analogWrite(WhitePin, WhiteDefaultLevel);
  112.    }
  113. }
(#) mateatek válasza szikorapéter hozzászólására (») Ápr 1, 2020 /
 
A 20-as sort az alábbiak szerint javítani:

#include <DMXSerial.h>

A linkelt könyvtárakat pedig használni kell hozzá:
Bővebben: Link
(#) szikorapéter válasza mateatek hozzászólására (») Ápr 1, 2020 /
 
Köszi, hazaérek , ellenőrzöm.
(#) Lamprologus hozzászólása Ápr 2, 2020 /
 
Minta programot keresek a következő feladathoz:
Lenne saját web szerveren egy weblap, és lenne egy ESP8266 modul.
A kettőnek kéne kommunikálni egymással. A weblapon meg kéne jeleníteni mondjuk egy hőmérsékletet amit az ESP mér, az ESP-nek meg kapcsolnia kéne egy kimenetét amit a weblapról kezdeményeznék.
(#) sargarigo válasza Lamprologus hozzászólására (») Ápr 2, 2020 / 1
 
Esetleg ajánlom ezt a sorozatot, ha jól emlékszem benne van amit szeretnél: Bővebben: Link
Szerk.: Úgy a 25. lecke körül lesz a tiéd, ott keresgesd! Én egy este végignéztem az egészet
A hozzászólás módosítva: Ápr 2, 2020
(#) Kari55 hozzászólása Ápr 2, 2020 /
 
Szervusztok.

Az egyik arduino uno-m nem csatlakozik a számítógéphez. Az L led sárgán világít, és az ON led zölden (ez gondolom jó).

Kimértem az Atmega328 Ic-t, meg van az 5 volt a 7 és a 21-es lábain aGND-hez képest.
Már a bootloadert is beégettem, hiba nélül megcsinálta, de mégsem jelenik meg az eszközkezelőben az uno.

Még mit kellene mérnem.

Köszönöm.
(#) proba válasza Lamprologus hozzászólására (») Ápr 2, 2020 /
 
Nem annyira vagyok képben, de a webszerver szerintem nem tud kezdeményezni semmit. Így a te feladatodra a webszervert az ESP-ből csinálnék. A számítógép ezt tudná kérdezgetni, hány fok van, és tudna neki olyan kérést küldeni, hogy kapcsoljon valamit.
(#) sargarigo válasza proba hozzászólására (») Ápr 2, 2020 /
 
Szerintem úgy értette, hogy a weblapon megjelenít egy állapotot (pl led on), amit az esp rendszeresen lekérdez. Ha látja hogy akcíó van, akkor végrehajtja. Én legalábbis így csinálnám.
Következő: »»   612 / 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