top of page

codAGE

Code pour le déplacement du robot:

Ce code permet au robot de suivre une ligne blanche sur fond noir, de démarrer une fois que la bonne carte a été reconnue par le module RFID et de s'arrêter dès que le robot rencontre un obstacle.  

//================================================

//Déclaration moteurs:

//================================================

int ena = 7; //vitesse

int in1 = 6; //polarité donc sens de rotation

int in2 = 5; //idem que in1

 

int enb = 2;

int in3 = 4;

int in4 = 3;

int distance1;

//================================================

//Déclaration Infra-Rouge:

//================================================

int IR_Gauche = A0;

int IR_Droite = A1;

const int ir1 = A0;

const int ir2 = A1;

int ir1Va1 = analogRead( ir1 );

int ir2Va1 = analogRead( ir2 );

 

 

//================================================

//Déclaration capteurs à Ultrason:

//================================================

#define trigPin_Avant 10

#define echoPin_Avant 11

 

//================================================

//Déclaration du module RFID:

//================================================

#include <SPI.h>

#include <MFRC522.h>

 

#define SS_PIN 53

#define RST_PIN 16

 

MFRC522 module_rfid(SS_PIN, RST_PIN);

 

 

void avant() {                    //==>avancer tout droit

  digitalWrite (in1, LOW );

  digitalWrite (in2, HIGH);

  digitalWrite (in3, LOW);

  digitalWrite (in4, HIGH);                            

  analogWrite (ena, 85);

  analogWrite (enb, 85);

}

 

void droite() {                   //==>tourne à droite

  digitalWrite (in1, LOW );

  digitalWrite (in2, HIGH);

  digitalWrite (in3, LOW);

  digitalWrite (in4, LOW);  

  analogWrite (ena, 95);                                                 

  analogWrite (enb, 50);

}

 

void gauche() {                   //==>tourne à gauche

  digitalWrite (in1, LOW );

  digitalWrite (in2, LOW);

  digitalWrite (in3, LOW);

  digitalWrite (in4, HIGH);  

  analogWrite (ena, 50);                                                 

  analogWrite (enb, 95);

}

 

void arret() {                     //==>arrêt

  digitalWrite (in1, LOW );

  digitalWrite (in2, LOW);

  digitalWrite (in3, LOW);

  digitalWrite (in4, LOW);  

  analogWrite (ena, 0);

  analogWrite (enb, 0);

}

 

 

 

 

  

void setup() {

  Serial.begin(9600);

  pinMode (ena, OUTPUT);           //déclaration des moteurs en tant que sorties car ils recevront un message de l'arduino

  pinMode (enb, OUTPUT);

  pinMode (in1, OUTPUT);

  pinMode (in2, OUTPUT);

  pinMode (in3, OUTPUT);

  pinMode (in4, OUTPUT);

  pinMode (IR_Gauche, INPUT);

  pinMode (IR_Droite, INPUT);

  pinMode (trigPin_Avant, OUTPUT);

  pinMode (echoPin_Avant, INPUT);

  SPI.begin();                                  //le module RFID commence à détecter

  module_rfid.PCD_Init();             //le module RFID s'initialise

 

 

}

 

void loop() {

 

if ( ! module_rfid.PICC_IsNewCardPresent())  //check si une carte est à proximitée

  {

    return;

  }

 

  if ( ! module_rfid.PICC_ReadCardSerial())  //lis les infos de la carte

  {

    return;

  }

 

  String UID = "";

 

  for (byte i = 0; i < module_rfid.uid.size; i++) 

  {

    UID.concat(String(module_rfid.uid.uidByte[i] < 0x10 ? "O" : " "));

    UID.concat(String(module_rfid.uid.uidByte[i], HEX));

  }

 

  UID.toUpperCase();  //stock l'identifiant de la carte

  

 

long duration1, distance1;

  digitalWrite (trigPin_Avant, LOW);

  delayMicroseconds (2);

  digitalWrite (trigPin_Avant, HIGH);

  delayMicroseconds (10);

  digitalWrite (trigPin_Avant, LOW);

  duration1 = pulseIn (echoPin_Avant, HIGH);

  distance1 = duration1 *340/20000;

 

if(UID.substring(1) == "65 19 8C BB"){

  while (distance1 > 20){

 

 if(analogRead(ir1) < 100 && analogRead(ir2) < 100){

  avant();

 

 }else {   

    if(analogRead(ir1) < 100 && analogRead(ir2) > 100){

   gauche();

    

 

 }else {

    if (analogRead(ir1) > 100 && analogRead(ir2) < 100){

   droite();

    

 

 }else{

    arret();

  }

  }

 }

 digitalWrite (trigPin_Avant, LOW);

  delayMicroseconds (2);

  digitalWrite (trigPin_Avant, HIGH);

  delayMicroseconds (10);

  digitalWrite (trigPin_Avant, LOW);

 duration1 = pulseIn (echoPin_Avant, HIGH);

  distance1 = duration1 *340/20000;

 }  

 }

 arret();  

 }

Code final RFID

Code de présentation des vidéos:

Code présentation
Ce code permet de lancer automatiquement les vidéos de présentation des projets suite à la lecture d'un QR Code. Il a été codé sur Python 3.  

from pyzbar.pyzbar import decode

from ftplib import FTP

import os

import numpy as np

import cv2

import time

from picamera.array import PiRGBArray

from picamera import PiCamera

fourcc = cv2.VideoWriter_fourcc(*'X264')

 

def dec(frame):

     x=decode(frame)

     for i in x:

        (x, y, w, h) = i.rect

        cv2.rectangle(frame,(x, y),(x + w, y + h),(0, 0, 255),2)

        barcodeData = i.data.decode("utf-8")

        barcodeType = i.type

        return(barcodeData,barcodeType,1)

     return('', '', 0)

 

camera=PiCamera()

camera.resolution=(1296, 730)

camera.framerate=24

rawCapture=PiRGBArray(camera)

time.sleep(0.1)

cv2.namedWindow("Image",cv2.WND_PROP_FULLSCREEN)

cv2.setWindowProperty("Image", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)

chemin = ""

for frame in camera.capture_continuous(rawCapture,format="bgr",use_video_port=True):

    image=frame.array

    x,y,p=dec(image)

    cv2.imshow("Image",image)

    print(x)

    print(y)

    if x == "Nexus":

        chemin = "nexus_final_short.wmv"

    elif x == "In'ovni":

        chemin = "purificateur_air_final.wmv"

    print(chemin)

    if x !="":

        vid = cv2.VideoCapture("/home/pi/Desktop/NEXUS+/"+chemin)

        if (vid.isOpened()== False): 

          print("Error opening video stream or file")

        while(vid.isOpened()):

          ret, frame = vid.read()

          if ret == True:

            cv2.namedWindow("window2", cv2.WND_PROP_FULLSCREEN)

            cv2.setWindowProperty("window2", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)

            cv2.imshow('window2',frame)

            if cv2.waitKey(25) & 0xFF == ord('q'):

              break

          else

            break

        vid.release()

        cv2.destroyWindow('window2')

                

 

    if cv2.waitKey(2) & 0xFF == ord('q'):

                break

    rawCapture.truncate(0)

 

cv2.destroyAllWindows()

ESME Sudria Bordeaux

2019 - 2020

bottom of page