mardi 28 mai 2013

[RaspberryPI] Reconnexion wifi automatique

Grâce à un dongle wifi, la RaspberryPI (RPI) peut se connecter au réseau sans être relié par un câble Ethernet. Ceci permet de positionner sa carte n'importe ou à portée du signal wifi.

Certains utilisateurs, dont moi, ont remarqué qu'ils perdaient leur connexion wifi. Il faut alors débrancher et rebrancher la carte.

Pour éviter cela, il faut écrire un petit script qui va vérifier toutes les x minutes si la connexion est bien établie.
source : http://www.raspberrypi.org/phpBB3/viewtopic.php?t=16054

On va tout d'abord éditer un script shell qu'on placera dans le répertoire /root et qu'on nommera network-check.sh:

#!/bin/bash

while true ; do
   if ifconfig wlan0 | grep -q "inet addr:" ; then
      sleep 300 #300 secondes
   else
      ifup --force wlan0
      sleep 20
   fi
done


Il faut rendre le code éxecutable :
chmod +x network-check.sh

Ensuite on va exécuter le script au démarrage. Pour cela ouvrir le fichier /etc/rc.local et ajouter, avant la ligne exit 0, l'instruction suivante :
/root/network-check.sh &

Vous pouvez à présent rebooter la carte en tapant sudo reboot et votre carte récupérera le signal Wifi dans les 5 minutes qui suit.

mardi 21 mai 2013

Zoneminder, Ajouter une caméra IP à l'aide d'une Raspberry PI et d'une Webcam

Dans ce tutoriel, on va utiliser une Raspberry PI (RPI) comme caméra IP.
Pour cela on va brancher une Webcam en USB sur la RPI.
On peut soit utiliser le réseau filaire en branchant un câble Ethernet à la RPI (pas très utile), soit utiliser un dongle Wifi qui va permettre de la brancher près de n'importe quelle prise à portée du signal Wifi.

Une fois les branchement fait on démarre la RPI en connectant le câble d'alimentation. Si ce n'est pas déjà fait on la configure en autorisant la connexion SSH (si vous n'avez plus l'écran de configuration taper raspi-config dans le terminal. Il faudra évidemment débrancher un des périphériques USB et brancher un clavier).

A présent, on va se connecter en SSH depuis notre PC, en admettant avoir relevé l'adresse IP de la RPI précédemment, et en utilisant Putty ou autre.

Installer Motion qui va permettre de diffuser en streaming le flux vidéo de la caméra.

En local, on peut tester le bon fonctionnement en tapant http://ip-raspberry:8081/

On va à présent déclarer la nouvelle source vidéo sur Zoneminder. Pour cela :
1) Cliquer sur Add New Monitor
2) Sélectionner 'Remote' dans Source Type
3) Dans source, saisir l'adresse IP et le port et modifier la taille de l'entrée vidéo
4) Cliquer sur Save

La source doit maintenant être visible. En modifiant la fonction 'Modect', on peut activer la détection de mouvements.

Mise en place de ZoneMinder

Récupérer un vieux pc qui consomme peu de préférence puisqu'il sera tout le temps allumé. Personnellement j'ai récupéré un pc portable d'une amie avec l'écran cassé.

Ensuite, télécharger Ubuntu server ou une autre distribution qui vous chante. J'ai choisie Ubuntu car la documentation est riche sur le Net avec beaucoup de tutoriels. Créer votre Live CD et installer ceci sur votre pc de récupération.

Je passe toutes les étapes de configuration et de création de compte Linux car ceci et déjà très bien documenté.

Zoneminder utilise Apache Php et MySQL, il va donc falloir les installer (Choisir l'installation par paquets sur  ce tuto) et les configurer.

Ensuite il suffit d'installer Zoneminder. Brancher une Webcam et tester.

jeudi 9 mai 2013

Arduino motor shield + 2 servo-moteurs

Voici comment utiliser le Shield Arduino motor avec 2 servo-moteurs.

Le shield Arduino Motor est capable de piloter 2 moteurs à courant continu ou 1 moteur pas à pas à l'aide du courant fourni par une alimentation externe. De nombreux tutoriels explique comment utiliser ces fonctionnalités (voir http://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/).

Ce shield permet également d'interfacer très facilement des capteurs ou des servo-moteurs grâce à ces 6 broches de 3 à 4 pins.
2 d'entre elles sont reliées à des pins PWM de l'arduino ce qui permet d'envoyer un signal entre 0 et 1024. Nous allons nous en servir pour nos servo-moteurs.

J'ai utilisé des servo-moteurs Emax ES08A dans mon exemple. J'ai du modifié la position des fils sur la broche pour correspondre aux pins sur le shield (de gauche à droite (rouge (+), jaune (analog), marron (-)).

Sur mon exemple j'ai branché 1 servo-moteur sur chaque broche orange du shield.

Il reste plus qu'à écrire le programme (J'ai utilisé l'exemple "sweep" et l'ai modifié pour l'adapter à mon exemple) :

// Sweep
// by BARRAGAN  
// modified by gpilot 
// This example code is in the public domain.

#include  
 
Servo myservo, myservo2;  // create servo object to control a servo 
                // a maximum of eight servo objects can be created 
 
int pos = 0;    // variable to store the servo position 
 
void setup() 
{ 
  Serial.begin(9600);
  myservo.attach(5);  // attaches the servo on pin 9 to the servo object 
  myservo2.attach(6);
} 
 
 
void loop() 
{ 
  for(pos = 0; pos < 170; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    myservo2.write(pos);              // tell servo to go to position in variable 'pos' 
    Serial.println(pos);
    delay(10);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 170; pos>=0; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    myservo2.write(pos);              // tell servo to go to position in variable 'pos' 
    Serial.println(pos);
    delay(10);                       // waits 15ms for the servo to reach the position 
  } 
} 

mercredi 3 avril 2013

Forcer le redémarrage de Linux à l'aide de cron

Pour forcer le redémarrage d'un système Linux à l'aide de la crontab, on ouvre la crontab en tant que super-utilisateur :
sudo crontab -e
Et on ajoute l'entrée suivante pour redémarrer le système toutes les heures :
0 0 */1 * * sudo shutdown -r now 

mardi 26 février 2013

[Arduino] Uploader un programme après avoir séparé les pins d'auto-reset

Dans le précédent post, nous avons supprimer la connexion de 2 points sur la carte pour éviter le reboot au lancement du Serial.
Si vous avez fait cette manipulation sur une de vos carte ou si vous possédez une carte n'ayant pas d'auto-reset, vous vous rendrez compte rapidement que vous ne pourrez plus Uploader de sketch et que vous obtiendrez l'erreur suivante :
Téléchargement terminée 
avrdude: stk500_getsync(): not in sync: resp=0x00
Lorsque vous appuyer sur le bouton reset de la carte arduino, le Bootloader se lance et permet pendant un cours instant d'uploader un sketch sur la carte. En supprimant le point de soudure entre les 2 points nous avons enlevé la possibilité à la carte Arduino de faire un reset de manière automatique.
Il faut donc le faire manuellement.
Pour cela :
1) Appuyer sur le bouton reset de la carte Arduino
2) Cliquer sur le bouton Uploader du logiciel Arduino
3) Attendre que la Led RX clignote une fois
4) Relâcher immédiatement votre doigt du bouton reset (Si une autre Led clignote le temps de lacher le bouton il faudra recommencer)
5) Laisser le logiciel Uploader le sketch sur la carte Arduino

Si le message Téléchargement terminé s'affiche sans message d'erreur, votre sketch a été envoyé correctement sur la carte

[Arduino] Eviter le reset à l'ouverture du Serial

Pour éviter que la carte Arduino reboot à chaque ouverture du Serial, on peut supprimer le petit point de soudure entre 2 connexions sur la carte (voir ci-dessous).