Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1174 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  195  196  197  ..  264  265  266  267  268  269
Auteur Sujet :

[arduino] Topic Unique blabla @ Arduino

n°290160
Carbon'R
Fahren macht frei
Posté le 31-01-2020 à 22:07:27  profilanswer
 

Reprise du message précédent :
 :hello:  
 
Pas de relecture de code pour aujourd'hui, mais une question hardware. J'ai acheté ce genre de module écran + boutons :  
https://www.ebay.fr/itm/1602-LCD-Di [...] SwCH9bcjtA
 
Vient la question de l'intégration... j'ai beau avoir cherché tous les mots clés imaginable,s j'ai pas trouvé une seule boîte prédécoupée qui irait pour ça. Pas d'autre moyen que de faire soi-même ? Avec quoi on "recouvre" les boutons pour avoir un truc facile à utiliser ?


---------------
Dunkelheit
mood
Publicité
Posté le 31-01-2020 à 22:07:27  profilanswer
 

n°290161
jimbofarra​r
Poreux de la cafetière
Posté le 31-01-2020 à 22:18:20  profilanswer
 

Carbon'R a écrit :

:hello:  
 
Pas de relecture de code pour aujourd'hui, mais une question hardware. J'ai acheté ce genre de module écran + boutons :  
https://www.ebay.fr/itm/1602-LCD-Di [...] SwCH9bcjtA
 
Vient la question de l'intégration... j'ai beau avoir cherché tous les mots clés imaginable,s j'ai pas trouvé une seule boîte prédécoupée qui irait pour ça. Pas d'autre moyen que de faire soi-même ? Avec quoi on "recouvre" les boutons pour avoir un truc facile à utiliser ?


En impression 3D :
https://www.thingiverse.com/thing:845415
https://www.thingiverse.com/thing:123636
https://www.thingiverse.com/thing:142282


---------------
Bien des Shubs et des Zouls furent calcinés dans les profondeurs de l'énorme Sloar, en vérité, je vous le dis !
n°290162
- Rocket -
Posté le 31-01-2020 à 22:18:33  profilanswer
 
n°290183
WipEout 20​97
Do you think we can fly
Posté le 01-02-2020 à 00:35:33  profilanswer
 

rat de combat a écrit :

Non testé faute de matos, sans garantie. :o  

Code :
  1. uint16_t rad_last;
  2. #define SEUIL 17000
  3. void loop()
  4. {
  5.     ETin.receiveData();
  6.     if(TELEM.rpm<SEUIL)
  7.     {
  8.         rad_last=TELEM.rad;
  9.         esc.writeMicroseconds(TELEM.rad);
  10.     }
  11.     else
  12.     {
  13.         esc.WriteMs(rad_last);
  14.     }
  15. }



 
Ah oui tiens je vais tester demain merci  [:transparency]  
Faut voir si ça passe, je me prenais la tête avec des contraintes et tout... je commence a plus ou moins saisir les if else while et ça devrait m'aider :jap:

n°290202
Carbon'R
Fahren macht frei
Posté le 01-02-2020 à 10:08:44  profilanswer
 


 


 
Je m'en doutais un peu mais comme je n'ai aps d'imprimante 3D sous la main, j'aurais plutôt cherché des trucs directement en vente :D


---------------
Dunkelheit
n°290203
- Rocket -
Posté le 01-02-2020 à 10:15:52  profilanswer
 
n°290212
_tchip_
Posté le 01-02-2020 à 11:20:08  profilanswer
 

fredo3 a écrit :

Salut
 
Bon c'est pas vraiment le topic approprié mais soit.
 
Que pensez vous de MongooseOS pour un ESP32?
 
C'est bien ou vaut mieux une alternative libre/gratos, sachant que ce qui m'intéresse c'est l'update du firmware à distance et MQTT.

Si tu veux on peut faire un topic ESP32 à deux :o mais je suis noob, je l'ai pas encore sorti de son emballage.

n°290223
jcb84
Posté le 01-02-2020 à 13:38:04  profilanswer
 

Hello @tous,
 
Je branche un arduino uno (un vrai pas un clone tinois) sur mon mac et j'ai ça : can't open device "/dev/cu.usbmodem14301": Resource busy...
 
Faut faire quoi ?  
Merci d'avance pour vos reponses !
Jc

n°290267
WipEout 20​97
Do you think we can fly
Posté le 01-02-2020 à 18:26:43  profilanswer
 

rat de combat a écrit :

Non testé faute de matos, sans garantie. :o  

Code :
  1. uint16_t rad_last;
  2. #define SEUIL 17000
  3. void loop()
  4. {
  5.     ETin.receiveData();
  6.     if(TELEM.rpm<SEUIL)
  7.     {
  8.         rad_last=TELEM.rad;
  9.         esc.writeMicroseconds(TELEM.rad);
  10.     }
  11.     else
  12.     {
  13.         esc.WriteMs(rad_last);
  14.     }
  15. }



 
Bon ben ça passe pas  [:wipeout 2097]  
Quand je dépasse le seuil le signal radio bouge plus, et le moteur continue donc de tourner dans le vide :o vais y réfléchir

n°290274
rat de com​bat
attention rongeur méchant!
Posté le 01-02-2020 à 18:50:13  profilanswer
 

jcb84 a écrit :

j'ai ça : can't open device "/dev/cu.usbmodem14301": Resource busy...

Où apparaît ce message? Dans l'IDE Arduino ou ça vient de la pomme?

mood
Publicité
Posté le 01-02-2020 à 18:50:13  profilanswer
 

n°290275
rat de com​bat
attention rongeur méchant!
Posté le 01-02-2020 à 18:51:12  profilanswer
 

WipEout 2097 a écrit :

Bon ben ça passe pas  [:wipeout 2097]  
Quand je dépasse le seuil le signal radio bouge plus, et le moteur continue donc de tourner dans le vide :o vais y réfléchir

Pas compris. :o Essaye d'expliquer autrement.  
Tu as bien remplacé WriteMs par writeMicroseconds je suppose?

n°290304
WipEout 20​97
Do you think we can fly
Posté le 01-02-2020 à 21:00:08  profilanswer
 

Oui, et ce qui se passe c'est que si le moteur dépasse le seuil de rpm défini, la valeur last_rad se fige... Si je lache les gazs il se passe rien le moteur continue à fond

n°290359
rat de com​bat
attention rongeur méchant!
Posté le 02-02-2020 à 13:13:22  profilanswer
 

Ah ben oui, forcément vu mon code. :o  
Désolé, c'est un truc tout bête je pense mais j'ai un noeud dans la tête là. Je reviens si je trouve. :o

n°290361
- Rocket -
Posté le 02-02-2020 à 13:20:23  profilanswer
 

Faut faire ça avec un PID non ? :??:

n°290362
rat de com​bat
attention rongeur méchant!
Posté le 02-02-2020 à 13:22:56  profilanswer
 

Comme il ne veut que limiter la valeur max un régulateur me semble "overkill".

n°290376
- Rocket -
Posté le 02-02-2020 à 14:18:35  profilanswer
 

Bah je ne vois rien d'autre.

 

Votre méthode ne permet pas de profiter pleinement de toute la course de l'accélérateur quand la batterie est chargée.

 

Le but je pense est d'avoir toujours les mêmes sensations aux commandes tant que la batterie est bonne ou moyenne.

 

Moi je ferai ça avec un PID :
Accelérateur à 0% => 0 rpm visé
Accélérateur à 100% => 17000 rpm visé
Et le PID se débrouille tant qu'il le peut.

 

Par contre ça peut être dangereux, faudra envisager le cas où le capteur du compte tour tombe en panne, histoire que la voiture ne s’emballe pas...


Message édité par - Rocket - le 02-02-2020 à 14:20:36
n°290390
WipEout 20​97
Do you think we can fly
Posté le 02-02-2020 à 15:19:36  profilanswer
 

Pas grave si la course entière n'est pas disponible, vu que la marge n'est pas énorme, si je suis déja a fond a 80% de l'accélérateur ce n'est pas bien gênant niveau sensation.
Si par exemple je veux une limite a 15000rpm, de toute façon sans cette limite ça n'atteindrait "que" 18000.

 

Mais je vois bien ce que tu veux dire, plutôt que limiter le signal, chercher a atteindre ce fameux seuil a 15000 tout en profitant du signal complet de 1500 a 2000 depuis la radio, Mais du coup comment le code peut prévoir a quel moment on va atteindre ce seuil :??:

 

J'aurais pu aussi envisager un calcul a partir du voltage de la batterie disponible, puisque je sais que le moteur atteint 2200rpm par volt.
Mais c'est impossible, ma mesure de tension n'est pas assez précise a cause des très forts appels de courant.


Message édité par WipEout 2097 le 02-02-2020 à 15:21:24
n°290392
WipEout 20​97
Do you think we can fly
Posté le 02-02-2020 à 15:25:01  profilanswer
 

Pour les compétitions monotype il existe des variateurs qui intègrent ce genre de limitations, ainsi que des modules externes : par exemple celui-ci s'interface entre le moteur et le variateur. J'ignore comment il fonctionne ni si il permet de profiter de toute la course (je ne pense pas) faudrait que j'en teste un

 

https://i.imgur.com/UAhLMVXm.png
https://i.imgur.com/mi4cvhim.png

 

C'est ça que je tente de recréer, en l'intégrant dans mon ardu de télémétrie existant

 

Pour les curieux, mon code complet pour la télémétrie actuel (côté voiture)
https://github.com/LorisBOX/RCTelemetry

 

Et son hôte
https://i.imgur.com/jAxh5l7l.jpg


Message édité par WipEout 2097 le 02-02-2020 à 15:43:55
n°290402
rat de com​bat
attention rongeur méchant!
Posté le 02-02-2020 à 15:51:19  profilanswer
 

Et un truc du genre

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <stdint.h>
  4. uint16_t rad_max=2000;
  5. #define LIMIT 17000
  6. #define TOLERANCE_PERCENT 1
  7. #define VALUE_IN_RANGE(val, upper, lower) (val>=lower && val<=upper)
  8. #define VALUE_IN_RANGE_PERCENT(val, limit, tol) VALUE_IN_RANGE(val, (uint16_t)(limit*(100.0-tol)/100), (uint16_t)(limit*(100.0+tol)/100))
  9. void WriteMs(const uint16_t v)
  10. {
  11.     printf("%u\n", v);
  12. }
  13. int main(int argc, char **argv)
  14. {
  15.     uint16_t rpm=15000;
  16.     uint16_t rad=1700;
  17.    
  18.     if(VALUE_IN_RANGE_PERCENT(rpm, LIMIT, TOLERANCE_PERCENT)) //on s'approche de la limite
  19.     {
  20.         rad_max=rad; //sauvegarder la commande maxi
  21.     }
  22.    
  23.     if(rad>rad_max)
  24.         WriteMs(rad_max);
  25.     else
  26.         WriteMs(rad);
  27.    
  28.        
  29.     return 0;
  30. }


??

 

Je prends le soucis par l'autre bout, je stocke la valeur rad maxi si on s'approche de la limite de tours (à 1%) et je limite la valeur rad écrite à cette valeur maxi. A tester


Message édité par rat de combat le 02-02-2020 à 15:53:55
n°291143
RomainD2
Posté le 09-02-2020 à 16:02:46  profilanswer
 

rat de combat a écrit :

Je ne commenterai pas la qualité de ce code. :o
 
Un truc comme ceci devrait marcher. J'ai pas testé, pas le matos, donc sans garantie toussa.


Je reviens longtemps après pour te remercier, j'avais mis la partie code un peu de côté. J'ai réussi avec ton code à faire ce que je voulais, et j'ai même ajouté la transmission d'une autre variable dans l'URL pour faire un bouton ON/OFF.
 
Maintenant, j'aimerais en plus afficher sur mon interface web la vitesse de rotation du moteur, déterminée à l'aide d'un capteur à effet hall. Il y a donc un interrupt avec une fonction magnet_detect, dès que l'aiment passe devant le capteur effet hall, cela incrémente un compteur pour compte le nombre de tour.
 
Là où je pèche, c'est comment mettre à jour ma page web à chaque fois que je rentre dans l'interrupt afin d'afficher la vitesse de rotation en live ?
 
Voici mon code actuel :
 

Code :
  1. /*
  2.   Zootrope Command Program
  3. */
  4. // Necessary libraries
  5. #include <WiFi.h>
  6. // Output PWM Led variables
  7. const int pinLed = 5;
  8. int freqLed = 30;
  9. const int channelLed = 0;
  10. const int resolutionLed = 10;
  11. int dutyCycleLed = 1;
  12. // Output PWM Motor variables
  13. const int pinMotor = 22;
  14. int freqMotor = 500;
  15. const int channelMotor = 4;
  16. const int resolutionMotor = 8;
  17. int dutyCycleMotor = 64;
  18. // Wifi Configuration : Replace with your network credentials
  19. const char* ssid     = "HR";
  20. const char* password = "RD19marsHF";
  21. WiFiServer server(80); // Set web server port number to 80
  22. String header; // Variable to store the HTTP request
  23. // Decode HTTP GET value
  24. String valueString_led = String(5);
  25. String valueString_motor = String(5);
  26. int pos1 = 0; // Header variables initialisations
  27. int pos2 = 0;
  28. int pos3 = 0;
  29. // For the Zootrope Power ON/OFF Status
  30. String powerState = "off";
  31. // Hall effect sensor and RPM measurement variables
  32. int pinHallEffect = 23;
  33. volatile byte half_revolutions;
  34. unsigned int rpm;
  35. unsigned long timeold;
  36. void setup()
  37. {
  38.   // Serial Initialisation, permit us to show the motor speed and Led frequency variables, and the IP adress of the device
  39.   Serial.begin(115200);
  40.   // Initialisation Hall Effect Sensor and RPM Measurement
  41.   pinMode(pinHallEffect, INPUT);
  42.   attachInterrupt(pinHallEffect, magnet_detect, RISING);//Initialize the intterrupt pin (Arduino digital pin 2)
  43.   half_revolutions = 0;
  44.   rpm = 0;
  45.   timeold = 0;
  46.   // Led PWM Initialisation
  47.   ledcSetup(channelLed, freqLed, resolutionLed);
  48.   ledcAttachPin(pinLed, channelLed);
  49.   ledcWrite(channelLed, dutyCycleLed);
  50.   // Motor PWM Initialisation
  51.   ledcSetup(channelMotor, freqMotor, resolutionMotor);
  52.   ledcAttachPin(pinMotor, channelMotor);
  53.   ledcWrite(channelMotor, dutyCycleMotor);
  54.   // Connect to Wi-Fi network with SSID and password
  55.   Serial.print("Connecting to " );
  56.   Serial.println(ssid);
  57.   WiFi.begin(ssid, password);
  58.   while (WiFi.status() != WL_CONNECTED)
  59.   {
  60.     delay(500);
  61.     Serial.print("." );
  62.   }
  63.   // Print local IP address and start web server
  64.   Serial.println("" );
  65.   Serial.println("WiFi connected." );
  66.   Serial.println("IP address: " );
  67.   Serial.println(WiFi.localIP());
  68.   server.begin();
  69. }
  70. void loop()
  71. {
  72.   // Motor RPM measurement
  73.   if (half_revolutions >= 2) {
  74.      rpm = 30*1000/(millis() - timeold)*half_revolutions;
  75.      timeold = millis();
  76.      half_revolutions = 0;
  77.      //Serial.println(rpm,DEC);
  78.    }
  79.  
  80.   WiFiClient client = server.available();   // Listen for incoming clients
  81.   if (client)                               // If a new client connects,
  82.   {
  83.     Serial.println("New Client." );          // print a message out in the serial port
  84.     String currentLine = "";                // make a String to hold incoming data from the client
  85.     while (client.connected())              // loop while the client's connected
  86.     {
  87.       if (client.available())               // if there's bytes to read from the client,
  88.       {
  89.         char c = client.read();             // read a byte, then
  90.         Serial.write(c);                    // print it out the serial monitor
  91.         header += c;
  92.         if (c == '\n')                      // if the byte is a newline character
  93.         { // if the current line is blank, you got two newline characters in a row. That's the end of the client HTTP request, so send a response:
  94.           if (currentLine.length() == 0)
  95.           {
  96.             // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
  97.             // and a content-type so the client knows what's coming, then a blank line:
  98.             client.println("HTTP/1.1 200 OK" );
  99.             client.println("Content-type:text/html" );
  100.             client.println("Connection: close" );
  101.             client.println();
  102.             if (header.indexOf("GET /power/on" ) >= 0) {;
  103.               powerState = "on";
  104.               //Turn On the LEDs
  105.               ledcWrite(channelLed, dutyCycleLed);
  106.               ledcWrite(channelMotor, dutyCycleMotor);
  107.             }
  108.             else if (header.indexOf("GET /power/off" ) >= 0) {
  109.               powerState = "off";
  110.               //Turn Off the LEDs
  111.               ledcWrite(channelLed, 0);
  112.               ledcWrite(channelMotor, 0);
  113.             }
  114.            
  115.             // Display the HTML web page
  116.             client.println("<!DOCTYPE html><html>" );
  117.             client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">" );
  118.             client.println("<link rel=\"icon\" href=\"data:,\">" );
  119.             // CSS to style the on/off buttons
  120.             // Feel free to change the background-color and font-size attributes to fit your preferences
  121.             client.println("<style>body { text-align: center; font-family: \"Trebuchet MS\", Arial; margin-left:auto; margin-right:auto;}" );
  122.             client.println(".slider { width: 300px; }</style>" );
  123.             client.println("<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js\"></script>" );
  124.             // Web Page
  125.             client.println("</head><body><h1>Zootrope Control</h1>" );
  126.             client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}" );
  127.             client.println(".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px;" );
  128.             client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}" );
  129.             client.println(".button2 {background-color: #555555;}</style></head>" );
  130.            
  131.             client.println("<p>Zootrope Power ON / OFF" );
  132.             // If the powerState is off, it displays the ON button       
  133.             if (powerState=="off" ) {
  134.               client.println("<p><a href=\"/power/on\"><button class=\"button\">ON</button></a></p>" );
  135.               Serial.println("/power/on" );
  136.             } else {
  137.               client.println("<p><a href=\"/power/off\"><button class=\"button button2\">OFF</button></a></p>" );
  138.               Serial.println("/power/off" );
  139.             }
  140.            
  141.             client.println("<p>LEDs frequency: <span id=\"ledFreq\"></span></p>" );
  142.             client.println("<input type=\"range\" min=\"0\" max=\"100\" class=\"slider\" id=\"ledSlider\" onchange=\"led(this.value)\" value=\"" + valueString_led + "\"/>" );
  143.             client.println("<script>var slider = document.getElementById(\"ledSlider\" );" );
  144.             client.println("var ledF = document.getElementById(\"ledFreq\" ); ledF.innerHTML = slider.value;" );
  145.             client.println("slider.oninput = function() { slider.value = this.value; ledF.innerHTML = this.value; }" );
  146.             client.println("$.ajaxSetup({timeout:1000}); function led(freqValue) { " );
  147.             client.println("$.get(\"/?value_led=\" + freqValue + \"&\" );{Connection: close};}</script>" );
  148.             client.println("<p>Motor Speed: <span id=\"motorSpeed\"></span></p>" );
  149.             client.println("<input type=\"range\" min=\"0\" max=\"255\" class=\"slider\" id=\"motorSlider\" onchange=\"motor(this.value)\" value=\"" + valueString_motor + "\"/>" );
  150.             client.println("<script>var sliderM = document.getElementById(\"motorSlider\" );" );
  151.             client.println("var motorF = document.getElementById(\"motorSpeed\" ); motorF.innerHTML = sliderM.value;" );
  152.             client.println("sliderM.oninput = function() { sliderM.value = this.value; motorF.innerHTML = this.value; }" );
  153.             client.println("$.ajaxSetup({timeout:1000}); function motor(speedValue) { " );
  154.             client.println("$.get(\"/?value_moteur=\" + speedValue + \"&\" );{Connection: close};}</script>" );
  155.             client.println("</body></html>" );
  156.             //GET /?value_led=180& HTTP/1.1
  157.             if (header.indexOf("GET /?value_led=" ) >= 0)
  158.             {
  159.               pos1 = header.indexOf('=');
  160.               pos2 = header.indexOf('&');
  161.               valueString_led = header.substring(pos1 + 1, pos2);
  162.               //Change Led Frequency
  163.               freqLed = valueString_led.toInt();
  164.               ledcSetup(channelLed, freqLed, resolutionLed);
  165.               ledcWrite(channelLed, dutyCycleLed);
  166.               Serial.println("freq led" );
  167.               Serial.println(freqLed);
  168.             }
  169.             // GET /?value_moteur=123& HTTP/1.1
  170.             else if (header.indexOf("GET /?value_moteur=" ) >= 0)
  171.             {
  172.               pos1 = header.indexOf('=');
  173.               pos2 = header.indexOf('&');
  174.               valueString_motor = header.substring(pos1 + 1, pos2);
  175.               //Change Motor Speed
  176.               dutyCycleMotor = valueString_motor.toInt();
  177.               ledcSetup(channelMotor, freqMotor, resolutionMotor);
  178.               ledcWrite(channelMotor, dutyCycleMotor);
  179.               Serial.println("Motor Speed (PWM)" );
  180.               Serial.println(dutyCycleMotor);
  181.             }
  182.            
  183.             // Display rpm value on the web interface
  184.             client.println("<p>Motor Speed " );
  185.             client.println(rpm);
  186.             client.println(" rpm</p>" );
  187.             Serial.println(rpm,DEC);
  188.             // The HTTP response ends with another blank line
  189.             client.println();
  190.             // Break out of the while loop
  191.             break;
  192.           }
  193.           else     // if you got a newline, then clear currentLine
  194.           {
  195.             currentLine = "";
  196.           }
  197.         }
  198.         else if (c != '\r')      // if you got anything else but a carriage return character,
  199.         {
  200.           currentLine += c;      // add it to the end of the currentLine
  201.         }
  202.       }
  203.     }
  204.     // Clear the header variable
  205.     header = "";
  206.     // Close the connection
  207.     client.stop();
  208.     Serial.println("Client disconnected." );
  209.     Serial.println("" );
  210.   }
  211. }
  212. void magnet_detect()//This function is called whenever a magnet/interrupt is detected by the arduino
  213. {
  214.    half_revolutions++;
  215.    //Serial.println("detect" );
  216. }


 
Merci :)

n°291144
rat de com​bat
attention rongeur méchant!
Posté le 09-02-2020 à 16:14:39  profilanswer
 

Actuellement ton code répond à une requête du navigateur (HTTP GET). Tu veux vraiment que à chaque changement la page se mette à jour ou uniquement quand le navigateur fait une requête / recharge la page?
Pour 1) le plus simple c'est d'aller chercher la valeur avec un bout de Javascript qui s'exécute régulièrement. Par contre faut déjà arriver à faire fonctionner ça sur PC et ensuite l'intégrer à ton code ESP, ça peut être compliqué selon ton niveau (mon niveau en JS est très très faible :o ).

n°291145
Turkleton
I don't quite understand you
Posté le 09-02-2020 à 16:20:34  profilanswer
 

rat de combat a écrit :

Pour 1) le plus simple c'est d'aller chercher la valeur avec un bout de Javascript qui s'exécute régulièrement. Par contre faut déjà arriver à faire fonctionner ça sur PC et ensuite l'intégrer à ton code ESP, ça peut être compliqué selon ton niveau (mon niveau en JS est très très faible :o ).

Un petit serveur Node.js ferait l'affaire  :)  


---------------
If you think it could look good, then I guess it should
n°291155
rat de com​bat
attention rongeur méchant!
Posté le 09-02-2020 à 17:56:43  profilanswer
 

Turkleton a écrit :

Un petit serveur Node.js ferait l'affaire  :)

Un simple timer et une requête XHR aussi. :o  
Je suis pas fan de ces trucs genre Node.js et Co et puis ce dernier tourne sur le serveur si je comprends bien, donc sur le ESP. Je sais même pas si c'est possible...

n°291157
Turkleton
I don't quite understand you
Posté le 09-02-2020 à 18:08:23  profilanswer
 

Ouais non, moi je voyais plus ça avec un serveur node.js qui tourne sur le PC, qui fait office de serveur web pour la consultation des données, et qui va interroger l'ESP quand il y a besoin (et mettre à jour les données sur la page web).


---------------
If you think it could look good, then I guess it should
n°291160
rat de com​bat
attention rongeur méchant!
Posté le 09-02-2020 à 18:25:54  profilanswer
 

Je pense que le but c'est justement de se passer d'un PC. Sinon autant mettre 3 RaPi, le cloud et je sais pas quoi. :o Bref, tu auras compris, j'aime les solutions minimalistes.

n°291183
Turkleton
I don't quite understand you
Posté le 09-02-2020 à 21:41:34  profilanswer
 

Oui, c'est sans doute un peu overkill (même si c'est pas grand chose d'installer et de faire tourner un serveur node.js au démarrage de son ordi), mais je ne crois pas que son "serveur" ESP puisse faire de la manipulation de DOM, donc ça oblige à un rafraîchissement de la page à chaque fois qu'on veut re-checker les valeurs, ce qui n'est pas l'idéal.
 
J'utilise un serveur node.js au boulot pour centraliser/coordonner une trentaine d'ESP/RPi, honnêtement ça fait le café :D
 
EDIT : mais effectivement, une RPi pourrait faire l'acquisition des données + serveur web pour les afficher (et modifier à la volée). Je suis juste pas sûr que ça soit moins compliqué comme solution que la mienne.


Message édité par Turkleton le 09-02-2020 à 21:43:14

---------------
If you think it could look good, then I guess it should
n°291214
RomainD2
Posté le 10-02-2020 à 08:27:16  profilanswer
 

Merci pour vos réponses,
 
Le serveur web est sur l'ESP32, et en effet, je ne souhaite qu'une seule carte!
 
Pour le javascript, c'est un truc de ce genre : https://randomnerdtutorials.com/esp [...] duino-ide/
 
J'ai tenté de comprendre, mais j'ai du mal à comprendre si je peux le combiner avec mon code actuel. Il faudrait peut être que j'essaie d'utiliser son code, et ensuite tenter d'implémenter mon code dans le siens ?
 
Sinon, il présente ici deux solutions apparemment :
https://randomnerdtutorials.com/esp [...] duino-ide/

n°291262
depart
Posté le 10-02-2020 à 13:11:49  profilanswer
 

Un moyen de simplifier la partie "serveur web" d'un esp, c'est de faire des html "en dur" + dans cette page un appel ajax à une 2è "page" sur l'esp qui retourne des valeurs en json ou qqch du genre (valeurs séparées par des ; si on veut faire simple).
Comme ça il suffit de mettre des div avec des id où on veut dans sa page et c'est le JS qui se charge d'actualiser les valeurs en allant requêter régulièrement cette seconde page qui n'a que des valeurs à renvoyer.
Ca évite un peu le boxon de println avec le html et les valeurs tout mélangé.

n°291447
RomainD2
Posté le 11-02-2020 à 14:28:37  profilanswer
 

depart a écrit :

Un moyen de simplifier la partie "serveur web" d'un esp, c'est de faire des html "en dur" + dans cette page un appel ajax à une 2è "page" sur l'esp qui retourne des valeurs en json ou qqch du genre (valeurs séparées par des ; si on veut faire simple).
Comme ça il suffit de mettre des div avec des id où on veut dans sa page et c'est le JS qui se charge d'actualiser les valeurs en allant requêter régulièrement cette seconde page qui n'a que des valeurs à renvoyer.
Ca évite un peu le boxon de println avec le html et les valeurs tout mélangé.


Tu connais un tutoriel expliquant cela ?

n°291513
depart
Posté le 11-02-2020 à 22:32:27  profilanswer
 

RomainD2 a écrit :


Tu connais un tutoriel expliquant cela ?


Pas forcément un tuto, mais un exemple de petite appli utilisant ce principe :
https://github.com/xlyric/Pv-router?files=1

n°291911
Natopsi
☄️Just end it already!☄️
Posté le 14-02-2020 à 13:29:07  profilanswer
 

Un simple transistor en collecteur ouvert ça doit déjà faire le job. Mais pour isoler un peu les masses tu peux passer par un optocoupleur.
 
Si tu met un transistor en collecteur ouvert n'oublie pas de mettre une résistance de base  ;)


Message édité par Natopsi le 14-02-2020 à 13:29:49

---------------
ACH/VDSHFRCoin◈1435mm⚡
n°291946
Nitescent
Posté le 15-02-2020 à 00:17:33  profilanswer
 

Je viens de comprendre un bug que je traînais depuis deux mois  [:corten:1]  
 
J'ai un moteur CC que je fais accélérer, puis tourner à vitesse max, puis décélérer, tout en vérifiant un capteur de limite à chaque itération.
 
Fonction très simple :  
 

Code :
  1. void ouverture_toit()
  2. {
  3.   if(capteurs(1) == 1) {return;}
  4.    
  5.   // Activation du moteur
  6.   analogWrite(LPWM,0);
  7.   analogWrite(RPWM,0);
  8.   digitalWrite(R_EN,HIGH);
  9.   digitalWrite(L_EN,HIGH);
  10.    
  11.   // Accélération  
  12.   for(int i=0; i<vmax; i=i+3){
  13.     delay(100);
  14.     analogWrite(RPWM,i);
  15.     if(capteurs(1) == 1) return;}
  16.   // On reste x secondes à la vitesse max
  17.   for( int i=0; i<t_max; i++){
  18.     delay(100);
  19.     if(capteurs(1) == 1) return;}
  20.  
  21.   // Décélération jusqu'à vitesse lente
  22.   for(int i=vmax-1; i>80; i=i-3){
  23.    // delay(50);
  24.     analogWrite(RPWM,i);
  25.     delay(100);
  26.     if(capteurs(1) == 1) return;}
  27.    
  28.   // 4s en vitesse lente
  29.   for(int i=0; i<40; i++){
  30.     delay(100);
  31.     if(capteurs(1) == 1) return;}
  32.  
  33.   // Arret du moteur
  34.   arret_moteur();
  35.   return;
  36. }


 
Sauf qu'après quelques tout petits changements sur mon PCB, la phase d'accélération ne voulait plus marcher.  
Maintenant quand j'appelle la fonction ça ne fait plus rien pendant la phase d'accélération, puis tout à coup ça démarre à la vitesse max.
De temps en temps ça marche, en faisant un reset de l'arduino, ou en re-uploadant le programme... impossible à comprendre. Je croyais que c'était mes commandes sur le port série qui foutaient le bordel.
 
Mais en fait non, je viens de comprendre.
À chaque fois j'active un servomoteur avant le moteur, et en fait c'est ce servomoteur qui me bloque le PWM du moteur CC  
le moteur est sur D9, le servo sur D6

Citation :


"On boards other than the Mega, use of the library disables analogWrite() (PWM) functionality on pins 9 and 10, whether or not there is a Servo on those pins. On the Mega, up to 12 servos can be used without interfering with PWM functionality; use of 12 to 23 motors will disable PWM on pins 11 and 12."


 
Pourtant je détache bien le servo après l'avoir activé :

Code :
  1. void ouverture_bouchon()
  2. {
  3.   Servomoteur.attach(bouchon,570,2250);
  4.   for (int i=40; i<140; i++){Servomoteur.write(i+1); delay(20);}
  5.   Servomoteur.detach();
  6.   delay(100);
  7.   return;
  8. }


 
Et bien sur je suis toujours à distance donc pas de bricolage possible

Message cité 1 fois
Message édité par Nitescent le 15-02-2020 à 18:56:23

---------------
Photos astro sur Flickr | Observatoire astronomique à distance Youtube
n°292153
_tchip_
Posté le 17-02-2020 à 18:20:53  profilanswer
 

Y a t il des bonnes âmes qui utilisent python pour communiquer avec leur contrôleur ? Je suis à la recherche de ressources pour ESP32 ou Arduino.

n°292257
Manisque
Posté le 18-02-2020 à 14:29:44  profilanswer
 

_tchip_ a écrit :

Y a t il des bonnes âmes qui utilisent python pour communiquer avec leur contrôleur ? Je suis à la recherche de ressources pour ESP32 ou Arduino.


 
C'est à dire?
J'ai quelques programmes en Python qui se contentent de lire ce qu'on leur balance sur un port série (en l'occurence un MCU avec un programme en C).


---------------
Si tu bois froid juste après le potage chaud, ça va faire sauter l'émail de tes dents - Monorailcat iz ohverin
n°292292
Nitescent
Posté le 18-02-2020 à 18:03:52  profilanswer
 


 
J'ai demandé à mon technicien sur place de découper la piste du PCB entre D9 et le contrôleur du moteur, et de souder un fil vers D3 à la place :o
maintenant le servomoteur ET le moteur marchent bien  :jap:


---------------
Photos astro sur Flickr | Observatoire astronomique à distance Youtube
n°292772
Profil sup​primé
Posté le 22-02-2020 à 19:19:20  answer
 

Bon j'ai reçu mes tonnes de colis aliexpress, en tant que débutant total la mise en route est assez hard quand même  :D  
J'ai déjà bataillé une journée entière à faire communiquer mon premier UNO déballé avec Arch à cause du module ch341 qui foire avec les versions chinoises.
 
Je vous met la procédure car je pense que c'est le truc qui peu en aider d'autres  :D  
 


#!/usr/bin/env bash
 
# Arch Linux (5.5.5-arch1-1)
 
# Install  
pacman -S arduino arduino-docs avr-binutils avr-gcc avr-libc avrdude
 
gpasswd -a <USER> uucp
gpasswd -a <USER> lock
modprobe cdc_acm
 
## Build Chinese ch341
git clone https://github.com/juliagoda/CH341SER.git
cd CH341SER
make
make load
 
## Gzip module and install
find . -name *.ko | xargs gzi
cp ch34x.ko.gz /usr/lib/modules/$(uname -r)/kernel/drivers/usb/serial
 
## Blacklist default ch341 module :
rmmod ch341
mv /usr/lib/modules/$(uname -r)/kernel/drivers/usb/serial/ch341.ko.xz /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ch341.ko.xz~
depmod -a
 
# NOTE : other ch341 module (most recent / not tested) :
# https://arduino.stackexchange.com/questions/72463/arduino-nano-clone-doesnt-upload-linux
# https://github.com/torvalds/linux/blob/e33eab9ded328ccc14308afa51b5be7cbe78d30b/drivers/usb/serial/ch341.c
# https://github.com/torvalds/linux/commit/35714565089e5e8b091c1155517b67e29118f09d#commitcomment-37154772
 


 
PS : A noté que ça fonctionne chez moi sur un port USB3 sans hub
(J'ai ni port, ni Hub en USB2)
 
sur le wiki arch il y a bien une note au sujet du module i2c-ch341-dkms (aur) apparement pas mal a l'abandon mais je suis jamais arrivé a le compilé et les sources datent de plus de 5ans


Message édité par Profil supprimé le 23-02-2020 à 00:36:03
n°293126
fh82
Posté le 26-02-2020 à 15:47:48  profilanswer
 

Bonjour à Toutes et Tous :)
 
Je suis agréablement surpris par ce site forum hardware...  :)
 
Ceci dit, je m'invite ici car, après avoir fait une "erreur"... (ça m'apprendra à rester et être calme...  :pfff:  ;) ) en achetant une carte Uno R3, sur laquelle il est impossible d'installer Domoticz !
 
J'ai donc acheté une seconde carte, une Mega2560, reçue ce jour...  
et j'apprends à installer...
en premier RFLink, parce que mon intention première est d'écouter les 4 sondes de températures !
 
Voilà ma présentation sur les 2 cartes que j'ai !
 
En cas de, je vous solliciterai, si je pédale dans la semoule  :jap:


---------------
BernArd -+- HP-8300/i7-2600 3.4GHz, Debian Bookworm 64bits -+- Xiaomi MI 11 / Free mobile
n°293132
JPlnx
Posté le 26-02-2020 à 16:30:06  profilanswer
 

fh82 a écrit :

Bonjour à Toutes et Tous :)

 

Je suis agréablement surpris par ce site forum hardware... :)

 

Ceci dit, je m'invite ici car, après avoir fait une "erreur"... (ça m'apprendra à rester et être calme... :pfff: ;) ) en achetant une carte Uno R3, sur laquelle il est impossible d'installer Domoticz !

 

J'ai donc acheté une seconde carte, une Mega2560, reçue ce jour...
et j'apprends à installer...
en premier RFLink, parce que mon intention première est d'écouter les 4 sondes de températures !

 

Voilà ma présentation sur les 2 cartes que j'ai !

 

En cas de, je vous solliciterai, si je pédale dans la semoule :jap:


Tu veux installer Domoticz sur un Arduino où tu veux utiliser Domoticz avec un Arduino ?
En fait, Domoticz nécessite quand même pas mal de ressources donc exit ce genre de cartes, il faut que tu t'oriantes vers un raspberry pie ou équivalent (orange pie si tu veux du pas cher). Pour commencer tu peux installer Domoticz sur ton pc actuel ou un vieux PC. Et installer MySensors sur tes Arduinos qui te serviront de passerelle et/ou de noeuds vers Domoticz. Les Arduinos, a défaut d'avoir la puissance pour faire tourner Domoticz, sont pourvus d'un grand nombre de broches sur lesquelles tu pourras y connecter moulte capteurs.

n°293143
fh82
Posté le 26-02-2020 à 18:34:39  profilanswer
 

JPlnx a écrit :

Tu veux installer Domoticz sur un Arduino où tu veux utiliser Domoticz avec un Arduino ?
En fait, Domoticz nécessite quand même pas mal de ressources donc exit ce genre de cartes, il faut que tu t'oriantes vers un raspberry pie ou équivalent (orange pie si tu veux du pas cher). Pour commencer tu peux installer Domoticz sur ton pc actuel ou un vieux PC. Et installer MySensors sur tes Arduinos qui te serviront de passerelle et/ou de noeuds vers Domoticz. Les Arduinos, a défaut d'avoir la puissance pour faire tourner Domoticz, sont pourvus d'un grand nombre de broches sur lesquelles tu pourras y connecter moulte capteurs.


Merci JPlnx de ton retour d'expériences  :jap:  
 
Aïe... c'était la première proposition que je souhaitais faire : installer Domoticz sur la Mega 2560 !
 
carte qui m'a été conseillée sur un forum domoticz... après que j'ai acheté une Uno R3...
 
h'reusement cela reste abordable, mais...  :pfff:  
 
Toutefois, comme je "débute" en domotique, j'écoute, j'écoute...
 
En continuant sur ta suggestion, c'est ce que je souhaitais faire pour débuter :
+ installer domoticz sur mon ordi fixe,
+ puis écouter les sondes (3) de température, dans les diverses pièces de la maison !
 
j'ai acheté le récepteur conseillé ici :
https://projetsdiy.fr/fabriquer-min [...] mprime-3d/  
le RXB6, que j'ai reçu hier, mais pas encore connecté, puisqu'il est impossible de le connecter à la Uno R3... et que la carte 2560 est arrivée ce midi !
 
Toutefois, je viens d'installer RFLink sur la 2560, avec l'aide de ce site :
https://www.fontenay-ronan.fr/updat [...] ux-ubuntu/
et cela c'est bien passé !
 
là, la 2560 est en attente !
 
Lorsque je débute quelque chose, comme là, la domotique, je suis et écoute les suggestions !


---------------
BernArd -+- HP-8300/i7-2600 3.4GHz, Debian Bookworm 64bits -+- Xiaomi MI 11 / Free mobile
n°293153
M4vrick
Mad user
Posté le 26-02-2020 à 21:03:39  profilanswer
 

Attention, Domoticz ne s'installe pas sur une carte Arduino quelque soit son modèle.
Domoticz est un logiciel, il fonctionne donc sur un système d'exploitation.
 
Tu dois installer Domoticz sur un PC classique ou un micro PC type Raspberry Pi.
 
Par contre tu peux utiliser tes Arduinos comme noeuds de collecte de données avec par exemple MySensors comme proposé par JPLnx, et c'est domoticz ensuite qui récupèrera ces données.


---------------
--== M4vr|ck ==--
n°293166
JPlnx
Posté le 26-02-2020 à 23:37:54  profilanswer
 

Au passage, il y a également un topic Domotique sur le forum ;-)

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  195  196  197  ..  264  265  266  267  268  269

Aller à :
Ajouter une réponse
 

Sujets relatifs
* Réparations de vos appareils électroniques & electromenager * 
Plus de sujets relatifs à : [arduino] Topic Unique blabla @ Arduino


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR