Une vidéo de l’association AMIC de Chambray lès Tours dans une classe de CM2 avec la programmation des robots MRduino Wireless. Le robot MRduino est programmable en langage graphique adapté aux enfants.
Contrôle du robot MRduino Wireless par UDP
Un tutoriel pour contrôler le robot MRduino Wireless par UDP avec un programme python.
UDP = User Datagram Protocol
Le contrôle du robot est réaliser par un script en langage python.
Le programme pour le robot
Ce programme permet au robot MRduino Wireless de
Il faut modifier votre SSID et mot de passe de votre réseau Wifi :
const char* ssid = "YOUR_SSID"; const char* pass = "YOU_PASSWORD";
Le programme complet :
#include <ESP8266WiFi.h> #include <WiFiUDP.h> #include <mrduino.h> int status = WL_IDLE_STATUS; const char* ssid = "FREEMR"; const char* pass = "WIFINICO"; unsigned int localPort = 12345; byte packetBuffer[512]; WiFiUDP Udp; int tries=0; void setup() { Serial.begin(115200); // wifi init WiFi.begin(ssid, pass); Serial.print("[Connecting]"); Serial.print(ssid); // wait connexion while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); tries++; if (tries > 30) { break; } } Serial.println(); printWifiStatus(); // wifi connexion Serial.println("Connected to wifi"); Serial.print("Udp server started at port "); Serial.println(localPort); Udp.begin(localPort); } void loop() { int noBytes = Udp.parsePacket(); String received_command = ""; if ( noBytes ) { // read UDP packet Udp.read(packetBuffer,noBytes); for (int i=1;i<=noBytes;i++) { received_command = received_command + char(packetBuffer[i - 1]); } Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.endPacket(); // print command Serial.print("COMMANDE ="); Serial.println(received_command); } } void printWifiStatus() { Serial.print("SSID: "); Serial.println(WiFi.SSID()); IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); }
- Compiler et télécharger le programme dans le robot MRduino Wireless
Le script python
Voici un script python pour envoyer une commande au robot :
- Exemple avec la commande pour allumer la led n°1 :
import socket UDP_IP_ADDRESS = "192.168.0.20" UDP_PORT_NO = 12345 Message = "#LED,1,1!" clientSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) clientSock.sendto(Message, (UDP_IP_ADDRESS, UDP_PORT_NO))
- Exemple avec la commande pour faire avancer le robot :
import socket UDP_IP_ADDRESS = "192.168.0.20" UDP_PORT_NO = 12345 Message = "#MF,20!" clientSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) clientSock.sendto(Message, (UDP_IP_ADDRESS, UDP_PORT_NO))
Construire un robot avec la carte Esus
https://www.youtube.com/watch?v=pjubJtC3ef8&t=135s
Article sous licence :
Utiliser le haut-parleur avec MRduino Wireless
Un tutoriel pour le contrôle du haut-parleur sur le robot MRduino Wireless en langage Arduino.
Le matériel nécessaire:
- Un câble femelle-femelle d’une longueur de 20 cm.
Le câblage
Le câble femelle-femelle doit être connecté entre la pin IO2 de la carte Esus et le connecteur du haut parleur nommé ‘S’. Le connecteur du haut parleur est un connecteur 2 pins près du connecteur de la batterie.
Un exemple de programme
- Premièrement il faut activez l’haut parleur :
void setup() { Serial.begin(115200); speakerEnable(); }
- Deuxièmement, activer la sortie IO2 en sortie :
void setup() { Serial.begin(115200); pinMode(2, OUTPUT); }
- Créer le fichier pitches.h avec les notes :
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_AS1 58 #define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define NOTE_B2 123 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS7 3729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
Le programme complet :
/* Melody Plays a melody circuit: * 2-ohm speaker on digital pin 8 created 21 Jan 2010 modified 30 Aug 2011 by Tom Igoe modified 15/05/2017 by Mace Robotics for MRduino Wireless robot This example code is in the public domain. http://www.arduino.cc/en/Tutorial/Tone */ #include <mrduino.h> #include <esusBoard.h> #include "pitches.h" int melody[] = { NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 }; int noteDurations[] = { 4, 8, 8, 4, 4, 4, 4, 4 }; void setup() { Serial.begin(115200); speakerEnable(); pinMode(2, OUTPUT); for (int thisNote = 0; thisNote < 8; thisNote++) { // to calculate the note duration, take one second // divided by the note type. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. int noteDuration = 1000 / noteDurations[thisNote]; tone(2, melody[thisNote], noteDuration); // to distinguish the notes, set a minimum time between them. // the note's duration + 30% seems to work well: int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); // stop the tone playing: noTone(2); } } void loop() { }
Article sous licence :
Lire plusieurs VL53L0X avec Arduino
Un programme pour lire deux capteurs VL53L0X avec une carte Arduino Uno :
Câblages de la carte Arduino avec les 2 capteurs :
- A4 : SDA
- A5 : SCL
- D4 : XSHUT capteur VL53L0X n° 1
- D3 : XSHUT capteur VL53L0X n°2
#include <Wire.h> #include <VL53L0X.h> #define XSHUT_C1 4 #define XSHUT_C2 3 #define Sensor1_Address 41 #define Sensor2_Address 42 VL53L0X Sensor1; VL53L0X Sensor2; void setup() { pinMode(XSHUT_C1, OUTPUT); pinMode(XSHUT_C2, OUTPUT); Serial.begin(9600); Wire.begin(); Sensor1.setAddress(Sensor1_Address); pinMode(XSHUT_C2, INPUT); delay(10); Sensor2.setAddress(Sensor2_Address); pinMode(XSHUT_C1, INPUT); delay(10); Sensor1.init(); Sensor2.init(); Sensor1.setTimeout(500); Sensor2.setTimeout(500); Sensor1.startContinuous(); Sensor2.startContinuous(); } void loop() { Serial.print("Capteur 1 ="); Serial.println(Sensor1.readRangeContinuousMillimeters()); Serial.print("Capteur 2 ="); Serial.println(Sensor2.readRangeContinuousMillimeters()); Serial.println("------------------------------"); delay(500); }
Article sous licence :
Chenillard avec MRduino Wireless
Exemple de chenillard avec le robot MRduino Wireless :
#include <mrduino.h> void setup() { // init serial interface Serial.begin(115200); } void loop() { led(1,1); delay(1000); led(2,1); delay(1000); led(3,1); delay(1000); led(3,0); delay(1000); led(2,0); delay(1000); led(1,0); delay(1000); }
Programmer MRduino Wireless en Wifi
Le robot MRduino Wireless a la possibilité de transférer le programme du PC vers le robot en communication Wifi.
Le programme
Ce programme permet d’activer le téléversements OTA (Over The Air) sur l’ESP8266 du robot.
- Ouvrer l’Arduino IDE et insérer ce programme :
En modifiant :
- VOTRE_SSID : le nom de votre réseau sans fil.
- VOTRE_MOT_DE_PASSE : le mot de votre réseau sans fil.
#include <mrduino.h> #include <ESP8266WiFi.h> #include <WiFiUdp.h> #include <ArduinoOTA.h> const char* ssid = "VOTRE_SSID"; const char* password = "VOTRE_MOT_DE_PASSE"; void setup() { // initialisation du wifi WiFi.begin(ssid, password); // connexion wifi while (WiFi.waitForConnectResult() != WL_CONNECTED) { delay(1500); ESP.restart(); } ArduinoOTA.setHostname("Robot_MRduinoW"); // initialisation de l'Over The Air ArduinoOTA.begin(); } void loop() { ArduinoOTA.handle(); }
Après avoir vérifié ce programme Arduino, vous pouvez le téléverser vers le robot via un câble micro-USB.
Transfére en Wifi
Maintenant que vous avez programmer le robot, vous pouvez fermer le logiciel Arduino IDE et le redémarrez afin d’avoir une nouvelle option de programmation.
- Ouvrez l’onglet Tools->Port :
- Sélectionner le port : monMRduinoW
Vous pouvez débrancher le câble série de type micro-USB entre votre robot et le PC; et téléverser à nouveau le programme. Cette fois-ci, le téléversement fonctionne en Wifi.
Fin du tuto !
Présentation du robot MRduino Wireless
Envoyer un SMS avec la carte Esus
Envoyer un SMS avec la carte Esus en utilisant le système de notification de Free mobile.
Vous avez besoin de votre identifiant Free mobile et de la clé d’identification au service :
Ceci est disponible sur votre espace abonné de Free mobile.
Le programme
Vous devez modifier ces constantes :
- VOTRE_SSID : le nom du réseau sans Wifi auquel votre carte Esus sera connecter.
- VOTRE_PASS : le mot de passe de votre réseau Wifi.
- IDENTIFIANT_FREE : votre identifiant Free mobile.
- CLE_ID : votre clé d’identification au service.
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
WiFiClientSecure client;
const char* ssid = "VOTRE_SSID";
const char* password ="VOTRE_PASS";
const char* host = "smsapi.free-mobile.fr";
const int https_Port = 443;
String url, message_SMS;
void setup()
{
Serial.begin(9600);
Serial.println();
Serial.print("connexion à ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("Connexion Wifi");
Serial.println("Adresse IP:");
Serial.println(WiFi.localIP());
Serial.print("connection a ");
Serial.println(host);
if (!client.connect(host, https_Port))
{
Serial.println("Erreur de connexion Wifi");
}
url = "/sendmsg?user=IDENTIFIANT_FREE&pass=CLE_ID&msg=";
message_SMS = "Test envoi SMS par la carte Esus!";
url = url + message_SMS;
Serial.print("URL: ");
Serial.println(url);
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"User-Agent: BuildFailureDetectorESP8266\r\n" +
"Connection: close\r\n\r\n");
}
void loop()
{
// rien
}
Fin du tuto !
Contrôle de relais avec la carte Esus
Un petit tutoriel pour le contrôle de relais 12V – 230V avec la carte Esus.
Matériels nécessaires :
- Relais électromécaniques,
- Une carte Esus,
- Une batterie ou alimentation 11.8V
Le branchement
Le relais est branché sur une sortie de commande moteur de la carte Esus:
La carte Esus doit être alimenté avec une tension de 11.8V (tension max de la carte).
Exemple de programme n°1
Pour contrôler le relais il suffit simplement d’appeler la fonction de contrôle moteur n°1 de la carte Esus :
#include <esusBoard.h>
void setup()
{
// init esus board
initEsusBoard();
}
void loop()
{
Activer_relais1();
delay(2000);
Desactiver_relais1();
delay(2000);
}
void Activer_relais1(void)
{
// sortie relais = 12V
motors1_set(1024, DIR_FORWARD);
}
void Desactiver_relais1(void)
{
// sortie relais = 12V
motors1_set(0, DIR_FORWARD);
}
Contrôle de 2 relais
Le deuxième relais est branché sur la deuxième sortie de commande moteur de la carte Esus:
Exemple de programme n°2
#include <esusBoard.h> void setup() { // init esus board initEsusBoard(); } void loop() { Activer_relais1(); Desactiver_relais2(); delay(2000); Desactiver_relais1(); Activer_relais2(); delay(2000); } void Activer_relais1(void) { // sortie relais = 12V motors1_set(1024, DIR_FORWARD); } void Desactiver_relais1(void) { // sortie relais = 0V motors1_set(0, DIR_FORWARD); } void Activer_relais2(void) { // sortie relais = 12V motors2_set(1024, DIR_FORWARD); } void Desactiver_relais2(void) { // sortie relais = 0V motors2_set(0, DIR_FORWARD); }