Posto Libero (Table connectée) : Différence entre versions
(→Communication sans-fil entre Arduino et Raspberry Pi) |
(→Communication sans-fil entre Arduino et Raspberry Pi) |
||
Ligne 238 : | Ligne 238 : | ||
Pour détecter la présence d'une personne nous avons connecté la présence de detecteur avec le Arduino. Le LED connectée à l'unité Arduino a été programmé de manière telle qui avec la présence d'une personne devant le detecteur, il donne le signale d'occupé en les éclairant de rouge, au contraire quand la place est libre il sera éclairé de vert. | Pour détecter la présence d'une personne nous avons connecté la présence de detecteur avec le Arduino. Le LED connectée à l'unité Arduino a été programmé de manière telle qui avec la présence d'une personne devant le detecteur, il donne le signale d'occupé en les éclairant de rouge, au contraire quand la place est libre il sera éclairé de vert. | ||
− | Ces renseignements viennent envoyées par l'unité sans fils Xbee, de l'émetteur sur l'Arduino au | + | Ces renseignements viennent envoyées par l'unité sans fils Xbee, de l'émetteur sur l'Arduino au récepteur sur le Rasperry Pi. |
Version du 10 janvier 2017 à 10:41
Sommaire
Le concept "Posto Libero" - Cahier des charges
Description du projet
Dans le cadre du module transversal Internet des Objets (IOT), nous avons choisi de réaliser une table connectée.
Cette table a pour but de faciliter la recherche de place libre (d'où le nom "Posto Libero") dans un lieu tel que un restaurant universitaire, une cafétéria ou une bibliothèque.
Pour cela, nous devrons mettre en place un dispositif capable de :
- Détecter la présence d'une personne assise
- En récupérant la distance entre une entité et la table
- En faisant la différence entre une chaise et une personne
- Mettre en évidence le nombre de places disponibles pour une table
- En projetant le nombre de places disponibles au plafond
- En changeant la couleur d'une LED au niveau du capteur
- En répertoriant les places en temps réel sur une application ou un site internet
Pour mieux montrer notre idée, nous avons fait un dessin.
Notre idée est de mettre un capteur sur chaque bord de la table. Ces capteurs permettent de détecter la présence de la personne. Les capteurs sont liés avec un arduino au milieu de la table par des câbles. L'arduino récupère des informations des capteurs. L'arduino est ensemble avec un XBee et à la distance nous avons un Raspberry Pi avec un autre XBee. Ces deux XBee réalisent une communication sans fil. Quand le Raspberry Pi reçoit des données il va les envoyer au serveur par réseau Internet. Sur la page html nous pouvons voir les places libres.
Choix techniques
Matériel
Nous aurons besoin :
- 4x Capteur à infrarouge pour détecter une entité
- Passive Infrared Proximity Motion Sensor (1x 03/01/2017) Datasheet
- Serial 7 Segment display (1x 10/01/2017) Datasheet
Logiciel
- Arduino IDE pour coder sur l'arduino
- Raspbian pour héberger le serveur de centralisation
- Solidworks pour modéliser et fabriquer nos modules
Table de suivi
Date de la séance | Travaux réalisés |
---|---|
03/01/2017 | Recherche du sujet, définition du cahier des charges |
05/01/2017 | Définition des objectifs, allumer une LED RGB sur arduino, détecter un mouvement |
10/01/2017 | Raspberry configuré, installation serveur apache, communication Zigbee 172.26.78.119 |
Avancement du projet
Travaux | Avancement | Commentaires |
---|---|---|
Prise en main Arduino : Allumer une LED RGB | Terminé | Être capable d'allumer la LED de la couleur que l'on souhaite |
Détecter une personne via Arduino | Terminé | Être capable d'allumer la LED de différentes couleurs en fonction du capteur de présence |
Configurer Raspbian sur Raspberry Pi | En cours | (à écrire dans wiki : ajout dans config.txt car bordel d'UART avec rpi3) |
Communication sans-fil entre Arduino et Raspberry Pi | En cours | Établir un programme capable de communiquer des valeurs entre les deux périphériques |
Mise en place d'un serveur web sur Raspberry Pi | Non débuté | Créer un serveur web accessible de n'importe où |
Création d'une page php/html | Non débuté | Créer une page web capable d'afficher toutes les valeurs sur le site internet |
Programme principal sur Arduino | Non débuté | Envoie les valeurs des capteurs, action sur les actionneurs |
Programme principal sur Raspberry Pi | Non débuté | Affiche les valeurs des capteurs sur le site |
Détail des travaux réalisés
Allumer une LED RGB sur Arduino
Pour réaliser cette partie, nous avons utiliser un SparkFun RedBoard qui se compose un arduino UNO et une board. Ensuite nous avons programmé l'arduino avec le code montré.
const int RED_PIN = 9; const int GREEN_PIN = 10; const int BLUE_PIN = 11; void setup() { // Initialise le Pin comme une sortie | Initialize the digital pin as an output with pinMode() pinMode(RED_PIN, OUTPUT); pinMode(GREEN_PIN, OUTPUT); pinMode(BLUE_PIN, OUTPUT); } void loop() { digitalWrite(RED_PIN, HIGH); delay(500); digitalWrite(RED_PIN, LOW); digitalWrite(GREEN_PIN, HIGH); delay(500); digitalWrite(GREEN_PIN, LOW); digitalWrite(BLUE_PIN, HIGH); delay(500); digitalWrite(BLUE_PIN,LOW); }
Ce code nous a permit de visualiser que tous les 500ms la LED change sa couleur.
Détecter une personne via Arduino
Pour aller un peu plus loin, nous avons aussi programmé le capteur PIR. L'idée est d'allumer la LED Rouge quand PIR détecte un mouvement et d'allumer la LED Vert quand il y a rien. Voici le code
//Constantes const int RED_PIN = 9; const int GREEN_PIN = 10; const int CAPTOR_PIN = 2; int val=0; void setup() { // Initialise le Pin comme une sortie | Initialize the digital pin as an output with pinMode() pinMode(RED_PIN, OUTPUT); pinMode(GREEN_PIN, OUTPUT); pinMode(CAPTOR_PIN,INPUT); } void loop() { val = digitalRead(CAPTOR_PIN); // read input value if (val == HIGH) { // check if the input is HIGH digitalWrite(RED_PIN, HIGH); // turn red LED ON digitalWrite(GREEN_PIN, LOW); // turn green LED off }else { digitalWrite(GREEN_PIN, HIGH); // turn green on digitalWrite(RED_PIN, LOW); } }
Nous avons bien observé que la LED a changé sa couleur quand il y avait un mouvement devant le capteur.
Communication sans-fil entre Arduino et Raspberry Pi
Au niveau de cette partie nous avions besoin de deux XBee, un arduino et un FTDI. Dans un premier pas, nous avions programmer les deux XBee pour qu'ils puissent communiquer dans le même canal.
/** Constantes **/ #define SERIALDEV "/dev/ttyUSB0" #define BAUDRATE B9600 /**** Variables globales *****/ static struct termios sauvegarde; /** Ouverture d'un port serie **/ int ouvertureSerie(char *periph,int vitesse) { struct termios nouveau; int df=open(periph,O_RDWR|O_NOCTTY); if(df<0) return -1; tcgetattr(df,&sauvegarde); /* save current port settings */ bzero(&nouveau,sizeof(nouveau)); nouveau.c_cflag=CLOCAL|CREAD|vitesse|CS8; nouveau.c_iflag=0; nouveau.c_oflag=0; nouveau.c_lflag=0; nouveau.c_cc[VTIME]=0; nouveau.c_cc[VMIN]=1; tcflush(df, TCIFLUSH); tcsetattr(df,TCSANOW,&nouveau); return df; } /** Fermeture d'un port serie **/ void fermetureSerie(int df) { tcsetattr(df,TCSANOW,&sauvegarde); close(df); } /** Programme principal **/ int main(int argc, char *argv[]) { int ds; ds=ouvertureSerie(SERIALDEV,BAUDRATE); if(ds<0){ fprintf(stderr,"Erreur sur la connexion série.\n"); exit(-1); } fprintf(stdout,"Configuration actuelle :\n"); fprintf(stdout,"----------------------\n"); xbeeModeCommande(ds); xbeeRecupereVitesse(ds); xbeeRecupereCanal(ds); fprintf(stdout,"\nConfiguration par défaut :\n"); fprintf(stdout,"------------------------\n"); xbeeDefaut(ds); xbeeRecupereVitesse(ds); xbeeRecupereCanal(ds); fprintf(stdout,"\nConfiguration spécifique :\n"); fprintf(stdout,"------------------------\n"); xbeeConfigureVitesse(ds,XBEE_VITESSE_9600); xbeeConfigureCanal(ds,0x0B); xbeeRecupereVitesse(ds); xbeeRecupereCanal(ds); xbeeSauver(ds); xbeeSortir(ds); fermetureSerie(ds); return EXIT_SUCCESS; }
Ensuite nous avons mit l'un de deux XBee sur la carte Arduino Shield et afin de pouvoir permettre ce XBee de recevoir des données transmis par FTDI via SPI nous avons collé les deux cartes arduino.
Après nous pourrions voir que les deux XBee communiquent bien, un envoie des données en même temps l'autre reçoit des paquets en clignotant les LEDS.
Sur le console,
Pour détecter la présence d'une personne nous avons connecté la présence de detecteur avec le Arduino. Le LED connectée à l'unité Arduino a été programmé de manière telle qui avec la présence d'une personne devant le detecteur, il donne le signale d'occupé en les éclairant de rouge, au contraire quand la place est libre il sera éclairé de vert. Ces renseignements viennent envoyées par l'unité sans fils Xbee, de l'émetteur sur l'Arduino au récepteur sur le Rasperry Pi.