Outils pour utilisateurs

Outils du site


python:lumiere

Différences

Ci-dessous, les différences entre deux révisions de la page.


python:lumiere [2024/02/09 17:10] (Version actuelle) – créée - modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +====== MOD-LTR-501ALS ======
 +Capteur I2C de lumiere et de distance <8cm
  
 +https://www.olimex.com/Products/Modules/Sensors/MOD-LTR-501ALS/open-source-hardware
 +
 +===== Code lumiere vers OSC =====
 +OSC sur local host 9001 /LUX/0 /LUX/1 et /LUX/DIST
 +
 +
 +<code>
 +#!/usr/bin/python
 +# -*- coding: utf-8 -*-
 +# Lecture du module LTR50ALS capteur de lumière , UEXT Olimex 
 +# transmission des donnees en OSC
 +
 +import sys,time,liblo
 +from smbus import SMBus
 +
 +BUS_NUMBER = 2
 +PORT=9001 
 +ADRS=35 # 0x23 - LTR501ALS
 +# init pour le bus
 +b = SMBus(BUS_NUMBER) # 0 indicates /dev/i2c-0
 +data = {}
 +
 +try:    
 +        print('init1')
 +        target = liblo.Address("localhost",9001)
 +except liblo.AddressError, err:
 +        print str(err)
 +        sys.exit()
 +
 +# init du module
 +try:
 +        b.write_i2c_block_data(2, ADRS,[0x80,0x03]) # active mode 64k lux
 +        b.write_i2c_block_data(2, ADRS,[0x81,0x03]) # PS active mode, x1 GAIN
 +        b.write_i2c_block_data(2, ADRS,[0x82,0x6B]) # LED 60Hz, 50% duty, 50mA
 +        b.write_i2c_block_data(2, ADRS,[0x83,0x7F]) # 127 pulses
 +        b.write_i2c_block_data(2, ADRS,[0x84,0x02]) # PS 100ms measure rate
 +        b.write_i2c_block_data(2, ADRS,[0x85,0x04]) # ALS Integration 100ms, repeat rate 500ms
 +except IOError, err:
 +      print ("ioerr")
 +#exept:
 +#       print str(err init)
 +#       sys.exit()
 +
 +while True:
 +        try:
 +                status = b.read_byte_data(ADRS,0x8c)
 +#               print("0x%02X",status & 0xFF)
 +                if(status & 0x04):
 +                        data_block = b.read_i2c_block_data(ADRS,0x88,4)
 +                        adc_0 = (data_block[1] * 2**8 + data_block[0])
 +                        adc_1 = (data_block[3] * 2**8 + data_block[2])
 +                        print "ADC_0= %d" % adc_0
 +                        print "ADC_1= %d" % adc_1
 +                        liblo.send(target,"/LUXADC_0", adc_0)
 +                        liblo.send(target,"/LUXADC_1", adc_1)
 +                elif(status & 0x01):
 +                        data_block = b.read_i2c_block_data(ADRS,0x8D,2)
 +                        PS = (data_block[1] * 2**8 + data_block[0])
 +                        distance = 10 -(10.0/2047)*PS
 +                        distance = format(distance,'.2f')
 +                        print "DIST= %d" % distance
 +                        liblo.send(target,"/DIST", distance)
 +                else:
 +#                       print("0x%02X",status & 0xFF)
 +                        time.sleep(0.02)
 +        except IOError, err:
 +                      print ("ioerr read")
 +
 +        except KeyError:
 +                pass
 +        except KeyboardInterrupt:
 +                quit()
 +        except StopIteration:
 +                session = None
 +                print "GPSD has terminated"
 +        except:
 +#               print('echec')
 +                continue
 +
 +
 +#       time.sleep(1.12)
 +</code>
 +{{:python:lumiere2osc.py|}}
 +script bash de lancement, sort si le capteur n'est pas present et l'initialise correctement ( a faire dans en python ;-) )
 +<code>
 +#!/bin/bash
 +MOD-LTR501ALS --i2c=/dev/i2c-1 -a 0x23  --als-mode=ACTIVE --ps-mode=ACTIVE
 +RET=$?
 +if [ "$RET" == 0 ]
 +then
 +        lumiere2OSC.py
 +fi
 +</code>