By

Transmission RF entre un Arduino et un Raspberry Pi – version 2

Présentation

Je reviens à l’attaque pour optimiser la transmission en Radio Fréquence entre un arduino (capteurs) et un Raspberry Pi (collecteur).
Un article précédent (http://www.raulet.net/WP/?p=174) présentait une version simple voir simpliste en utilisant le protocol RS232 directement sur ces petits modules RF en mode ACK. Cette méthode subie beaucoup de bruit et donne des résultats moyens dans la durée.

La librairie retenue pour ce besoin est RCSwitch, qui existe pour Arduino et Raspberry !

Câblages

Arduino

ARL-Arduino-RF-emetter-1

Schéma de l’emetteur (Arduino)

 

 

 

 

 

 

 

 

 

Raspberry Pi

Coté Raspberry Pi :

ARL-RPi-RF-receiver-1

 

Schéma de la partie Raspberry Pi :
GPIO2 / pin 13  -> DATA

 

 

 

 

GPIO du RPi :

Raspberry-Pi-GPIO-Layout-Revision-2

GPIO Raspberrry Pi (Rev 2) : brochage & fonctions

 

 

 

 

 

Programmation

Protocole de communication

Structure des paquets :

 PREFIX
3 bits
MODULE
4 bits
TYPE
4 bits
CAPTEUR
4 bits
DATA
16 bits
 111  1111  1111  1111  1111111111111111

Types :

  1. Température : en dizième de degrés kelvin
  2. Hygrométrie : en pourcent d’humidité.
  3. xxx
  4. xxx
  5. xxx
  6. xxx
  7. xxx
  8. xxx
  9. xxx

Arduino

Hello World

 

 

By

Module bluetooth série

Module

image

RS232 en TTL

By

Ecran 4.0″ LCD 16:9 pour Raspberry Pi

wpid-IMG_20140201_103851.jpgOn trouve sur eBay ou ailleurs, des écran TFT de 3 à 7 pouces. Ils sont alimentés en 12V, puisque leur usage premier est de visualiser une caméra de recul dans les voitures.

Voici les autres caractéristiques de l’écran :
Pixels : 480×272
Format video : PAL / NTSC
Nombre d’entrées video : 2
Power : 3 Watt
Dimensions : 104x80x17 (mm)
Poids : 150g

Référence chez DX.COM

wpid-IMG_20140201_103915.jpg
La connexion avec le Raspberry Pi se fait via un câble RCA. (ici un câble noir à bouts jaunes)
La sortie video analogique du Raspberry Pi fournit le signal à l’écran, sur l’entrée « AV1 ».

La configuration video du Raspberry Pi, se fait via le fichier « /boot/config.txt »

framebuffer_width=480
framebuffer_height=272
disable_overscan=1
sdtv_mode=0
overscan_left=15
overscan_right=20
overscan_top=-26
overscan_bottom=-26

Montage complet :

wpid-IMG_20140201_184853.jpg

Et voila un (petit) panneau d’affichage, pour indiquer la température et l’hygrométrie (DHT22), les prochains bus de la « star » en partance de l’arrêt à coté de la maison, la hauteur d’eau de la Vilaine au niveau du village, …

By

Lecteur RFID (RDM6300)

arduino RFID 125KHz UART
Le RDM6300 est un capteur RFID, à 125kHz, et avec un interface série (UART).
La portée de lecture RFID est de quelques centimètres.
Les paramètres de la liaison série sont : 9600 8N1
L’alimentation se fait en 5v (TTL)

RDM6300_pins
Brochages du RDM6300 :

P1 : 1-TX, 2-RX, 3-NC, 4-GND, 5-(+5V)

P2 : bobine

P3 : 1-Led, 2-(+5v), 3-GND

image

 

Exemple de montage :

le but est de pouvoir lire les ID des modules RFID qui passent à proximité.
Le module RFID est connecté à un adaptateur USB-RS232 (CP2102)

L’alimentation est assurée par le module USB (5v).
Au niveau du signal RS232, la broche « TX » du module RFID est connecté à la broche « RX » du module USB.

Il suffit ensuite de lancer un PuTTY (ou un KiTTY). Les message recu sont de ce type : « 0A00642A3C78« .

 

By

Piloter un moteur DC en PWM via un TIP122

 

TIP-122_pinouts

http://us.100y.com.tw/PNoInfo/30217.htm

 

 

 

 

 

 

TIP122_pin_layout_S

 

http://www.ecs.umass.edu/ece/m5/tutorials/tip122_transistor_tutorial.html

TIP122_transistor_schematic_S

By

Rasp & refroidissement

Un rasp avec des radiateurs

image

L’ajout de radiateurs fait baisser la température du processeur de quelques degrés pendant 1 minute, mais revient à son niveau initial (soit environ 57°C).

La tépérature du rpi est disponible ici : /sys/class/thermal/thermal_zone0/temp    (il faut juste diviser par 1000 !)

voici un script munin-node pour superviser ce paramètre :
[crayon]
. $MUNIN_LIBDIR/plugins/plugin.sh

if [ « $1 » = « autoconf » ]; then
if [ -r /sys/class/thermal/thermal_zone0/temp ];then
echo yes
exit 0
else
echo « no (missing /sys/class/thermal/thermal_zone0/temp) »
exit 0
fi
fi

if [ « $1 » = « config » ]; then
echo graph_title CPU core temperature
# echo graph_args –base 1000 -l 0
echo graph_args –lower-limit 30 –upper-limit 40
echo graph_info CPU core temperature
echo graph_category sensors

echo temp0.label Core
echo temp0.cdef temp0,1000,/
exit 0;
fi
echo temp0.value `cat /sys/class/thermal/thermal_zone0/temp`
[/crayon]
Avec une légère ventilation (vitesse 1 sur 3 d’un ventilo de 8cm et alimenté en 9v au lieu de 12v), les effets sont beaucoup plus impressionnants et durables sur la température du CPU : dans mon cas, j’ai perdu environ 15°C !!!

Température du cpu du RPI

Température du cpu du RPI

Il me reste à faire des tests en charge CPU et à ajouter de la pâte thermique

By

Arduino vers Raspberry en 433MHz

Capteur dh22 sur un arduino, transmis en radio fréquence vers un raspberry.

Le capteur arduino :

image

Le récepteur raspberry pi :

image

Transmission en rs232, à 300 bit/s.

Coté Raspberry, le programme de capture affiche les informations au fur et à mesure qu'elles arrivent :
RPI-reception-RF

Source du script "arduino2.pl"

#!/usr/bin/perl
use Device::SerialPort;
my $filename = "/dev/ttyUSB0";

my $port = Device::SerialPort->new($filename);
$port->databits(8);
$port->baudrate(300);
$port->parity("none");
$port->stopbits(1);
$port->write_settings;

if (open(my $fh, '<', $filename)) {
  while (my $row = <$fh>) {
    chomp $row;
    #print ">>>$row\n";
    if ($row =~ /(\d\d\.\d\d)<\/TEMP1>/){ print "Got temperature =>  $1 \n"; }
    if ($row =~ /(\d\d\.\d\d)<\/HYGRO1>/){ print "Got humidity =>  $1 \n"; }
  }
} else {
  warn "Could not open file '$filename' $!";
}

[/crayon]

Source du code arduino (capture du DHT22 + envoi sur l'UART donc le transmetteur RF)

[crayon]
#include 

// Data wire is plugged into port 7 on the Arduino
// Connect a 4.7K resistor between VCC and the data pin (strong pullup)
#define DHT22_PIN 7

// Setup a DHT22 instance
DHT22 myDHT22(DHT22_PIN);

void setup(void)
{
  // start serial port
  Serial.begin(300);
  Serial.println("DHT22 Library Demo");
}

void loop(void)
{
  DHT22_ERROR_t errorCode;
 
  // The sensor can only be read from every 1-2s, and requires a minimum
  // 2s warm-up after power-on.
  delay(5000);
 
  Serial.print("\n\nRequesting data...\n\n");
 
  errorCode = myDHT22.readData();
  switch(errorCode)
  {
    case DHT_ERROR_NONE:
      Serial.print("\n\n");
      Serial.print(myDHT22.getTemperatureC());
      Serial.println("");
      delay( random(800, 4500));
      Serial.print("\n\n");
      Serial.print(myDHT22.getHumidity());
      Serial.println("");
      // Alternately, with integer formatting which is clumsier but more compact to store and
      // can be compared reliably for equality:
      //      
      break;
    case DHT_ERROR_CHECKSUM:
      Serial.print("check sum error ");
      Serial.print(myDHT22.getTemperatureC());
      Serial.print("C ");
      Serial.print(myDHT22.getHumidity());
      Serial.println("%");
      break;
    case DHT_BUS_HUNG:
      Serial.println("BUS Hung ");
      break;
    case DHT_ERROR_NOT_PRESENT:
      Serial.println("Not Present ");
      break;
    case DHT_ERROR_ACK_TOO_LONG:
      Serial.println("ACK time out ");
      break;
    case DHT_ERROR_SYNC_TIMEOUT:
      Serial.println("Sync Timeout ");
      break;
    case DHT_ERROR_DATA_TIMEOUT:
      Serial.println("Data Timeout ");
      break;
    case DHT_ERROR_TOOQUICK:
      Serial.println("Polled to quick ");
      break;
  }
}
[/crayon]

By

Transmetteur & récepteur 315 MHz

Comment utiliser les modules 315MHz et 433 MHz

Les modules sont vendus sans antennesArduino RF transmiter 315MHz

Il ne faut pas trop en demander en terme de débit RS232. J’ai lu quelque part que le maximum est 2400 bauds.
Personnellement, j’utilise actuellement des vitesses RS232 de 300 bits/s en 8N1.

Pour les antennes, il semble qu’il faille utiliser un fil du quart de la longueur d’onde.

Fréquences et 1/4 de longueur d’ondes
Fréquence 1/4 de la longueur d’onde
433 MHz 17.25 cm
315 MHz 23.79 cm

 

By

Raspberry & i2c LCD

Utilisation de ‘lcdproc’ pour gérer l’affichage.

image

Il a fallu patcher le driver hd44780, pour correspondre au câblage de l’adaptateur i2c.
http://sourceforge.net/p/lcdproc/discussion/312/thread/00298b2f/

By

Raspberry & DHT22

Capteur de température et hygrométrie.

image

Résultat de la mesure :
RPi_DHT22

Ici, Température = 18.0 °C  et 55.3 % d’humidité.

Lien utilisé pour ce montage : http://learn.adafruit.com/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging/overview