Aide Arduino uno allumer une LED infrarouges

Bonjour,

Je suis nouvelle en Arduino et sur ce forum ^^

Je viens demander un peu d'aide pour un projet étudiant, ce dernier est de faire un concours de robot entre promotion. Mon objectif personnel est de crée une balise (ou phare) infrarouge qui envoie un signal codée en ASCII (un nombre entre 0 et 9). J'ai réussi a faire "clignoter" la LED (vérifier avec un oscilloscope) mais avec des délais ce qui, je pense n'est pas le mieux.
Mon idée était d'utiliser les tableau (comme en C) où quand un 1 est détecter une impulsion est envoyer durant une oscillation(de base l'horloge est de 38kHz) donc environ 0.0000263 secondes (1/38 000). Mais je n'arrive pas a envoyer une impulsion ni a utiliser (si possible) un autre moyen que les délais.
Je précise que j'utilise une carte crée par nos soin utilisant un Atmega328p donc comme l'arduino uno(programmé comme un uno).

Je met le début de mon code si jamais: ^^

const byte portLED = 9;

void setup() {
  pinMode(portLED, OUTPUT);
  Serial.begin(9600);

}

void loop() {
  
  tone(portLED, 38000);
  delay(10);
  Serial.println("Top");//ecrit ds console
  noTone(portLED);
  delay(90);
  
}

Merci de votre aide
Julie

Vous avez regardé ce genre de librairie : IRLib2 ou la Librairie IRremote pour Arduino (cette seconde est souvent utilisée)

Bonjour,

J'ai regarder ces librairies mais ces dernières sont conçu pour les led IR pour contrôler des TV ou enceintes...
Y a t-il un moyen de changer cela?

Merci
Julie

euh... vous dites dans votre premier post

Mon objectif personnel est de crée une balise (ou phare) infrarouge

Une émetteur IR et un récepteur IR permet de faire un circuit émission/réception

--> de quel matériel disposez vous ?

Bonjour

J'utilise un émetteur IR, je ne m'occupe pas de la réception.
J'ai du mal m'exprimer, avec les librairies que vous m'avez partager je ne vois pas comment je peut modifier pour passer d'un émetteur pour Samsung ou LG a une balise "standard/sans marque". ::slight_smile:

merci

Bonjour,

C'est quoi une balise standard?
Soi tu fais ton protocole toi même soit tu utilises un protocole déjà existant et en ce cas pourquoi pas Samsung ou LG?

Si vous regardez la librairie IRLib2 ci dessus on peut faire des trucs à bas niveau.. mais si vous ne vous mettez pas d'accord avec celui qui reçoit, c'est comme si vous parliez chinois à un breton... généralement ça va pas le faire :slight_smile:

Bonjour,

Ce que j’appelle une balise standard est celle qui de base n'est pas destinée a une marque en particulier(je met le schéma de la carte).
je vais regarder la librairie IRLib2 un petit peu alors si on peux envoyer des impulsion :stuck_out_tongue:

Merci je reviens vers vous pour donner mon avancement.
Julie

Ton schéma, ce n'est pas un émetteur infra rouge, mais un récepteur infra rouge avec une porteuse 38kHz.

D'après ton premier message tu sembles croire que 38kHz c'est la vitesse de transmission et qu'il y a un bit transmis tout les 1/38000ème de seconde.
38kHz c'est la fréquence de la porteuse (qui est éliminé par un filtre incorporé dans le circuit de réception) et la vitesse de transmission est beaucoup plus faible.
Voir par exemple le codage RC5

Bonjour,

Oui, je vous aient transmis le schéma du récepteur, l’émetteur étant une LED (ce qui est banal).

J'ai regarder un peu le doc de IRLib mais je ne comprend toujours pas comment arriver a mes fins :confused:
J'ai également regarder le site que vous m'avez transmis en rapport avec la fréquence et dans ce dernier ils multiplie par 32 la périodes, mais pourquoi 32 ?. De plus comment je peut crée en arduino les 1 et les 0 (comme indiquer avec les chronogramme du site) ?

Merci de votre aide
Julie

regardez l'exemple rawSend.ino

ça balance une trame. à vous de dire "cette trame vaut 1" ou "cette trame vaut 0" et définir ce que vous mettez dans la trame

Bonjour,

J'ai regarder attentivement l'exemple je comprend la boucle setup mais pas le loop, en effet je ne vois pas où je dit que c'est a 1 et a 0 et comment je dis ce qui se trouve dedans :confused:

Merci de votre aide
Julie

comme dit plus haut vous devez définir une trame pour 0 et une trame pour 1. pour le dire autrement vous envoyez "coucou" ça veut dire 0 et si vous envoyez "salut" ça veut dire 1

dans l'exemple ils font référence au sketch "rawRecv.ino" qui permet de capture un signal quelconque pour un protocole inconnu

prenez la télécommande du salon, appuyez sur le 0 - ça génère une trame. notez là. idem en appuyant sur 1.
voilà vous avez défini vos 2 trames.

il ne vous reste plus qu'à émettre la bonne trame au bon moment.

Bonjour,

Comment je définis ma trame? Si j'ai bien compris on définis les 1 et les 0 et ensuite on les appelle les uns a la suites des autres pour crée le caractère ASCII comme je souhaite. Mais comment (concrètement) je définis les 1 et les 0?

Merci de votre aide
Julie

Vous faites un tableau uint16_t rawDataZERO[RAW_DATA_LEN]={...} et idem pour rawDataUN en définissant un contenu différent. Quand vous voulez émettre un 1 vous balancez rawDataUN et pour un zéro rawDataZERO

J'ai une erreur quand j'essaye de compiler le programme :confused: , il est écrit que je n'ai pas les librairies sauf que j'ai bien installer ces dernières.

De plus j'ai définis le tableau 0 avec un code ASCII et le 1 avec un 0 (qui n'envoie rien) mais je ne suis pas sûr de ce que j'ai fait ....
Je met le code si jamais

#include <IRLibSendBase.h>    //We need the base code
#include <IRLib_HashRaw.h>    //Only use raw sender

IRsendRaw mySender;

void setup() {
  Serial.begin(9600);
  delay(2000); while (!Serial); //delay for Leonardo
  Serial.println(F("Every time you press a key is a serial monitor we will send."));
}
/* Cut and paste the output from "rawRecv.ino" below here. It will 
 * consist of a #define RAW_DATA_LEN statement and an array definition
 * beginning with "uint16_t rawData[RAW_DATA_LEN]= {…" and concludes
 * with "…,1000};"
 */

uint16_t rawDataZERO[RAW_DATA_LEN]={0,1,1,0,1,0,0}
uint16_t rawDataONE[RAW_DATA_LEN]={0}

   
void loop() {
  if (Serial.read() != -1) {
    //send a code every time a character is received from the 
    // serial port. You could modify this sketch to send when you
    // push a button connected to an digital input pin.
    mySender.send(rawData,RAW_DATA_LEN,36);//Pass the buffer,length, optionally frequency
    Serial.println(F("Sent signal."));
  }
}

Merci encore de votre aide