Author: macerobotics

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.

  1. 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.

img2

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 :

img1

  • 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 !

 

 

 

 

 

 

Envoyer un SMS avec la carte Esus

Envoyer un SMS avec la carte Esus en utilisant le système de notification de Free mobile.

photo_esus_smsV2

Vous avez besoin de votre identifiant Free mobile et de la clé d’identification au service :

Free_sms_V2

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:

relais_V2

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:

2relais_V2

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);
}


Capteur VL53L0X avec la carte Esus

Petit programme afin d’interfacer le capteur VL53L0X avec la carte Esus. Le capteur est relié par I2C à la carte Esus.

  • SDA : pin 2
  • SCL : pin 13

#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor;

void setup()
{
 Serial.begin(9600);

 Wire.begin(2, 13);//SDA, SCL
 
 // initialisation du capteur
 sensor.init();
 sensor.setTimeout(500);

}

void loop() 
{
  Serial.print("Distance mm =");

  // affichage de la distance en mm
  Serial.print(sensor.readRangeSingleMillimeters());

  if (sensor.timeoutOccurred())
  { 
    Serial.print(" TIMEOUT"); 
  }

  Serial.println();
}

source : https://github.com/pololu/vl53l0x-arduino/tree/master/examples/Single

Résultat :

com_mm

MRPi1 robot navigation “cleaning algorithm”

https://youtu.be/2khTwDcWwGw

Le programme :

from mrpi1_lib import *
import time

obs_limit = 600


# main program
state = 1

while 1:
 x1 = proxSensor(3)
 x2 = proxSensor(4)

 if(( x1 > obs_limit)and( x2 > obs_limit)and(state == 1)):
   x1 = 0
   x2 = 0
   stop()
   time.sleep(1)
   state = 2
   controlEnable()
   turnRight_degree(10,90)
   forward_mm(10, 100)
   turnRight_degree(10,90)
 if(( x1 > obs_limit)and( x2 > obs_limit)and(state == 2)):
   x1 = 0
   x2 = 0
   stop()
   time.sleep(1)
   state = 2
   controlEnable()
   turnLeft_degree(10,90)
   forward_mm(10, 100)
   turnLeft_degree(10,90)
   state = 1
 else:
  forward(20)

Mise à jour du robot MRPi1

Une mise à jour pour le robot MRPi1 est disponible sur GitHub :

https://github.com/macerobotics/MRPi1

  • Pour mettre à jour le Firmware (version : 0.92) du robot MRPi1 :

Mise à jour firmware du microcontrôleur

  • Ensuite, mise à jour de la librairie Python  :

Puis transférer ces fichiers sur le robot avec FileZilla, puis installation  la librairie :

>> cd /home/pi/Desktop/MR_Projects/
>> sudo python setup.py install

Les nouvelles fonctions disponibles :

  • Lecture de la position du robot :
    • robotPositionX()
    • robotPositionY()

Retourne une valeur en millimètre.

De plus, le déplacement du robot à été améliorer avec les fonctions : forward(), back(), turnLeft(), turnRight().

Pour vérifier la version du  firmware avec Python :

>> firmwareVersion()
0.92

Utiliser un timer

Ce tutoriel présente l’utilisation d’un timer avec la carte Esus. La fréquence du microcontrôleur ESP8266 est de 80Mhz soit 12.5ns le cycle processeur.

TSD-free -zone-starts by netalloy

Exemple n°1

L’exemple n°1 permet de faire clignoter une led toute les secondes. La led est câble sur la sortie IO2 de la carte Esus.

#include <esusBoard.h>

// (80Mhz frequence ESP8266) 1 cycle = 12.5ns => 1seconde/12.5ns = 80000000 
const int timer_period=80000000;

void setup() 
{
  initEsusBoard();

  // sortie 2 pour la led
  pinMode(2, OUTPUT);

  noInterrupts();
 
  // initialisation timer 0 avec interruption
  timer0_isr_init();

  // spécifie la fonction à appeler lorsqu'une interruption du timer survient  
  timer0_attachInterrupt(handler);

  // période du timer
  timer0_write(ESP.getCycleCount() + timer_period); 
  interrupts();

}

void loop()
{

}

void handler(void)
{
 timer0_write(ESP.getCycleCount() + timer_period);

 // toggle sortie 2
 digitalWrite(2, !digitalRead(2));
 
}

Exemple n°2

L’exemple n°2 permet de faire clignoter une led toute les 5 secondes. La led est câblé sur la sortie IO2 de la carte Esus.

#include <esusBoard.h>

// (80Mhz frequence ESP8266) 1 cycle = 12.5ns => 1seconde/12.5ns = 80000000 
const int timer_period=80000000;

void setup() 
{
  initEsusBoard();

  // sortie 2 pour la led
  pinMode(2, OUTPUT);

  noInterrupts();
  timer0_isr_init();
  timer0_attachInterrupt(handler);

  timer0_write(ESP.getCycleCount() + timer_period); 
  interrupts();

}

void loop()
{

}

void handler(void)
{
 timer0_write(ESP.getCycleCount() + timer_period);

 // toggle sortie 2
 digitalWrite(2, !digitalRead(2));
 
}

Utiliser un capteur ultrason HC-SR04

Ce tutoriel présente l’utilisation du capteur HC-SR04 avec la carte Esus.

image_hc-sr04

Carte Esus + HC-SR04

Le câblage

Les caractéristiques techniques du capteur  HC-SR04  sont les suivantes :

  • Alimentation +5V
  • Consommation : 15 mA
  • Gamme de distance : 2 cm à 4 m.
  • Sortie : TTL

Pins du capteur:

  • VCC => sur + 5V de la carte Esus
  • Trig => sur IO2
  • Echo => sur IO3
  • GND => GND

Voici le schéma de câblage :

 

cablage_hc_sr04_v2Le capteur ultrason HC-SR04 fonctionne par l’envoi d’une impulsion sur la pin ‘Trig‘, puis un signal impulsionnelle est retourné sur la pin ‘Echo’ en fonction de la distance d’un obstacle. La durée de cette impulsion représente la distance de l’obstacle.

Distance en cm = ( durée de l’impulsion ‘Echo’ en µs ) / 58

signal_ultrason

Le programme en Arduino

#include <esusBoard.h>

// pins 
#define trig_pin 2
#define echo_pin 3

void setup() 
{
 // init de la carte Esus
 initEsusBoard();

 // init liaison serie
 Serial.begin (9600);
 
 // init pin trig en sortie
 pinMode(trig_pin, OUTPUT);

 // init pin echo en entrer
 pinMode(echo_pin, INPUT);

 // init pin trig à l'état bas
 digitalWrite(trig_pin, LOW);

}

void loop() 
{  
long durer;
long distanceCm;  

  // mise à l'état haut de la pin trig
  digitalWrite(trig_pin, HIGH);
  
  // pause de 10µs
  delayMicroseconds(10);

  // mise à l'état bas de la pin trig
  digitalWrite(trig_pin, LOW);
  
  // mesure de la durée du niveau haut du signal echo
  durer = pulseIn(echo_pin, HIGH);
  
  // conversion de la durer en cm
  distanceCm = (durer/58);  

  // envoi sur le port série de la distance
  Serial.print("distance= "); 
  Serial.print(distanceCm);  
  Serial.println("cm"); 
 
  // pause 1 seconde
  delay(1000);
}

Le résultat

result_ultrason

Attention, pendant le téléchargement la pin IO3 doit être débrancher du capteur, car le téléchargement à besoin de cette pin (RX/IO3).

Fin du tuto !