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 de présentation des vidéos:
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()