Archives de catégorie : Uncategorized

Project : Fish feeder with Arduino Deek-Robot pro mini ATmega 328

Idea comes from :

http://www.instructables.com/id/Arduino-Fish-Feeder

and my work :

Arduino deek-Robot pro mini ATmega328

http://www.xtremxpert.com/index.php/electronique-libre/arduino/25-programmer-un-arduino-mini-pro-deek-robot

A counterfeit Deek Robot Pro Mini from the backside.

https://arduino-board.com/pages/arduino-knockoffs

https://arduino-board.com/boards/dr-pro-mini

 

Download sketch to arduino Deek-Robot pro mini from arduino uno

Initial problem comes from difficulties to download sketch directly from PC/scratch to arduino pro mini : no USB to serial driver available for my PC.

Solution consists in using arduino uno as a downloader

IMPORTANT : select Arduino as ISP. See below :

sketchup

Select the righ card :

CardType

wiring

Picture of Wiring and Programing!

The servo motor

http://www.servodatabase.com/servo/towerpro/sg90

TowerPro SG90

data sheet : http://www.micropik.com/PDF/SG90Servo.pdf

servomotor

Reducing voltage from 9V to 5V

As a reminder only : not used (5V charger used instead)

Typically a LM7805 is used (or LM2940)

http://cdn.instructables.com/FR4/U6VM/FM68F9BA/FR4U6VMFM68F9BA.LARGE.gif

The 7805 needs 7V minimum and the 2940 can work from 5.5V
They can both handle upto a 35V input.

Use a LDO regulator like the LM1117T, LM2931, or equiv. The cheaper 7805 or 78L05 will work, but you won’t get the full capacity out of the battery. If you plan on doing much experimenting it would be better to get a power supply, even a wall wart, instead of the typically weak 9V battery (http://www.electro-tech-online.com/threads/reduce-a-9v-to-5v.98143/)

See if you can get hold of an old car charger for a mobile phone that has an output of about 5V. You should be able to change one resistor to get exactly 5V. This saves having to source all the chokes etc.

Source code

//
// thierry.gaillot@orange.com
// 2015, october 4th
// inspired from : http://www.instructables.com/id/Arduino-Fish-Feeder/
// see : http://mesnotes.apps-1and1.net/
// important note regarding deek-robot pro mini : press reset button and release when RX starts blinking !
//

#include <Servo.h> 
 
Servo myservo; // 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 

//long FISHFEEDER = 43200000; // 12 hours between feeding
long FISHFEEDER = 20; // 12 hours between feeding
long endtime; 
long now;

void blink_led() {
 digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
 delay(1000); // wait for a second
 digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
 delay(1000); // wait for a second
}

void release() {
 // release the servo to shut down noise ...
 myservo.detach();
 //digitalWrite(9, LOW);
 delay(15);
}

void setup() {
 myservo.attach(9); // attaches the servo on pin 9 to the servo object 
 myservo.write(0); // move to initial position
 pinMode(13, OUTPUT); //led confims loop is looping !
 delay(15); // wait a moment before going further
 blink_led(); // just for fun
}

void loop() {
 release();
 
 now = millis();
 endtime = now + FISHFEEDER;
 
 while(now < endtime) { // wait until endtime arrives ...
 delay(9000); // 20000 -> 9000 wait for 20 s before continue loop
 now = millis(); // get time
 blink_led();
 
 // place to test if button pressed, 
 // ie : if we want to feed the fish now

 } // end loop : waiting for 12 hours
 
 // loop is finished : it is time to feed the fish !
 move();

} // end loop

void move() {
 
 setup(); // attach motor only when needed (it makes noise)
 
 // one way
 for(pos = 0; pos < 180; 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' 
 delay(15); // waits 15ms for the servo to reach the position 
 } 
 
 // back way
 for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees 
 { 
 myservo.write(pos); // tell servo to go to position in variable 'pos' 
 delay(15); // waits 15ms for the servo to reach the position 
 } 
 myservo.write(0); // origin
 release(); // detach motor
 
} // end move

// end program

Learn more

http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.DebuterInstallation

 

Module antigel pour abreuvoir du poulailler

Application du LM35DZ avec Arduino
Module antigel pour abreuvoir du poulailler

Description du besoin :
Des que la temperature de l’eau s’approche de 0°C ou risque de geler (différence subtile), mettre en marche une résistance chauffante pour ramener l’eau à un état liquide.

Analyse fonctionnelle:
Mesurer périodiquement la temperature de l’eau
Activer/arrêter l’alimentation de la résistance chauffante en fonction de la température mesurée

Caractéristiques techniques :
Si la temperature de l’eau < 3°C chauffer l’eau
Si la temperature de l’eau > 5°C ne pas chauffer l’eau
Sécurité (option):
La résistance ne doit pas rester allumée plus de X mn
La résistance doit rester à l’arrêt au moins Y mn consécutives

Principe de solution matérielle
ARDUINO
LM35DZ (car dispo)
Module relais
Thermo plongeur 22V (récup)

Principe de solution logicielle
variable : valeurLue
variable : frequence de mesure (frequence_mesure = 5000 ms) entre 2 mesures
variable : temperature
variable : nombre_echantillons (20)
variable : seuil_temperature_chauffageON (3.0°)
variable : seuil_temperature_chauffageOFF (5.0°)
variable : pin arduino Led
variable : pin arduino relais

// —————————————–

Initialisation
Périodiquement (fréquence de mesure)
//Décider de l’action
mesurer_temperature
Si temperature < seuil_temperature_chauffageON –> allumer chauffage
Si temperature > seuil_temperature_chauffageOFF –> fermer chauffage
Attendre fréquence_de_mesure

// —————————————–

Conception :

Initialisation

fonction : mesurer_temperature() // avec lissage
// attention : prends nombre_echantillons x 1000 ms de délai (20 s ici )
for(i=1;i< =nombre_echantillons;i++){ // moyenne sur 20 mesures
temperature_t = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
temperature = temperature + temperature_t;
delay(1000);
}
return temperature = temperature/nombre_echantillons;

fonction allumer_chauffage
activer sortie digitale relais

fonction fermer_chauffage
desactiver sortie digitale relais

fonction allumer_led
activer sortie digitale led

fonction eteindre_led
activer sortie digitale led

/*
* module antigel pour abreuvoir de poulailler
* thierry.gaillot@orange.com
* 25 janvier 2015
*/

int temperaturePin = A0; // pin centrale du LM35DZ (OUTPUT)
int pin_arduino_led_mesure = 13; // pin pour la LED témoin MESURE
int pin_arduino_led_chauffage = 12; // pin pour la LED témoin CHAUFFAGE
int pin_arduino_relais1 = 7; // pin pour le relais
int valeurLue = 0; //
double temperature = 0;
double temp = 0;
double tension = 0;
int frequence_mesure = 5000; // ms duree entre 2 mesures
int nombre_echantillons = 20; // pour le lissage et la moyenne (20)
int seuil_temperature_chauffageON = 2.0; // seuil d’allumage du chauffage (3.0°)
int seuil_temperature_chauffageOFF = 4.0; // seuil extinction du chauffage (5.0°)
//test
//int seuil_temperature_chauffageON = 23.0; // seuil d’allumage du chauffage (3.0°)
//int seuil_temperature_chauffageOFF = 25.0; // seuil extinction du chauffage (5.0°)

void setup() { // initialisation
// declare les pins comme sorties : OUTPUT
pinMode(pin_arduino_led_mesure, OUTPUT);
digitalWrite(pin_arduino_led_mesure, LOW);

pinMode(pin_arduino_led_chauffage, OUTPUT);
digitalWrite(pin_arduino_led_chauffage, LOW);

pinMode(pin_arduino_relais1, OUTPUT);
fermer_chauffage();

Serial.begin(9600); // pour mise au point et gestion du Serial.print
}

void loop() {

// boucle principale

int temp;

//mesurer_temperature
temp = mesurer_temperature();

//Si temperature < seuil_temperature_chauffageON –> allumer chauffage
if (temp < seuil_temperature_chauffageON) { allumer_chauffage(); } //Si temperature > seuil_temperature_chauffageOFF --> fermer chauffage if (temp > seuil_temperature_chauffageOFF)
{
fermer_chauffage();
}

//Attendre fréquence_de_mesure
delay(1000); //ms
clignoter_led_mesure();

}

int mesurer_temperature() // avec lissage
{

int i=0;
int temperature_t = 0;
temperature = 0;
// attention : prends nombre_echantillons x 1000 ms de délai (20 s ici )
//tension = 5.0*valeurLue*1000/1024;
//temperature = tension/10;
for(i=1;i < =nombre_echantillons;i++) { // moyenne sur 20 mesures allumer_led_mesure(); valeurLue = analogRead(temperaturePin); temperature_t = ( 5.0 * valeurLue * 100.0) / 1024.0; temperature = temperature + temperature_t; delay(500); eteindre_led_mesure(); delay(500); } temperature = temperature/nombre_echantillons; Serial.print(valeurLue); Serial.print(" -->« );
Serial.print(temperature);Serial.println( » C »);

return temperature;
}

void allumer_chauffage() {
//activer sortie digitale relais
digitalWrite(pin_arduino_relais1, LOW);
allumer_led_chauffage();
}

void fermer_chauffage() {
//desactiver sortie digitale relais
digitalWrite(pin_arduino_relais1, HIGH);
eteindre_led_chauffage();
}

void allumer_led_mesure() {
//activer sortie digitale led
digitalWrite(pin_arduino_led_mesure, HIGH);
}

void eteindre_led_mesure() {
//activer sortie digitale led
digitalWrite(pin_arduino_led_mesure, LOW);
}
void clignoter_led_mesure() {
allumer_led_mesure();
delay(250);
eteindre_led_mesure();
delay(250);
}
void allumer_led_chauffage() {
//activer sortie digitale led
digitalWrite(pin_arduino_led_chauffage, HIGH);
}

void eteindre_led_chauffage() {
//activer sortie digitale led
digitalWrite(pin_arduino_led_chauffage, LOW);
}

Outils

Outils

  • MindMapping
    • MindMeister
      • gratuit et payant
      • version iPad
    • cet outil ! Mindmup
      • gratuit
      • online
      • intégré à Google Drive
      • tres pauvre en mise en page
      • pas de lien entre carte
      • pas de version iPad
    • XMIND
      • gratuit et payant
      • mise en forme plus évoluée
      • pas de version iPad
    • freeplane
      • gratuit
      • opensource
      • pauvre en mise en page
      • pas de version iPad
    • VuE
      • opensource
  • adwords

Débuter avec Raspberry Pi

http://framboisepi.fr/ 
https://www.piborg.org/
http://www.tropfacile.net/doku.php/raspberry-pi/preparer-carte-sd
http://blog.univers-domotique.com/category/raspberry/
http://www.tropfacile.net/doku.php

http://blog.idleman.fr/sommaire-raspberry-pi-arduino-domotique-robotique-et-pleins-de-trucs-en-ique/

https://www.modmypi.com/blog/tutorial-how-to-give-your-raspberry-pi-a-static-ip-address

 

broches : http://pi.gadgetoid.com/pinout/

  

Python

PYTHON

mes outils dans ma virtualBox linux

  •  éditeur, execution, browser de fonctions/variables : éditeur geany
  • changer de workspace gnome : Ctrl+Alt+right/left arrow

mes outils environnement Windows

  • interpreteur
    lancer IDLE.bat
    pythonWin
  • Installation packages
    se placer ds le repertoire : E:\XXXX\Data\PROGRAMS\PYTHON2\Lib\site-packages
    ouvrir cmd
    lancer :
    easy_install + nom du package (= nom du dossier)
  • Faire un EXE
    http://www.py2exe.org/index.cgi/Tutorial

outils

  • divers
  • Parser XML et HTML
    beautifulSoup : http://www.crummy.com/software/BeautifulSoup/bs4/doc/

    • exemples de selector
      • récuper valeur champ :
        • for link in soup.find_all(‘a’):
          print(link.get(‘href’))
          # http://example.com/elsie
          # http://example.com/lacie
          # http://example.com/tillie
        • css_soup = BeautifulSoup(‘<p class= »body »></p>’)
          css_soup.p[‘class’]
          # [« body »]
      • récupérer le contenu du tag
        # <title>The Dormouse’s story</title>
        title_tag.contents
        # [u’The Dormouse’s story’]
      • css_soup.select(« p.strikeout.body »)
        # [<p class= »body strikeout »></p>]
      • soup.select(« body a »)
        # [<a class= »sister » href= »http://example.com/elsie » id= »link1″>Elsie</a>,
        #  <a class= »sister » href= »http://example.com/lacie »  id= »link2″>Lacie</a>,
        #  <a class= »sister » href= »http://example.com/tillie » id= »link3″>Tillie</a>]
  • tester des filtres (selector)
    • http://www.freeformatter.com/xpath-tester.html
    • outil dev Chrome (F12) puis  : CTRL F dans onglet « Elements« 
    • (****) outil dev Chrome (F12) puis  taper $$(« pattern ») dans la console. Exemple  : $$(« div ul li a ») ou $x(« .//header »)  (xpath)

snippets

contruire un tableau élément par élément : 
list.append(x)
Récupérer date et heure
    import time
    import datetime
    #print datetime.datetime.now().strftime("The date is %A (%a) %d/%m/%Y")
    #=> The date is Friday (Fri) 08/08/2003
horodate nom de fichier
    import time
    import datetime
    filename=datetime.datetime.now().strftime("%Y%m%d-%H.%M.%S")+".jpg"
récupérer un objet sur internet et le stocket
    from urllib2 import urlopen
    from urllib import urlretrieve
    outpath = os.path.join(out_folder, filename)
    urlretrieve('http://192.168.1.246:40588/axis-cgi/jpg/image.cgi?resolution=320x240',outpath)
tester si une chaine contient un mot
    import re
    toolbar = re.search(r'toolbar',chaine)
timer
    from threading import *
    def getImage():
    t = Timer(3600.0, getImage)
    t.start()
   
    filename=datetime.datetime.now().strftime("%Y%m%d-%H.%M.%S")+".jpg"
    outpath = os.path.join(out_folder, filename)
    urlretrieve('http://192.168.1.246:40588/axis-cgi/jpg/image.cgi?resolution=320x240',outpath)
    #print filename + "-getImage"
 
getImage()


quelques liens