Aller au contenu


Contenu de buildrobot

Il y a 88 élément(s) pour buildrobot (recherche limitée depuis 04-mai 13)



#97916 Esp-wroom-32

Posté par buildrobot sur 27 juillet 2018 - 07:55 dans Electronique

Je l'ai monté sur la carte comme sur ton lien.




#97556 Esp-wroom-32

Posté par buildrobot sur 19 juillet 2018 - 11:05 dans Electronique

Bonjour tout le monde,

 

J'ai récemment acheté une carte Esp-wroom-32 (https://www.espressi...atasheet_en.pdf ) et je souhaiterai l'alimenter avec une alimentation externe.

Il y a 2 pin d'alimentation (3.3v et 5v). Je sais que le pin du 5v peut être utilisé en entrée (de 7v à 12v) mais dans ce cas, je ne peux plus l'utilisé pour alimenter mon circuit.

 

Est-ce que je peux utiliser le pin du 3.3v en tant qu'entrée pour mon alim externe (de 7v à 12v) ? Je n'arrive pas à trouver l'information...

 

Je vous remercie d'avance pour votre réponse ! :)




#97412 Taille PROGMEM

Posté par buildrobot sur 13 juillet 2018 - 01:08 dans Programmation

As tu essayé de mettre une taille de buffer plus importante ?

Au delà de 1200, la mémoire de l'Arduino est pleine




#97410 Taille PROGMEM

Posté par buildrobot sur 13 juillet 2018 - 01:03 dans Programmation

J'ai oublier de préciser un point important...

byte Ethernet::buffer[1200]; // tcp/ip send and receive buffer
BufferFiller bfill;

void loop() {
  colors[0] = rgb_color(Green, Red, Blue);
  ledStrip.write(colors, LED_COUNT);


  // wait for an incoming TCP packet, but ignore its contents
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);

  if (pos) {
    delay(1);   // necessary for my system
    bfill = ether.tcpOffset();
    char *data = (char *) Ethernet::buffer + pos;

    if (strncmp("GET /", data, 5) != 0) {
      // Unsupported HTTP request
      // 304 or 501 response would be more appropriate
      bfill.emit_p(http_Unauthorized);
    }
    else {
      data += 5;
      Serial.print("data : ");
      Serial.print(data);
      if (data[0] == ' ') {
        // Return home page
        homePage();
      }
      if (strstr(data, "ledr=on")) {
        Serial.println("ledr=on dans data !");
        Red = 255;
        bfill.emit_p(http_Found);
      }
      if (strstr(data, "ledg=on")) {
        Serial.println("ledg=on dans data !");
        Green = 255;
        bfill.emit_p(http_Found);
      }
      if (strstr(data, "ledb=on")) {
        Serial.println("ledb=on dans data !");
        Blue = 255;
        bfill.emit_p(http_Found);
      }
      if (strstr(data, "n1s1")) {
        Serial.println("n1s1 dans data !");
        bfill.emit_p(http_Found);
      }
    }

    ether.httpServerReply(bfill.position());    // send http response
  }
}

J'ai également un buffer de taille 1200, qui va par la suite contenir tous les éléments de mon interface Web.

Il parait logique que si je mets trop de données dans ce buffer, l'Arduino ne va pas trop aimer...

 

Or, je ne peux déclarer qu'une seul "byte Ethernet::buffer[1200]"...

 

Y aurait-il une alternative à ce problème ?

 

Merci d'avance à vous tous de prendre le soin de me répondre :)




#97409 Taille PROGMEM

Posté par buildrobot sur 13 juillet 2018 - 12:46 dans Programmation

Petites questions : 

1) que te dit le compilateur arduino au niveau de % d'utilisation mémoire quand ça marche ? Est ce que tu es proche des 100% ? 

2) est ce que si tu commentes d'autres partie de ton codes pour libérer un peu d'espace mémoire, tes deux lignes là peuvent être ajoutée ?  

Réponse à tes questions :

 

1) Concernant la mémoire, voilà ce que j'ai :


Le croquis utilise 10492 octets (32%) de l'espace de stockage de programmes. Le maximum est de 32256 octets.
Les variables globales utilisent 1449 octets (70%) de mémoire dynamique, ce qui laisse 599 octets pour les variables locales. Le maximum est de 2048 octets. 

2) En commentant des parties du "code" (la partie HTML contenue dans les PROGMEM), mais deux lignes s'affichent bien.




#97406 Taille PROGMEM

Posté par buildrobot sur 13 juillet 2018 - 11:14 dans Programmation

Bonjour, voulant créer un interface web pour contrôler mon arduino avec un Shield Ethernet ENC28J60.

Pour la créer, j'utiliser la librairies EtherCard.h.

 

Je créer ma page comme suis :

const char http_OK[] PROGMEM =
  "HTTP/1.0 200 OK\r\n"
  "Content-Type: text/html\r\n"
  "Pragma: no-cache\r\n\r\n";

const char http_Found[] PROGMEM =
  "HTTP/1.0 302 Found\r\n"
  "Location: /\r\n\r\n";

const char http_Unauthorized[] PROGMEM =
  "HTTP/1.0 401 Unauthorized\r\n"
  "Content-Type: text/html\r\n\r\n"
  "<h1>401 Unauthorized</h1>";

const char title[] PROGMEM =
  "<html>"
  "<head>"
  "<title>Escape Dimension</title>"
  "</head>";

const char colorLed[] PROGMEM =

  "Couleur led :"
  "<input type='checkbox' name='ledr' value='on'> Rouge"
  "<input type='checkbox' name='ledb' value='on'> Bleu"
  "<input type='checkbox' name='ledg' value='on'> Vert<br>"
  ;

const char difficulte[] PROGMEM =
  "Difficulte :"
  "<input type='checkbox' name='diff1' value='1'> 1"
  "<input type='checkbox' name='diff2' value='2'> 2"
  "<input type='checkbox' name='diff3' value='3'> 3<br>"
  ;

const char niveau1[] PROGMEM =
  "Nombre de sons par sequence :"
  "<li>Niveau 1</li>"
  "Sequence 1 : <input type='number' min='0' max='20' step='1' name='n1s1' value='5' size='5' required> sons<br>"
//  "Sequence 1 : <input type='number' min='0' max='20' step='1' name='n1s2' value='5' size='10' required> sons<br>"
//  "Sequence 1 : <input type='number' min='0' max='20' step='1' name='n1s3' value='5' size='15' required> sons<br>"
  ;

void homePage()
{
  bfill.emit_p(PSTR(
                 "$F"
                 "$F"
                 "<h1 style='text-align:center'> Game master </h1>"
                 "<div style='border-style: solid; padding: 5px;'>"
                 "<h2 style='text-align: center; margin: none'>Configuration</h2>"

                 "<form method='get'>"
                 "$F"
                 "$F"
                 "$F"
                 "<input type='submit' value='Submit'>"
                 "</form>"
               ),
               http_OK,
               title,
               colorLed,
               difficulte,
               niveau1
              );
}

 

 

Lorsque je veut rajouter 2 lignes supplémentaire (dans mon niveau1[] PROGMEM), plus rien ne fonctionne.

J'ai du mal à comprendre l'utilisation de PROGMEM. Il me semble que l'on ne peut pas dépasser un certain nombre de caractère dans la mémoire de l'Arduino ?

 

Je vous remercie d'avance de votre bonne foi pour toutes vos réponses ! :)

 

PS : n'hésitez pas à me demander plus de code pour plus de clarté ;)




#97279 Interface avec un ENC28J60

Posté par buildrobot sur 10 juillet 2018 - 07:49 dans Programmation

J'ai réussi à faire mon interface web, mais dans ce cas ci, je n'arrive pas à contrôler mes différents éléments...

 

Voici mon code :

#include <EtherCard.h>

const char SSDP_RESPONSE[] PROGMEM = "HTTP/1.1 200 OK\r\nCACHE-CONTROL: max-age=1200\r\nEXT:\r\nSERVER:Arduino\r\nST: upnp:rootdevice\r\nUSN: uuid:abcdefgh-7dec-11d0-a765-7499692d3040\r\nLOCATION: http://"; //dont forget our mac adress USN: uuid:abcdefgh-7dec-11d0-a765-Mac addr
const char SSDP_RESPONSE_XML[] PROGMEM = "/??\r\n\r\n"; // here is the adress of xml file /?? in this exemple but you could use another /upnp.xml\r\n\r\n
const char XML_DESCRIP[] PROGMEM = "HTTP/1.1 200 OK\r\nContent-Type: text/xml\r\n\r\n<?xml version='1.0'?>\r<root xmlns='urn:schemas-upnp-org:device-1-0'><device><deviceType>urn:schemas-upnp-org:device:BinaryLight:1</deviceType><presentationURL>/</presentationURL><friendlyName>Arduino</friendlyName><manufacturer>Fredycpu</manufacturer><manufacturerURL>http://fredycpu.pro</manufacturerURL><serialNumber>1</serialNumber><UDN>uuid:abcdefgh-7dec-11d0-a765-7499692d3040</UDN></device></root>     ";
const char SSDP_NOTIFY[] PROGMEM = "NOTIFY * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nCACHE-CONTROL: max-age=1200\r\nNT: upnp:rootdevice\r\nUSN: uuid:abcdefga-7dec-11d0-a765-7499692d3040::upnp:rootdevice\r\nNTS: ssdp:alive\r\nSERVER: Arduino UPnP/1.0\r\nLOCATION: http://"; //dont forget our mac adress USN: uuid:abcdefgh-7dec-11d0-a765-Mac addr

static byte myip[] = {
  192, 168, 2, 177
};
static byte gwip[] = {
  192, 168, 2, 254
};
static byte ssdp[] = {
  239, 255, 255, 250
};
static byte mymac[] = {
  0x74, 0x99, 0x69, 0x2D, 0x30, 0x40
}; // if you change it you must update SSDP_RESPONSE and XML_DESCRIP

byte Ethernet::buffer[750]; // tcp ip send and receive buffer
unsigned long timer = 9999;
const char pageA[] PROGMEM =
  "HTTP/1.0 200 OK\r\n"
  "Content-Type: text/html\r\n"
  "\r\n"
  "<html>"
  "<head><title>"
  "multipackets Test"
  "</title></head>"
  "<body>"
  "<h1 style='text-align:center'> Game master </h1>"
  "<div style='border-style: solid; padding: 5px;'>"
  "<h2 style='text-align: center; margin: none'>Configuration</h2>"
  "Couleur led :"
  "<button>Rouge</button>"
  "<button>Vert</button>"
  "<button>Bleu</button><br>"
  "Difficulte :"
  "<button>1</button>"
  "<button>2</button>"
  "<button>3</button><br>"

  ;
const char pageB[] PROGMEM =
  "<ul>"
  "Nombre de sons par sequence :"
  "<li>Niveau 1</li>"
  "<ul>"
  "<li>Sequence 1 : <input type='number' min='0' max='20' step='1' value='5' size='6'> sons</li>"
  "<li>Sequence 2 : <input type='number' min='0' max='20' step='1' value='10' size='6'> sons</li>"
  "<li>Sequence 3 : <input type='number' min='0' max='20' step='1' value='15' size='6'> sons</li>"
  "</ul>"
  ;
const char pageC[] PROGMEM =
  "<li>Niveau 2</li>"
  "<ul>"
  "<li>Sequence 1 : <input type='number' min='0' max='20' step='1' value='5' size='6'> sons</li>"
  "<li>Sequence 2 : <input type='number' min='0' max='20' step='1' value='10' size='6'> sons</li>"
  "<li>Sequence 3 : <input type='number' min='0' max='20' step='1' value='15' size='6'> sons</li>"
  "</ul>"
  ;
const char pageD[] PROGMEM =
  "<li>Niveau 3</li>"
  "<ul>"
  "<li>Sequence 1 : <input type='number' min='0' max='20' step='1' value='5' size='6'> sons</li>"
  "<li>Sequence 2 : <input type='number' min='0' max='20' step='1' value='10' size='6'> sons</li>"
  "<li>Sequence 3 : <input type='number' min='0' max='20' step='1' value='15' size='6'> sons</li>"
  "</ul>"
  "</ul>"
  ;

const char pageE[] PROGMEM =
  "<button>Valider la configuration</button>"
  "</div>"
  "<br>"
  "<div style='border-style: solid; padding: 5px;''>"
  "<h2 style='text-align: center; margin: none'>Actions</h2>"
  "<button>Commencer le jeu</button><br>"
  "Jouer un son :"
  "<select>"
  "<option>Elephant</option>"
  "<option>Serpent</option>"
  "<option>Singe</option>"
  "<option>Lion</option>"
  "</select>"
  "<button>Jouer</button><br>"
  ;

const char pageF[] PROGMEM =
  "Ouvrir le coffre "
  "<ul>"
  "<li><button>Ouvrir</button> si victoire</li>"
  "<li><button>Ouvrir</button> si defaite</li>"
  "</ul><br>"
  "Niveau du jeu :"
  "<ol>"
  "<li><input type='checkbox'></li>"
  "<li><input type='checkbox'></li>"
  "<li><input type='checkbox'></li>"
  "</ol>"
  ;

//const char pageG[] PROGMEM =

void setup() {
  ether.begin(sizeof Ethernet::buffer, mymac , SS);// SS = 53 for the mega ethernet shield and  10 for normal ethernet shield
  ether.staticSetup(myip, gwip);
  ENC28J60::disableMulticast(); //disable multicast filter means enable multicast reception
  Serial.begin(115200);
}

void loop() {
wait:
  word pos = ether.packetLoop(ether.packetReceive());
  // check if valid tcp data is received
  if (pos) {
    char* data = (char *) Ethernet::buffer + pos;
    if (strncmp("GET / ", data, 6) == 0) {
      ether.httpServerReplyAck(); // send ack to the request
      memcpy_P(ether.tcpOffset(), pageA, sizeof pageA); // send first packet and not send the terminate flag
      ether.httpServerReply_with_flags(sizeof pageA - 1, TCP_FLAGS_ACK_V);
      memcpy_P(ether.tcpOffset(), pageB, sizeof pageB); // send second packet and not send the terminate flag
      ether.httpServerReply_with_flags(sizeof pageB - 1, TCP_FLAGS_ACK_V);
      memcpy_P(ether.tcpOffset(), pageC, sizeof pageC); // send thirdt packet and not send the terminate flag
      ether.httpServerReply_with_flags(sizeof pageC - 1, TCP_FLAGS_ACK_V);
      memcpy_P(ether.tcpOffset(), pageD, sizeof pageD); // send fourth packet and not send the terminate flag
      ether.httpServerReply_with_flags(sizeof pageD - 1, TCP_FLAGS_ACK_V);
      memcpy_P(ether.tcpOffset(), pageE, sizeof pageE); // send fourth packet and not send the terminate flag
      ether.httpServerReply_with_flags(sizeof pageE - 1, TCP_FLAGS_ACK_V);
      memcpy_P(ether.tcpOffset(), pageF, sizeof pageF); // send fourth packet and send the terminate flag
      ether.httpServerReply_with_flags(sizeof pageF - 1, TCP_FLAGS_ACK_V | TCP_FLAGS_FIN_V);
      goto wait;
    }
    if (strncmp("GET /??", data, 7) == 0) { // description of services (normaly an xml file but here .....)
      ether.httpServerReplyAck();
      memcpy_P(Ethernet::buffer + TCP_OPTIONS_P, XML_DESCRIP, sizeof XML_DESCRIP);
      ether.httpServerReply_with_flags(sizeof XML_DESCRIP - 1 , TCP_FLAGS_ACK_V | TCP_FLAGS_FIN_V);
      goto wait;
    }
    if (strncmp("M-SEARCH", data, 8) == 0) { // service discovery request comes here (udp protocol)
      ssdpresp();
      goto wait;
    }
  }
  if (((millis() - timer) > 50000) || (timer > millis())) {
    timer = millis();
    ssdpnotify();
  }
}

void ssdpresp() { //response to m-search
  byte ip_dst[IP_LEN];
  unsigned int port_dst = Ethernet::buffer[34] * 256 + Ethernet::buffer[35]; //extract source port of request
  for (  int i = 0; i < IP_LEN; i++) { //extract source IP of request
    ip_dst[i] = Ethernet::buffer[i + 26];
  }
  int udppos = UDP_DATA_P;

  EtherCard::udpPrepare(1900, ip_dst, port_dst);
  memcpy_P(Ethernet::buffer + udppos, SSDP_RESPONSE, sizeof SSDP_RESPONSE);
  udppos = udppos  + sizeof SSDP_RESPONSE - 1;
  addip(udppos);
}

void ssdpnotify() { //Notification
  int udppos = UDP_DATA_P;
  EtherCard::udpPrepare(1900, ssdp, 1900);
  memcpy_P(Ethernet::buffer + udppos, SSDP_NOTIFY, sizeof SSDP_NOTIFY);
  udppos = udppos  + sizeof SSDP_NOTIFY - 1;
  addip(udppos);
}

void addip(int udppos) { // add current ip to the request and send it
  int adr;
  for (int i = 0; i < IP_LEN; i++) { // extract the current ip of arduino
    adr = ether.myip[i] / 100;
    if (adr)  {
      Ethernet::buffer[udppos] = adr + 48;
      udppos++;
    }
    adr = (ether.myip[i] % 100) / 10;
    if (adr)  {
      Ethernet::buffer[udppos] = adr + 48;
      udppos++;
    }
    adr = ether.myip[i] % 10;
    Ethernet::buffer[udppos] = adr + 48;
    udppos++;
    Ethernet::buffer[udppos] = 46;
    udppos++; //"."
  }
  udppos--;//erase the last point
  memcpy_P(Ethernet::buffer + udppos, SSDP_RESPONSE_XML, sizeof SSDP_RESPONSE_XML);
  udppos = udppos  + sizeof SSDP_RESPONSE_XML;
  udppos--;
  EtherCard::udpTransmit(udppos - UDP_DATA_P); // send all to the computer who make the request on her ip and port who make the request
}

Celui-ci est écrit en brut, directement dans des const char PROGMEM alors que dans le code du premier post, j'utilisé une fonction (homepage() ) dans laquelle j'utilisé la fonction PSTR() me permettant de créer des chaines formatés et ainsi donc de pouvoir récupérer l'état du bouton sur lequel je cliqué.

 

Comment pourrai-je intégrer ces 2 codes en 1 ?

 

Je vous remercie de votre patiente et de votre aide ! :)

 

buildrobot.




#97067 Interface avec un ENC28J60

Posté par buildrobot sur 04 juillet 2018 - 11:05 dans Programmation

Ou peut être une autre méthode plus simple pour créer mon interface ? :)




#97066 Interface avec un ENC28J60

Posté par buildrobot sur 04 juillet 2018 - 11:01 dans Programmation

Bonjour,

 

J'ai acheté un Shield Ethernet ENC28J60 (datasheet : https://www.mouser.c...9662b-62019.pdf )modulo-ethernet-enc28j60-arduino-D_NQ_NP .

 

Je souhaiterai créer une interface web me permettant de contrôler différents éléments de mon Arduino Uno (comme des LEDs, changer la valeurs de variable, jouer des sons...)

 

Pour cela, j'utilise la bibliothèque EtherCard.h.

 

Pour l'instant, j'ai une simple interface permettant de change la couleur du led RGB de chez Adafruit, avec 3 boutons. 

 

Mon problème vient ensuite.

 

Lorsque je veux rajouter d'autres boutons (par exemple pour gérer la difficulté d'un jeu ou jouer des sons), ma page web ne fonctionne plus...

 

Voici mon code fonctionnel :

#include <EtherCard.h>
#include <PololuLedStrip.h>

#define LED_COUNT 1   //Number of led connected
#define LED1 4  // define LED pin
PololuLedStrip<4> ledStrip;
rgb_color colors[LED_COUNT];


static byte myip[] = { 192, 168, 2, 177 };                      // ethernet interface ip address
static byte gwip[] = { 192, 168, 1, 254 };                      // gateway ip address
static byte mymac[] = { 0x74, 0x69, 0x69, 0x2D, 0x30, 0x31 };   // ethernet mac address - must be unique on your network

bool boolLedR = false;
bool boolLedG = false;
bool boolLedB = false;
byte Red = 0, Green = 0, Blue = 0;

byte Ethernet::buffer[500]; // tcp/ip send and receive buffer
BufferFiller bfill;

void setup() {
  Serial.begin(9600);
  pinMode(LED1, OUTPUT);

  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
    Serial.println( "Failed to access Ethernet controller");
  ether.staticSetup(myip, gwip);


  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);
  ether.printIp("DNS: ", ether.dnsip);
}

//En tête HTML
const char http_OK[] PROGMEM =
  "HTTP/1.0 200 OK\r\n"
  "Content-Type: text/html\r\n"
  "Pragma: no-cache\r\n\r\n";

const char http_Found[] PROGMEM =
  "HTTP/1.0 302 Found\r\n"
  "Location: /\r\n\r\n";

const char http_Unauthorized[] PROGMEM =
  "HTTP/1.0 401 Unauthorized\r\n"
  "Content-Type: text/html\r\n\r\n"
  "<h1>401 Unauthorized</h1>";

//Principal page of my interface
void homePage()
{
  bfill.emit_p(PSTR("$F"
                    "<html>"
                    "<head>"
                    "<title>Escape Dimension</title>"
                    "<meta http-equiv='refresh' content='5'/>"
                    "</head>"

                    "<body>"
                    "<h1 style='text-align:center'> Game master </h1>"
                    "<div style='border-style: solid'>"
                    "Color led :"
                    "<button><a href=\"?ledr=$F\">$F</a></button>"
//L'ajout de ces trois boutons (ou même d'un seul) arrête de faire fonctionne mon programme...
//                    "<button>Difficulte 1</button>"
//                    "<button>Difficulte 2</button>"
//                    "<button>Difficulte 3</button>"

                    "</div>"
                    "</body>"
                    "</html>"
                   ),
               http_OK,
               boolLedR ? PSTR("off") : PSTR("on"),
               boolLedR ? PSTR("RED allume") : PSTR("RED eteint"),
               boolLedG ? PSTR("off") : PSTR("on"),
               boolLedG ? PSTR("GREEN allume") : PSTR("GREEN eteint"),
               boolLedB ? PSTR("off") : PSTR("on"),
               boolLedB ? PSTR("BLUE allume") : PSTR("BLUE eteint")
              );
}

void loop() {
  colors[0] = rgb_color(Green, Red, Blue);
  ledStrip.write(colors, LED_COUNT);


  // wait for an incoming TCP packet, but ignore its contents
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);

  if (pos) {
    delay(1);   // necessary for my system
    bfill = ether.tcpOffset();
    char *data = (char *) Ethernet::buffer + pos;

    if (strncmp("GET /", data, 5) != 0) {
      // Unsupported HTTP request
      // 304 or 501 response would be more appropriate
      bfill.emit_p(http_Unauthorized);
    }
    else {
      data += 5;

      if (data[0] == ' ') {
        // Return home page
        homePage();
      }
      else if (strncmp("?ledr=on", data, 8) == 0) {
        // Set boolLedR true and redirect to home page
        boolLedR = true;
        Red = 255;
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ledr=off", data, 9) == 0) {
        // Set boolLedR false and redirect to home page
        boolLedR = false;
        Red = 0;
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ledg=on", data, 8) == 0) {
        // Set boolLedR true and redirect to home page
        boolLedG = true;
        Green = 255;
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ledg=off", data, 9) == 0) {
        // Set boolLedR false and redirect to home page
        boolLedG = false;
        Green = 0;
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ledb=on", data, 8) == 0) {
        // Set boolLedR true and redirect to home page
        boolLedB = true;
        Blue = 255;
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ledb=off", data, 9) == 0) {
        // Set boolLedR false and redirect to home page
        boolLedB = false;
        Blue = 0;
        bfill.emit_p(http_Found);
      }
      else {
        // Page not found
        bfill.emit_p(http_Unauthorized);
      }
    }

    ether.httpServerReply(bfill.position());    // send http response
  }

}

Je vous ai mis en commentaire de ma fonction homePage les boutons qui ne veulent pas fonctionner...

 

J'en viens donc à vous pour savoir si quelqu'un sait d'où pourrait venir le problème




#97065 Sield ethernet Arduino

Posté par buildrobot sur 04 juillet 2018 - 10:43 dans Programmation

Salut,

 

Si tu utilises un shield ethernet 2, il faut les libs Ethernet2 et pas Ethernet (d'après le site arduino). Je ne sais pas si ça changera qqc, mais à priori suivant le shield c'est pas les mêmes composants dessus et donc pe que ta librairie ne fait pas les bons réglages.

 

De même, en regardant rapidemment les sources, en faisant 

Ethernet.begin(mac, ip);

La lib va par défaut considérer que l'adresse de la gateway et du serveur DNS est la même que l'adresse IP, avec le dernier octet à 1 (donc 192.168.1.1 dans ton cas).

Le masque de réseau sera aussi par défaut à 255.255.255.0

 

En effet le problème venait de la librairie... Je ne pensais pas qu'il y en avait un le la version 2...

Merci ! :)




#97064 Problème alimentation Arduino Mega 2560

Posté par buildrobot sur 04 juillet 2018 - 10:42 dans Electronique

Oui si tu es pas loin des 700 mA de conso il te faudrait au moins du 1,5 A pour être tranquille et ne pas trop le faire travailler

Oui c'était ça, j'ai mis du 1,5A !

Merci ! :)




#96989 Sield ethernet Arduino

Posté par buildrobot sur 02 juillet 2018 - 09:02 dans Programmation

essaye d'ajouter la fonction "if(Ethernet.begin(mac)==0) {..." présente dans l'exemple joint : 
 

void setup() {
  // start the serial library:
  Serial.begin(9600);
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  // print your local IP address:
  Serial.println(Ethernet.localIP());

}

ça devrait t'indiquer si l’adresse mac est bien acceptée. 

 

Merci pour ta réponse !

 

Mais cela ne change rien, je ne passe pas dans cette condition... :/




#96986 Sield ethernet Arduino

Posté par buildrobot sur 02 juillet 2018 - 08:03 dans Programmation

Après avoir revérifier mon câblage (qui n'est pas correct...) j'obtient dans mon moniteur série : "server is at 0.0.0.0"

La je ne vois vraiment d'ou ça pourrait venir...

 

Merci pour votre aide.




#96873 Sield ethernet Arduino

Posté par buildrobot sur 29 juin 2018 - 12:49 dans Programmation

Bonjour tout le monde !

 

J'ai un Shield Ethernet 2 que je veux utiliser avec mon arduino Uno.

 

Mon problème :

Lorsque je veux tester un code d'exemple de la librairie <Ethernet.h> (l'exemple WebServer), rien ne se passe.

J'ai bien rentré l'adresse mac du Shield. J'ai également changé l''adresse ip pour en utiliser une qui n'est pas utilisé sur mon réseau.

Je fais donc un ping sur cette ip et j'obtient "Impossible de joindre l’hôte de destination." 

En ouvrant mon port série, je me suis aperçu que je restais bloqué juste avant mon server.begin()

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);

  Serial.println("Before server.begin()");
  server.begin();
  Serial.println("After server.begin()");

  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}

D'où pourrait venir cette erreur ?

 

Autre précision, n'ayant pas de sortie ethernet murale, je passe pas mon PC. Je mets un câble qui relie une switch, et de cette switch je vais à mon Shield.

 

Merci d'avance pour vos réponse ! :)




#96743 Problème alimentation Arduino Mega 2560

Posté par buildrobot sur 26 juin 2018 - 07:30 dans Electronique

Parfait tout fonctionne nickel ! ;)

Par contre, est-ce que c'est normalt que le YwRobot (http://eeshop.unl.edu/pdf/mb-v2%20datasheet.pdf) chauffe énormément alimenté en 9v ?




#96714 Problème alimentation Arduino Mega 2560

Posté par buildrobot sur 25 juin 2018 - 08:16 dans Electronique

Oui j'ai plusieurs alim je testerai tout ça. Merci pour tes conseils ! ;)




#96711 Problème alimentation Arduino Mega 2560

Posté par buildrobot sur 25 juin 2018 - 08:11 dans Electronique

Oui c'est mieux désolé voila : http://eeshop.unl.edu/pdf/mb-v2%20datasheet.pdf




#96706 Problème alimentation Arduino Mega 2560

Posté par buildrobot sur 25 juin 2018 - 07:33 dans Electronique

Si tu as d'autres questions hésite pas

Je peux utiliser ça par exemple (délivrant 700mA max ce qui devrait être suffisant pour mon projet) :

YwRobot-power-supply.jpg

La sortie usb pour alimenter la carte le reste pour les composants ?




#96704 Problème alimentation Arduino Mega 2560

Posté par buildrobot sur 25 juin 2018 - 07:03 dans Electronique

Ouais ta carte n'est pas faite pour délivrer du courants ou différent éléments tu dois avoir une alim pour ta carte et une autre pour tes éléments . C'est réalisable avec une seule alimentation en la divisant en 2 pour tes éléments il te faudra un abaisseur de tension pour avoir du 5 v . Mais pour moi ta carte doit bien chauffé à mon avis et elle ne délivre que 1,5 A max de conso

Très bien je testerai demain en la divisant ! Je vous retiens au courant. Merci pour vos réponses :)

(Et oui la carte chauffe bien ^^)




#96688 Problème alimentation Arduino Mega 2560

Posté par buildrobot sur 25 juin 2018 - 05:24 dans Electronique

C'est ta méga qui alimente en 5v tes différents lecteur et capteur ?

Oui j'alimente la carte en 9 ou 12v, puis l'arduino s'occupe des capteurs.




#96685 Problème alimentation Arduino Mega 2560

Posté par buildrobot sur 25 juin 2018 - 04:59 dans Electronique

1A ? 500mA ? 

J'ai testé avec une alilm 9v 1A et une alim 12v 2A




#96683 Problème alimentation Arduino Mega 2560

Posté par buildrobot sur 25 juin 2018 - 04:53 dans Electronique

Qu'est ce que tu utilises comme alimentation externe ? Il est possible que l'alimentation que tu utilises ne soit pas suffisante ...

J'utilise une alim 12v officiel pour l'alimenter




#96679 Problème alimentation Arduino Mega 2560

Posté par buildrobot sur 25 juin 2018 - 04:05 dans Electronique

L'usb me sert juste à afficher des données via la communication, histoire de debugger de temps en temps. Il est bien évident que pour le prototype final il n'y aura qu'une seule source d'alimentation 😉
Mais lors de test, en débranchant l'usb, un grésillement apparaît sur le haut parleur et l'Arduino redémarre...



#96670 Problème alimentation Arduino Mega 2560

Posté par buildrobot sur 25 juin 2018 - 01:08 dans Electronique

Bonjour,

Je fais un projet Arduino contenant un lecteur de carte RFID (le lecteur RC522), un lecteur de carte SD pour jouer de la musique (le MP3-TF-16P), 6 capteurs de proximité infra rouge (des TCRT5000) ainsi que 2 LEDs rgb.

Quand j'alimente l'Arduino avec une alim externe ainsi que l'usb de branché au PC pour lire des informations en série, tout fonctionne parfaitement, mais lorsque je retire l'usb du pc et que je reset l'Arduino, après quelques seconde, le son sortant du haut parleur se met à grésiller.

Serait-ce une manque de puissance de la part de l'Arduino ? Des chutes de tension ? Trop d'informations à traiter "simultanément" ?

Je vous remercie d'avance pour votre aide ! smile.png




#64480 Robot d'équilibre

Posté par buildrobot sur 11 mai 2015 - 10:08 dans Robots roulants, chars à chenilles et autres machines sur roues

Salut je pense qu'il parle un moteur qui a un axe (le même) des deux côtés genre: 

http://www.hobbyking.com/hobbyking/store/__23769__2725_Brushless_Outrunner_Motor_1600kv.html

Oui c'est bien un moteur comme celui-là.

 

Pour faire un robot pendulaire c'est vraiment pas terrible puisque dans ce cas tu ne pourras pas:

  1. faire tourner ton robot : le robot avancera ou reculera tout droit (aux glissements prêts niveau roues)
  2. la stabilisation se ferra donc sur un seul axe, il est surement préférable de gérer les deux roues différemment (ne serait si le sol n'est pas parfaitement plan)

En théorie ça doit pouvoir fonctionner avec un seul moteur dans la pratique j'ai des gros doutes sur la réussite.

 

De plus en partant sur un modèle à deux moteurs, tu peux t'inspirer (plus ou moins) de tous les "segway" homemade qui sont dispos partout sur le net.

Le but de mon projet est de montrer comment fonctionne les accéléromètres, donc ce n'est pas grave s'il ne tourne pas.

Je me suis inspiré du segway, que j'ai ensuite représenter sur le post précédent.