Translate

domenica 1 giugno 2014

Sensore di Temperatura ed umidità DHT11 con RasphBerry pi


Tra le numerose micro spedizioni ricevute in questi ultimi mesi da negozietti sparsi per il mondo, mi sono anche fatto mandare un Sensore DHT11 che misura Temperatura ed Umidità.
(poi ho scoperto che sarebbe stato piu comodo prendere il DHT11 su AMAZON al miglior prezzo)
Guardando il datasheet la misura della temperatura ha una precisione di +o-2gradi.. mi sembra un esagerazione ma costava poco :D e per fare delle prove va benissimo
N.B. il +o-2 gradi significa anche che si passa dai 26 ai 28 nelle misurazioni!
per quanto rigurada l'umidità è comunque abbastanza preciso per i miei scopi.


ho preso spunto dal sito http://www.vitadastudente.it
che a sua volta fa riferimento al sito di AdaFruit...

cmq sia dopo essermi procurato anche una bella resistenza da 4,7Khom ed adoperato il seguente schema

collegando il pin 7 (GPIO 4) al piedino dei dati, ho scaricato i Driver (la gestione pura in Pyton risultava troppo imprecisa per la comunicazione seriale richiesta)
cmq i driver provengono sempre da Adafruit


    $ git clone git://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
    $ cd Adafruit-Raspberry-Pi-Python-Code

    $ cd Adafruit_DHT_Driver

       e fin qui lo abbiamo solo scaricato ora lanciamo il test
      1. sudo ./Adafruit_DHT 11 4
      dove 11 indica il modello del sensore, ed il 4 indica il PIN GPIO a cui è collegato;
      otteniamo
      1. Using pin #4
      2. Data (40): 0x26 0x0 0x1a 0x0 0x40
      3. Temp = 26 *C, Hum = 38 %

      se poi utilizzando lo spirito scientifico che mi contraddistingue... ci alito sopra ...
      1. Using pin #4
      2. Data (40): 0x28 0x0 0x1c 0x0 0x40
      3. Temp = 28 *C, Hum = 40 %
      noto che qualche variazione la registra...





      martedì 13 maggio 2014

      RaspBerry Pi - ed il motorino passo passo
       
      Ecco la Seconda Puntata del mio approccio con il Raspberry pi... nulla di eclatante.. un po' di prove di "velocita massima", di passi, mezzi passi nulla di che
      un po' di ottimizzazione del codice di esempio (un bel try-catch fa' sempre bene) e come al solito i commenti sono piu del codice :P


      allego il codice usato:

      import RPi.GPIO as GPIO
      import time
      GPIO.setmode(GPIO.BCM)
      
      enable_pin = 18
      coil_A_1_pin = 4
      coil_A_2_pin = 17
      coil_B_1_pin = 23
      coil_B_2_pin = 24
      
      GPIO.setup(enable_pin, GPIO.OUT)
      GPIO.setup(coil_A_1_pin, GPIO.OUT)
      GPIO.setup(coil_A_2_pin, GPIO.OUT)
      GPIO.setup(coil_B_1_pin, GPIO.OUT)
      GPIO.setup(coil_B_2_pin, GPIO.OUT)
      
      GPIO.output(enable_pin, 1)
      
      def forward(delay, steps):  
      #mezzo passo 
        for i in range(0, steps):
          setStep(1, 0, 0, 1)
          time.sleep(delay)
          setStep(0, 0, 0, 1)
          time.sleep(delay)
          setStep(0, 0, 1, 1)
          time.sleep(delay)
          setStep(0, 0, 1, 0)
          time.sleep(delay)
          setStep(0, 1, 1, 0)
          time.sleep(delay)
          setStep(0, 1, 0 , 0)
          time.sleep(delay)
          setStep(1, 1, 0, 0)
          time.sleep(delay)
          setStep(1, 0, 0, 0)
          time.sleep(delay)
      
      def backwards(delay, steps): 
      #passo intero 
        for i in range(0, steps):
          setStep(1, 0, 0, 0)
          time.sleep(delay)
          setStep(0, 1, 0, 0)
          time.sleep(delay)
          setStep(0, 0, 1, 0)
          time.sleep(delay)
          setStep(0, 0, 0, 1)
          time.sleep(delay)
      
      
      
      def setStep(w1, w2, w3, w4):
        GPIO.output(coil_A_1_pin, w1)
        GPIO.output(coil_A_2_pin, w2)
        GPIO.output(coil_B_1_pin, w3)
        GPIO.output(coil_B_2_pin, w4)
      
      try:
        #here you put your main loop or block of code
        delay = raw_input("Delay between steps (milliseconds)?")
      
        while int(delay) > 0 :
          steps = raw_input("How many steps forward? ")
          forward(int(delay) / 1000.0, int(steps))
          steps = raw_input("How many steps backwards? ")
          backwards(int(delay) / 1000.0, int(steps))
          delay = raw_input("Delay between steps (milliseconds)?")
      
      except KeyboardInterrupt:
        # here you put any code you want to run before the program
        # exits when you press CTRL+C
        #print "\n", counter # print value of counter
        print "\nuscito per pressione tasti CTRL+C"
      
      except:
        # this catches ALL other exceptions including errors.
        # You won't get any error messages for debugging
        # so only use it once your code is working
        print "Other error or exception occurred!"
      
      finally:
        GPIO.cleanup() # this ensures a clean exit