ENIB 2020 : Trieur 2 choix : Différence entre versions
| Ligne 3 : | Ligne 3 : | ||
==Que fait ce projet ? == | ==Que fait ce projet ? == | ||
| + | |||
| + | Tri des déchets sur un convoyeur : | ||
| + | |||
| + | - À partir d'un bouton poussoir | ||
| + | |||
| + | - En théorie à distance à partir d'une application | ||
==Liste des composants== | ==Liste des composants== | ||
| − | * | + | * 2 moteurs |
| − | * | + | * 1 bouton poussoir |
| − | * . | + | * Structure en bois |
| + | * Fils électriques | ||
| + | * Wemos D1 mini (sorte de mini-carte Arduino) | ||
| + | * Sac poubelle pour le convoyeur | ||
| + | |||
| + | ==Fabrication du convoyeur== | ||
| + | [https://youtube.com/watch?v=UsF5Isjdgw4 Lien YouTube] | ||
==Code== | ==Code== | ||
| + | Code Arduino : | ||
<pre> | <pre> | ||
| − | + | /* | |
| + | This sketch demonstrates how to set up a simple HTTP-like server. | ||
| + | The server will set a GPIO pin depending on the request | ||
| + | http://server_ip/gpio/0 will set the GPIO2 low, | ||
| + | http://server_ip/gpio/1 will set the GPIO2 high | ||
| + | server_ip is the IP address of the ESP8266 module, will be | ||
| + | printed to Serial when the module is connected. | ||
| + | */ | ||
| + | |||
| + | /* | ||
| + | #define LED_BUILTIN 2 | ||
| + | |||
| + | static const uint8_t D0 = 16; | ||
| + | static const uint8_t D1 = 5; | ||
| + | static const uint8_t D2 = 4; | ||
| + | static const uint8_t D3 = 0; | ||
| + | static const uint8_t D4 = 2; | ||
| + | static const uint8_t D5 = 14; | ||
| + | static const uint8_t D6 = 12; | ||
| + | static const uint8_t D7 = 13; | ||
| + | static const uint8_t D8 = 15; | ||
| + | static const uint8_t RX = 3; | ||
| + | static const uint8_t TX = 1; | ||
| + | */ | ||
| + | |||
| + | // IP en partage de connexion avec un telephone : http://192.168.43.207 | ||
| + | |||
| + | #include <ESP8266WiFi.h> | ||
| + | |||
| + | #ifndef STASSID | ||
| + | #define STASSID "lpd29-bureau" // Remplacer par votre SSID de reseau Wi-Fi | ||
| + | #define STAPSK "123456789" // Remplacer par votre mot de passe de reseau Wi-Fi | ||
| + | #endif | ||
| + | |||
| + | const char* ssid = STASSID; | ||
| + | const char* password = STAPSK; | ||
| + | |||
| + | const int boutonPoussoir = 5; // Correspondance D1 (voir tableau ci-dessus) | ||
| + | |||
| + | // Create an instance of the server | ||
| + | // specify the port to listen on as an argument | ||
| + | WiFiServer server(80); | ||
| + | |||
| + | void setup() { | ||
| + | Serial.begin(115200); | ||
| + | pinMode(2,INPUT_PULLUP); | ||
| + | |||
| + | // prepare LED | ||
| + | pinMode(LED_BUILTIN, OUTPUT); | ||
| + | digitalWrite(LED_BUILTIN, 0); | ||
| + | |||
| + | // preparer bouton | ||
| + | pinMode(boutonPoussoir, OUTPUT); | ||
| + | digitalWrite(boutonPoussoir, 0); | ||
| + | |||
| + | // Connect to WiFi network | ||
| + | Serial.println(); | ||
| + | Serial.println(); | ||
| + | Serial.print(F("Connecting to ")); | ||
| + | Serial.println(ssid); | ||
| + | |||
| + | WiFi.mode(WIFI_STA); | ||
| + | WiFi.begin(ssid, password); | ||
| + | |||
| + | while (WiFi.status() != WL_CONNECTED) { | ||
| + | delay(500); | ||
| + | Serial.print(F(".")); | ||
| + | } | ||
| + | Serial.println(); | ||
| + | Serial.println(F("WiFi connected")); | ||
| + | |||
| + | // Start the server | ||
| + | server.begin(); | ||
| + | Serial.println(F("Server started")); | ||
| + | |||
| + | // Print the IP address | ||
| + | Serial.println(WiFi.localIP()); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | // Check if a client has connected | ||
| + | WiFiClient client = server.available(); | ||
| + | if (!client) { | ||
| + | return; | ||
| + | } | ||
| + | Serial.println(F("new client")); | ||
| + | |||
| + | client.setTimeout(5000); // default is 1000 | ||
| + | |||
| + | // Read the first line of the request | ||
| + | String req = client.readStringUntil('\r'); | ||
| + | Serial.println(F("request: ")); | ||
| + | Serial.println(req); | ||
| + | |||
| + | // Match the request | ||
| + | int val; | ||
| + | if (req.indexOf(F("/gpio/0")) != -1) { | ||
| + | val = 0; | ||
| + | } else if (req.indexOf(F("/gpio/1")) != -1) { | ||
| + | val = 1; | ||
| + | } else { | ||
| + | Serial.println(F("invalid request")); | ||
| + | val = digitalRead(LED_BUILTIN); | ||
| + | } | ||
| + | |||
| + | // Set LED according to the request | ||
| + | digitalWrite(LED_BUILTIN, val); // LED de verification, inversee, integree a la Wemos | ||
| + | digitalWrite(boutonPoussoir, val); | ||
| + | |||
| + | // read/ignore the rest of the request | ||
| + | // do not client.flush(): it is for output only, see below | ||
| + | while (client.available()) { | ||
| + | // byte by byte is not very efficient | ||
| + | client.read(); | ||
| + | } | ||
| + | |||
| + | // Send the response to the client | ||
| + | // it is OK for multiple small client.print/write, | ||
| + | // because nagle algorithm will group them into one single packet | ||
| + | client.print(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ")); | ||
| + | client.print((val) ? F("high") : F("low")); | ||
| + | client.print(F("<br><br>Click <a href='http://")); | ||
| + | client.print(WiFi.localIP()); | ||
| + | client.print(F("/gpio/1'>here</a> to switch LED GPIO on, or <a href='http://")); | ||
| + | client.print(WiFi.localIP()); | ||
| + | client.print(F("/gpio/0'>here</a> to switch LED GPIO off.</html>")); | ||
| + | |||
| + | // The client will actually be *flushed* then disconnected | ||
| + | // when the function returns and 'client' object is destroyed (out-of-scope) | ||
| + | // flush = ensure written data are received by the other side | ||
| + | Serial.println(F("Disconnecting from client")); | ||
| + | } | ||
| + | |||
| + | // [IP]/gpio/0 allume la LED | ||
| + | // [IP]/gpio/1 eteint la LED | ||
</pre> | </pre> | ||
| + | App Inventor : | ||
| + | |||
| + | [[Fichier:Tri1.jpg|300px]] | ||
| + | |||
| + | [[Fichier:Tri2.jpg|300px]] | ||
==Catégories== | ==Catégories== | ||
[[Catégorie:Enib2020]] | [[Catégorie:Enib2020]] | ||
Version du 20 janvier 2020 à 16:06
Sommaire
photo de l'équipe
Que fait ce projet ?
Tri des déchets sur un convoyeur :
- À partir d'un bouton poussoir
- En théorie à distance à partir d'une application
Liste des composants
- 2 moteurs
- 1 bouton poussoir
- Structure en bois
- Fils électriques
- Wemos D1 mini (sorte de mini-carte Arduino)
- Sac poubelle pour le convoyeur
Fabrication du convoyeur
Code
Code Arduino :
/*
This sketch demonstrates how to set up a simple HTTP-like server.
The server will set a GPIO pin depending on the request
http://server_ip/gpio/0 will set the GPIO2 low,
http://server_ip/gpio/1 will set the GPIO2 high
server_ip is the IP address of the ESP8266 module, will be
printed to Serial when the module is connected.
*/
/*
#define LED_BUILTIN 2
static const uint8_t D0 = 16;
static const uint8_t D1 = 5;
static const uint8_t D2 = 4;
static const uint8_t D3 = 0;
static const uint8_t D4 = 2;
static const uint8_t D5 = 14;
static const uint8_t D6 = 12;
static const uint8_t D7 = 13;
static const uint8_t D8 = 15;
static const uint8_t RX = 3;
static const uint8_t TX = 1;
*/
// IP en partage de connexion avec un telephone : http://192.168.43.207
#include <ESP8266WiFi.h>
#ifndef STASSID
#define STASSID "lpd29-bureau" // Remplacer par votre SSID de reseau Wi-Fi
#define STAPSK "123456789" // Remplacer par votre mot de passe de reseau Wi-Fi
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
const int boutonPoussoir = 5; // Correspondance D1 (voir tableau ci-dessus)
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
void setup() {
Serial.begin(115200);
pinMode(2,INPUT_PULLUP);
// prepare LED
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, 0);
// preparer bouton
pinMode(boutonPoussoir, OUTPUT);
digitalWrite(boutonPoussoir, 0);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print(F("Connecting to "));
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(F("."));
}
Serial.println();
Serial.println(F("WiFi connected"));
// Start the server
server.begin();
Serial.println(F("Server started"));
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
Serial.println(F("new client"));
client.setTimeout(5000); // default is 1000
// Read the first line of the request
String req = client.readStringUntil('\r');
Serial.println(F("request: "));
Serial.println(req);
// Match the request
int val;
if (req.indexOf(F("/gpio/0")) != -1) {
val = 0;
} else if (req.indexOf(F("/gpio/1")) != -1) {
val = 1;
} else {
Serial.println(F("invalid request"));
val = digitalRead(LED_BUILTIN);
}
// Set LED according to the request
digitalWrite(LED_BUILTIN, val); // LED de verification, inversee, integree a la Wemos
digitalWrite(boutonPoussoir, val);
// read/ignore the rest of the request
// do not client.flush(): it is for output only, see below
while (client.available()) {
// byte by byte is not very efficient
client.read();
}
// Send the response to the client
// it is OK for multiple small client.print/write,
// because nagle algorithm will group them into one single packet
client.print(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now "));
client.print((val) ? F("high") : F("low"));
client.print(F("<br><br>Click <a href='http://"));
client.print(WiFi.localIP());
client.print(F("/gpio/1'>here</a> to switch LED GPIO on, or <a href='http://"));
client.print(WiFi.localIP());
client.print(F("/gpio/0'>here</a> to switch LED GPIO off.</html>"));
// The client will actually be *flushed* then disconnected
// when the function returns and 'client' object is destroyed (out-of-scope)
// flush = ensure written data are received by the other side
Serial.println(F("Disconnecting from client"));
}
// [IP]/gpio/0 allume la LED
// [IP]/gpio/1 eteint la LED
App Inventor :
