Émission de données (RTC)/Réception et affichage des données : Différence entre versions
(→Etape 2 : tester l’horloge RTC avec la carte Arduino) |
(→Etape 2 : tester l’horloge RTC avec la carte Arduino) |
||
Ligne 71 : | Ligne 71 : | ||
On a donc besoin de 4 fils (mêmes branchements que pour l’afficheur LCD): | On a donc besoin de 4 fils (mêmes branchements que pour l’afficheur LCD): | ||
− | GND RTC => GND Arduino | + | *GND RTC => GND Arduino |
− | VCC RTC => +5V Arduino | + | *VCC RTC => +5V Arduino |
− | SDA RTC => pin analogique A4 Arduino | + | *SDA RTC => pin analogique A4 Arduino |
− | SCL RTC => pin analogique A5 Arduino | + | *SCL RTC => pin analogique A5 Arduino |
Une fois le montage réalisé, sur le programme Arduino nous pouvons donc ajouter ce code (les commentaires sont écris en gris et le code en noir). Il faut aussi télécharger la librairie RTClib, disponible sur le github : | Une fois le montage réalisé, sur le programme Arduino nous pouvons donc ajouter ce code (les commentaires sont écris en gris et le code en noir). Il faut aussi télécharger la librairie RTClib, disponible sur le github : |
Version du 18 juillet 2017 à 08:52
Tout d'abord nous allons mettre en œuvre le breakout Tiny RTC et un afficheur LCD avec une liaison I2C, puis dans un second temps nous allons mettre en œuvre le bus CAN en deux arduinos Uno.le breakout Tiny RTC sera branché sur le premier arduino Uno, l'afficheur RTC sera branché sur un second arduino Uno qui pourra afficher les données émises par le RTC.
Sommaire
Présentation et objectifs
Le but de ce tutoriel est de tester le fonctionnement de l’horloge RTC sur l’écran LCD à l’aide d’une carte Arduino UNO. La manipulation permet de faire communiquer l’horloge avec l’écran LCD afin que ce dernier affiche l’heure et la date. Ce tutoriel nécessite une connaissance minimale de la plateforme Arduino. La page Formation Arduino du wiki contient toutes les ressources nécessaires pour découvrir la programmation avec Arduino.
Le montage utilise donc :
- une carte Arduino UNO
- une horloge RTC avec module i2c
- un écran LCD avec module i2c
- des fils de liaison
- une breadboard
- un câble d’alimentation USB
Etape 1 : tester l’écran LCD avec la carte Arduino
On souhaite réaliser un code pour afficher un texte sur notre écran LCD branché à notre carte Arduino UNO afin de tester l’écran.
On a donc besoin de 4 fils :
- GND LCD => GND Arduino
- VCC LCD => 5V Arduino
- SDA LCD => pin analogique A4 Arduino
- SCL LCD => pin analogique A5 Arduino
Une fois le montage réalisé, sur le programme Arduino nous pouvons donc ajouter ce code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // pour télécharger la librairie: croquis - include library - manage libraries - LiquidCrystal_I2C.h de Frank de Brabander
LiquidCrystal_I2C lcd(0x27,16,2); //écran LCD 0x27 avec 16 colonnes et 2 lignes (ligne 0 et ligne 1)
void setup()
{
lcd.init(); //initialisation de l'écran LCD
lcd.cursor_on();
lcd.blink_on();
lcd.backlight();
lcd.setCursor(5,0); // écriture du texte sur la ligne 1 colonne 5 (centré)
lcd.print("Hello!"); // texte "hello" sur ligne 1 colonne 5
lcd.setCursor(7,1); // écriture du texte sur la ligne 2 colonne 7 (centré)
lcd.print("ok"); // texte "ok" sur ligne 2 colonne 7
delay(1000);
lcd.cursor_off();
lcd.blink_off();
}
void loop()
{
}
Une fois la compilation et le téléversement du code réalisé vers la carte arduino, les textes s’affichent sur l’écran LCD. Pour notre exemple, on obtient :
Le texte affiché sur l’écran peut être modifié et les effets également comme le défilement du texte par exemple. Ne pas hésiter à regarder les exemples proposés par la librairie LiquidCristal_I2C pour faire évoluer le code. Notre écran LCD avec un module i2c fonctionne donc correctement. Nous pouvons tester maintenant notre second appareil : l’horloge RTC avec module i2c.
Etape 2 : tester l’horloge RTC avec la carte Arduino
On souhaite réaliser un code pour afficher l’heure et la date sur notre ordinateur à partir d’une horloge RTC avec module i2c branchée à notre carte Arduino UNO. Notre modèle de RTC est la DS1307.
On a donc besoin de 4 fils (mêmes branchements que pour l’afficheur LCD):
- GND RTC => GND Arduino
- VCC RTC => +5V Arduino
- SDA RTC => pin analogique A4 Arduino
- SCL RTC => pin analogique A5 Arduino
Une fois le montage réalisé, sur le programme Arduino nous pouvons donc ajouter ce code (les commentaires sont écris en gris et le code en noir). Il faut aussi télécharger la librairie RTClib, disponible sur le github :
Etape 2 : Programmation de l'émetteur
Sur l'Arduino émetteur téléverser le programme ci-après. Ce programme va envoyer sans cesse un message standard contenant les données "0, 1, 2, 3, 4, 5, 6, 7" avec l'identifiant 0.
/*
Ce programme envoie un tableau de donnée sur le bus CAN
*/
#include <mcp_can.h>
#include <SPI.h>
const int SPI_CS_PIN = 10;
MCP_CAN CAN(SPI_CS_PIN);
void setup()
{
Serial.begin(115200);
START_INIT:
if(CAN_OK == CAN.begin(CAN_500KBPS)) // init can bus : baudrate = 500k
{
Serial.println("Initialisation du CAN BUS Shield ok!");
}
else
{
Serial.println("Initialisation du CAN BUS Shield en echec");
Serial.println("Réinitialisation CAN BUS Shield");
delay(100);
goto START_INIT;
}
}
unsigned char stmp[8] = {0, 1, 2, 3, 4, 5, 6, 7};
void loop()
{
// send data: id = 0x00, standard frame, data len = 8, stmp: data buf
CAN.sendMsgBuf(0x00, 0, 8, stmp);
delay(100);
}
Etape 3 : programmation du récepteur
Sur l'Arduino récepteur téléverser le programme suivant :
/*
Ce programme reçois les messages transmis sur le bus CAN et les affiches sur la console série.
*/
#include <SPI.h>
#include <mcp_can.h>
const int SPI_CS_PIN = 10;
MCP_CAN CAN(SPI_CS_PIN);
void setup()
{
Serial.begin(115200);
START_INIT:
if(CAN_OK == CAN.begin(CAN_500KBPS)) // init can bus : baudrate = 500k
{
Serial.println("Initialisation du CAN BUS Shield ok!");
}
else
{
Serial.println("Initialisation du CAN BUS Shield en echec");
Serial.println("Réinitialisation CAN BUS Shield");
delay(100);
goto START_INIT;
}
}
void loop()
{
unsigned char len = 0;
unsigned char buf[8];
if(CAN_MSGAVAIL == CAN.checkReceive()) // vérifie l'arrivée d'un message
{
CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data buf
unsigned char canId = CAN.getCanId();
Serial.println("-----------------------------");
Serial.println("get data from ID: ");
Serial.println(canId);
for(int i = 0; i<len; i++) // affiche les données
{
Serial.print(buf[i]);
Serial.print("\t");
}
Serial.println();
}
}
Etape 4 : essai de la communication
Brancher les deux Arduinos. Ouvrez la console série du récepteur et vérifier que les données émises sont bien reçues :
Conseils
Si jamais vous n'arrivez pas à recevoir vos données, essayez de baisser la vitesse sur l'émetteur et le récepteur. Si jamais vous n'avez pas de résistances de 120 Ohms, la communication devrait quand-même fonctionner pour des vitesses inférieures à 40Kbit/s.
Pour aller plus loin
Si vous disposez d'un cable DB-9 Droit, vous pouvez remplacer les straps par ce câble. D'après nos premiers essais, il semblerait que le cablage de la prise sur le shield de Sparkfun soit différent du standard. Les différents signaux sont câblés comme suit :
- CAN_L : 5
- CAN_H : 3
- GND : 2
alors que le câblage standard est le suivant :
- CAN_L : 2
- CAN_H : 7
- GND : 3