By

Pet Feeder v1

Il faut bien nourrir le chat pendant les vacances, puisque nous ne pouvons pas toujours l’emmener avec nous.

On trouve toute sorte de montage sur internet, du broyeur de croquettes jusqu’au montage de « Doc » dans « retour vers le futur » !

20160615_220723.jpg

J’ai commencé par faire un premier prototype, mais j’ai été confronté à un problème de taille, puisque la machine peut se bloquer, si une croquette se coince 🙁

 

 

 

 

Je suis donc revenu à un système comparable aux distributeurs de corne flakes, ou plus généralement de dry food. Pour faire simple, une roue avec des ailettes dans un tube, sous un entonoire, sous un grand tube.

La difficulté a été de trouver un équivalent à cette roue à ailettes, stratégique au montage. Finalement, j’ai pensé utiliser ca : wp-1466453449644.jpg un goupillon pour nettoyer les bouteilles.

 

J’ai juste coupé aux bonnes dimensions, et utilisé un bout de domino électrique pour caler en translation, et solidariser avec le moteur.

 

Ensuite, j’ai fixé une petite plateforme en bois pour poser le moteur, et ajouter quelques bouts de PVC et construit un support en bois :

wp-1466453464245.jpg

wp-1466453482269.jpg

wp-1466453436871.jpgwp-1466453496591.jpg

 

 

 

 

 

Au final, cela ressemble à ceci :

wp-1466453395807.jpgwp-1466453381035.jpg

Maintenant, je m’attaque à la programmation.

Je vais utiliser un AT-MEGA 328p (arduino UNO from scratch), un ESP8266, et quelques autres composants …

 

 

 

Update du 07/07/2016

Apres une dizaine de jours d’utilisation, ce montage remplie sa fonction à merveille. Une dose est bien distribuée toutes les 12h environ. Plus exactement, toutes les 12h05 : il faudra améliorer la partie programmation horaire.

Le niveau de croquettes évolue selon les prévisions, assez régulièrement, même si le capteur n’a une précision qu’en centimètre. PetFeeder_2-week

C’est aussi quelque chose à améliorer pour la prochaine version… si possible, approcher une précision de quelques millimètres.

 

Et puisqu’il est toujours préférable de vérifier qu’un bricolage fonctionne convenablement, voici le preuve en image (caméra IP en mode infra-rouge, donc en noir et blanc)607228_2016-06-26-22_52_21.jpg.jpg

La chat a très vite repéré le bruit de ce drôle d’engin, et se précipite dessus.
Je peux l’affirmer grâce à une autre webcam, qui couvre son panier dans le garage, près de la chatière.

 

 

 

 

 

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

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

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

Arduino méga & réseau

image

By

Commande de modules éléctroniques

Arduino_8relay_board

Matériel commandé sur eBay début juin 2012 :

Plaquette de pilotage de circuits de puissance à base de relais 5v.

Ce module possède 2 niveaux d’isolations : les relais (250V, 10A), et des opto-coupleurs (TTL).
Le pilotage des sorties de puissances se fait par des signaux bas (zéro volt).

Remarque pour le Raspberry PI : le GPIO duRpi est en 3.3v, mais ce module est compatible puisqu’il utilise le 0v pour activer les relais.

 

 

RTC (Real Time Clock) I2CArduino_RTC

 

By

Capteur de niveau de fioul opérationnel

Le capteur est opérationnel depuis décembre 2011.

montage final du capteur de niveau de remplissage de la cuve à fioul

montage final

Le boitier qui contient le circuit avec l’AT-MEGA328 est dans le garage. Toutes les 10 secondes, la led verte clignote en rafale. Le nombre de d’allumages de la led correspond au nombre de dizaines de pour-cent de remplissage de la cuve. La led rouge indique soit une mesure incorrecte (10 flash), soit une mesure inférieure à 20%.

L’alimentation (5v) est founie par l’adaptateur USB/RS232.

L’ATmega envoie aussi des informations numériques sur le port série, toutes les 10 secondes.

Format de l’information envoiée sur le port série :
<RATE>60</RATE>

 

Mise à jour d’octobre 2012 :

Après quelques tentatives d’interfacage avec le NAS Synology (problème de driver kernel pour le convertisseur USB/RS232 « CP2102 »), je me lance dans la configuration d’un plugin munin-node sur Linux (vieux PC de récup.)Munin-cuve-year

Sur ce graph annuel, on voit bien la consommation en fioul, et on peut même en déduire le bon moment pour le faire remplir ! 😉

By

Module ethernet

image
Ce module est arrivé lundi midi. (26/09/2011)

Article très intéressant au sujet de ce module : http://dereenigne.org/tag/enc28j60

Pour interfacer ce module avec l’arduino, il faut utiliser les broche « SPI » et une broche « interrupts ».

Le challenge rigolo avec ce bidule, c’est qu’il fonctionne en 3.3v. Cette tension est facile à fournir pour l’alimentation, mais ca se complique sérieusement quand il faut communiquer avec l’arduino qui lui, est en 5v. Dans certains cas, il semble que ces 2 composants communiquent sans problème, donc sans composant d’adaptation au milieu. (74HCT08 par exemple)

Petit rappel des fonctions complémentaires utilisant des broches du contrôleur :

  • Serial: 0 (RX) and 1 (TX). Used to receive (RX) and transmit (TX) TTL serial data. These pins are connected to the corresponding pins of the ATmega8U2 USB-to-TTL Serial chip.
  • External Interrupts: 2 and 3. These pins can be configured to trigger an interrupt on a low value, a rising or falling edge, or a change in value. See the attachInterrupt() function for details.
  • PWM: 3, 5, 6, 9, 10, and 11. Provide 8-bit PWM output with the analogWrite() function.
  • SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). These pins support SPI communication using the SPI library.
  • TWI: A4 (SDA) and A5 (SCL). Support TWI communication using the Wire library.