Pages

Affichage des articles dont le libellé est Serial. Afficher tous les articles
Affichage des articles dont le libellé est Serial. Afficher tous les articles

mardi 26 novembre 2019

Création d'un télémètre simple avec Blockly-Arduino

En préambule, si vous n'avez pas Blockly-Arduino, vous pouvez le télécharger ici : https://github.com/technologiescollege/arduino .

Décompresser l'archive téléchargée et exécuter le fichier entouré :

Une fois l'IDE Arduino ouvert, suivre cette procédure compliquée :

C'est fait, vous avez ouvert Blockly !

Choisir la bonne carte ici :

Dans notre article, on travaille sur une UNO...

Blockly nous offre la possibilité de personnaliser les blocs afin de ne pas surcharger l'affichage. Il suffit de cliquer sur "Configurer les blocs". L'écran suivant apparait et on choisi les bonnes rubriques. Attention !!!! Arduino n'est pas sélectionné par défaut, il faut aussi le cocher ! 


Maintenant, cette vidéo va montrer un usage de Blockly afin de réaliser un télémètre sur console série :
 

Pas trop compliqué n'est-ce pas ? Nous sommes toujours dans l'esprit Scratch, Mblock, Ardublock....

Nous venons de passer une étape : la réalisation du croquis de cet article.
Qu'allons-nous en faire ?

 →On va simuler le programme dans Tinkercad ! Pour ceux qui ne savent pas ou plus réaliser un circuit sur cette plateforme, retourner voir cet article

Regarder cette vidéo et reproduire le circuit :

Vous allez obtenir ceci :
Bon..... et là ? 
Sélectionner le croquis ainsi :

Et le copier dans Tinkercad pour voir la magie faire son effet :

Voilà comment passer de Blockly à Tinkercad Circuit simplement....

dimanche 3 novembre 2019

Utilisation du lecteur RFID RDM6300

Cet article va présenter le lecteur RFID RDM6300. Les billets le concernant sont pléthoriques, je sais, mais bon, j'en refais un, à ma façon...

Schéma de câblage du test :
Le lecteur est alimenté entre 0 et 5V et le TX du module est sur la broche D2 de la UNO.

Fonctionnement de ce lecteur de badge :

Ce lecteur lit les badges 125 kHz et exclusivement ce type de badges.


Ces badges comportent 14 blocs de données sous forme d'un octet par bloc. Je ne rentre pas dans le détail des blocs dans cet article....

Pour faire simple, l'octet de départ est 0x02 qui donne STX en ASCII et l'octet de fin vaut 0x03 soit ETX.
Les 12 autres octets sont des caractères hexadécimaux entre 0 et F codés en ASCII.
Exemple d'une trame :


Vu la simplicité de la trame, il suffit simplement de lire les données sur le port série et hop, on a le badge !
En fait, pas si simple.....
Si vous faites cela, vous risquez d'obtenir des résultats bizarres, des rebonds, comme pour un bouton poussoir.
Exemple :

Ces trames sont obtenues en laissant un bref instant le badge au dessus de l'antenne. A peine une demie-seconde. Oui, le lecteur croit que le badge est toujours présent... Donc pas simple si on veut obtenir une belle chaîne en sortie et surtout faire de l'identification...c'est le but !

Passons au programme principal : Je ne pense pas que sois obligé de tout réexpliquer, les commentaires doivent être suffisants....



//nécessaire pour ouvrir un port série logiciel
#include <SoftwareSerial.h> 

SoftwareSerial RFID(2,3);//déclaration du port série logiciel

/*tag bleu :  180026AA52C6
tag rouge : 01001BCEC81C
tag jaune : 0000A38D5678*/

char caractere=0;//variable contenant un caractère
//variable contenant la chaine de lecture du badge présenté
String chaine_badge = "";
//variable drapeau correspondantes aux états des badges
boolean tag=false,etat_bleu=false,etat_rouge=false,etat_jaune=false;
//variables d'identification des badges
String bleu="180026AA52C6",rouge="01001BCEC81C",jaune="0000A38D5678";

void setup() 
{
RFID.begin(9600);//démarrage du port logiciel
Serial.begin(9600);//démarrage du port série
pinMode(13,OUTPUT);//broche 13 en sortie
}

void loop() 
{
    digitalWrite(130);
    chaine_badge = "";//on vide la chaine de réception
    Serial.println("attente badge");
    //si des données sont présentes sur le port logiciel...alors...
    if (RFID.available())
    {
      for (int count = 0; count < 14; count++)
      {//on boucle 14 fois car il y a 14 caractères
        //la variable caractère prend l'octet présent sur le port série
        caractere=RFID.read();
        //concaténation de la chaine et du caractère
        chaine_badge = String(chaine_badge) + caractere;
      }
    /*on ferme le port logiciel pour éviter 
    les rebonds et les fausses informations*/
    RFID.end();
    delay(50);
    tag=true;//un badge a été présenté et lu
    }

    if(tag==true)//si un badge a été présenté et lu...alors...
    {
    Serial.println("tag reçu !!!!!");
    digitalWrite(131);//on allume la LED
    //on affiche la chaine sur le port série
    Serial.println(chaine_badge);
    /*on appelle un sous programme
    qui va vérifier le badge et son état*/
    test();
    delay(5000);
    digitalWrite(130);//on éteint la LED
    }
    tag=false;//on remet l'état du badge à faux
    RFID.listen();//on écoute à npuveau le port série
    delay(100);//petite attente de sécurité
}

Ici, l'astuce pour éviter les fausses informations est l'utilisation de  la commande "RFID.end()". Celle-ci ferme le port série, ainsi, il n'y a plus de données parasites à traiter 👍
Bien entendu, il existe d'autre solutions mais je trouve celle-ci très efficace et facile à mettre en œuvre.

Maintenant, la partie test et identification :

void test()
{
    //extraction de la partie intéressante de la chaîne
    //on retire le stx et le etx
    String chaine_test=chaine_badge.substring(113);
    if(chaine_test==bleu)
    {
        Serial.println("bleu !!!!!!");
        //on regarde l'état antérieur du badge mais inversé
        if(!etat_bleu)Serial.println("bleu sorti");
        else Serial.println("bleu rentré");
        etat_bleu=!etat_bleu;//on change l'état du badge
        return;
    }
    else if(chaine_test==rouge)
    {
        Serial.println("rouge !!!!!!");
        if(!etat_rouge)Serial.println("rouge sorti");
        else Serial.println("rouge rentré");
        etat_rouge=!etat_rouge;
        return;
    }
    else if(chaine_test==jaune)
    {
        Serial.println("jaune !!!!!!");
        if(!etat_jaune)Serial.println("jaune sorti");
        else Serial.println("jaune rentré");
        etat_jaune=!etat_jaune;
        return;
    }
    else Serial.println("rien ................");
}

note : désolé pour les sauts de lignes, c'est le copier-coller de VScode qui veut cela....😕 mais sinon, c'est joli....😁

Je vous laisse tester et me contacter au cas où...

La prochaine fois, on complétera par une sauvegarde en EEPROM et un affichage sur écran OLED !


vendredi 5 avril 2019

Créer une application Android sans App Inventor 2 ni Android Studio

J'ai déjà présenté quelques possibilités de AppInventor 2, qui permet de créer des applications Android sans ligne de code.

Sachez qu'il est possible, avec Processing et le mode Android de créer également des applications. Certes, cela est plus difficile, mais pas insurmontable.

Ci-dessous, une application qui reçoit en Bluetooth des valeurs (température et humidité) envoyées par une Arduino (et un DHT11).



Je sais, il y a un travail de mise en page....


Sélection du mode Android :

Si le mode n'est pas installé, il suffit de l'ajouter. Je conseille également d'installer la librairie Ketai qui facilite grandement les choses...

Installation du mode :



Installation de la librairie :




Prochain article : le programme !

A suivre.......



vendredi 30 mars 2018

Créer un bouton et allumer une DEL avec un écran Nextion

Ce troisième article va monter comment on peut envoyer une commande vers une Arduino (ou autre) et lancer une action. Ici, on allumera (et éteindra) une DEL avec un bouton.


1) Placer le bouton :


Ci-dessous, les principales propriétés du bouton (les autres seront vues dans un autre article) :



On peut maintenant le déplacer et changer le texte :

Sur cet écran, on voit bien les identifiants de chaque composant (en jaune et noir)


A présent, on va choisir l'événement et on demande à voir l'identifiant de l'événement (et sa cause) :



Pourquoi faire cela ?

On va détecter le relâchement du  bouton et le Nextion va envoyer sur le port série une chaine de caractère. Cela se voit en faisant une simulation dans l'écran de debug :


Cliquer sur le bouton et observer les codes qui apparaissent dans la zone "Simulation return" :

Chaque ligne correspond à un relâchement du bouton.

Comment lire la ligne ? Une image vaut mieux qu'un long discourt :


Il faut donc maintenant prévoir un programme qui va être capable de lire cette chaîne, de la décoder et de l'interpréter....

Le voici :



Téléverser le programme sur la carte, et magie, la DEL s'allume et s'éteint avec un seul bouton !






mardi 27 février 2018

Commande de led "Neopixel" via AI2

Dans ce petit article, on va voir comment commander une matrice de led Neopixel (WS2812) à partir d'une appli AI2 et en utilisant la fonction Serial.parseInt().


Montage utilisé : 
Attention, la broche TX du module Bluetooth doit être déconnectée de l'Arduino pendant le téléversement du programme !!!!

L'application correspondante :

Mode opératoire : on appui sur le bouton correspondant à la led choisie, on règle les couleurs et on appuie sur "Envoyer !"

Fonctionnement basique de la commande Serial.parseInt() :



Le reste du programme est assez commenté pour comprendre le mécanisme...





Le résultat !