[PYTHON] Raspberry Pi "Lampe de notification Honwaka" Partie 1

Aide à surveiller avec Raspberry Pi

Créez un appareil qui vous informe doucement des notifications du système avec Raspberry Pi. Le but est comme ça.

Blue.gif

Obtenez Raspberry Pi

J'ai acheté RaspberryPi sur Amazon.

Distributeur Nom du produit prix quantité
TechShare Ensemble de boîtiers et cartes Raspberry Pi2 modèle B(Standard, Clear) ¥6,300 1
Amazon.com Int'l Sales, Inc. Carte microSDHC Transcend 16 Go Class10 TS16GUSDHC10E ¥980 1

Le boîtier spécial ci-joint a une ouverture dans la partie prise GPIO et convient pour se connecter à la base à l'extérieur du boîtier. Rpi-Case.jpegMagenta-Side.jpeg

Configuration du système

La configuration du voyant de notification est la suivante.

Dans cet article, j'écrirai sur la partie matérielle de "Color LED" et la partie "Led Driver" qui l'exploite. SystemDiagram

article Contenu commentaire
OS Raspbian Linux raspberrypi 3.18.7-v7+ #755
langage de développement Python Ver. 2.7.3,Inclus dans Raspbian
Fonctionnement GPIO RPi.GPIO Inclus dans Raspbian

Matériel

Faites le matériel de la "lampe de notification". Le mécanisme de fonctionnement de la LED de RaspberryPi est presque le même que ["L Chika" écrit par de nombreuses personnes](http://qiita.com/search?utf8= ✓ & sort = rel & q = L Chika + raspberryPi & sort = rel) est.

Il existe différents types de LED de couleur, et il existe différentes méthodes de contrôle de la luminosité et de la couleur, mais ici, nous allons concevoir en fonction de ce qui suit.

Schéma de câblage

NotificationLampCircuit.png Vous pouvez modifier le port GPIO à utiliser. Dans ce cas, modifiez la définition du programme décrit plus loin.

Pièces d'occasion

J'ai acheté les pièces chez Akizuki Denshi Trading (vente par correspondance).

Numéro de produit Contenu prix quantité
P-03231 Substrat universel en composite de verre traversant double face finition de placage de type C 72x47 mm fabriqué au Japon ¥100 1
C-07607 Câble USB A mâle-micro B mâle 1,5 m A-microB ¥120 1
R-07799 Résistanceaucarbone(résistanceaufilmdecarbone)1/2W47Ω(100pièces) ¥100 1
C-02485 Priseàbrochedeconnexion2x20(40P) ¥110 1
I-01587 Réseaudetransistors(pilotedepuitsDarlington7canaux)TD62003APG(2pièces) ¥100 1
I-07233 LED RVB couleur haute puissance 1W OSTCWBTHC1S avec carte de dissipation thermique ¥250 1

Outils et consommables

Les outils et consommables suivants sont recommandés pour la production.

Nom du produit Note
Fer à souder+Support de fer à souder Pour travaux électroniques d'environ 30W
Souder Diamètre 0.Chose mince d'environ 6 mm
Pince+Pince radio+pince à épiler
testeur Pratique pour le contrôle de continuité, etc.

Placement des pièces

L'aspect du carton produit est le suivant. BoardOutline.jpeg

Une prise à 40 broches est située à l'arrière de l'extrémité droite pour la connexion avec le Raspberry Pi. Cette douille à broche a une longue broche, mais si vous la soudez à la pointe sans la couper, vous pouvez la connecter juste dans la position où la base repose sur le boîtier. Sur la photo, la partie grise en haut au centre de la carte est le "bouton poussoir", mais il n'est pas utilisé dans cette explication, veuillez donc l'ignorer. La base de la LED Power est en aluminium, veillez donc à ne pas laisser le câblage toucher les bords. Bien que non visibles sur la photo, trois résistances de 47Ω sont situées sous la LED.

Led Driver Le module qui contrôle la couleur et le clignotement de la LED s'appelle ici "Led Driver". La "lampe de notification" est configurée en tant que processus enfant du processus appelant afin de pouvoir fonctionner de manière asynchrone avec le module de niveau supérieur.

La fonctionnalité du Led Driver est simple. Si vous spécifiez «Couleur» et «Cycle de clignotement (secondes)», le voyant continuera à clignoter tel quel. Si vous modifiez la spécification pendant le processus de clignotement, elle sera reflétée dans 1 seconde.

La configuration du module est la suivante.

Les files d'attente IPC sont utilisées pour communiquer avec Deamon. LedDeamon passera à l'affichage par défaut de l'état Down si le réglage du mode d'éclairage (set_mode) n'est pas exécuté pendant 80 secondes. Il s'agit d'une fonction de détection de descente du programme supérieur.

Pour plus de détails, consultez le code source ci-dessous.

Je suis nouveau sur Python, donc j'attends avec impatience votre chaleureux tsukkomi!

Méthode d'exécution du test:

python


$ sudo ./led.py

led.py


#! /usr/bin/env python
# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO
import time


class Led(object):
    # Define your GPIO Ports
    RED_PORT = 13
    GREEN_PORT = 26
    BLUE_PORT = 5

    # Controll resolution Params
    # You don't have to change following 3 Params usually
    FREQUENCY = 200  # PWM Frequency
    RESOLUTION = 50.0  # Brightness control per span
    SPAN = 1.0  # Drive time in second at one call

    # Brightness
    MAX_BRIGHTNESS = 1.0 # Master Brightness parameter 0.1 - 1.0

    # Color Table
    # You can append your own colors
    COLORS = {
        "Red": [1.0, 0.0, 0.0],
        "Pink": [1.0, 0.3, 0.3],
        "Green": [0.0, 1.0, 0.0],
        "LightGreen": [0.2, 1.0, 0.2],
        "Blue": [0.0, 0.0, 1.0],
        "LightBlue": [0.3, 0.3, 1.0],
        "Yellow": [1.0, 1.0, 0.0],
        "Orange": [1.0, 0.3, 0.0],
        "Cyan": [0.0, 1.0, 1.0],
        "Lime": [0.0, 1.0, 0.3],
        "Magenta": [1.0, 0.0, 1.0],
        "Violet": [0.3, 0.0, 1.0],
        "White": [1.0, 1.0, 1.0],
        "Black": [0.0, 0.0, 0.0]
    }
    # Color index for Color Table
    RED = 0
    GREEN = 1
    BLUE = 2

    def color_names(self):
        return Led.COLORS.keys()

    def __init__(self):
        self.phase = 0.0
        self.color = Led.COLORS["Black"]

        GPIO.setmode(GPIO.BCM)

        # set GPIO port as output
        GPIO.setup(Led.RED_PORT, GPIO.OUT)
        GPIO.setup(Led.GREEN_PORT, GPIO.OUT)
        GPIO.setup(Led.BLUE_PORT, GPIO.OUT)

        # set port as software PWM with f Hz
        self.red = GPIO.PWM(Led.RED_PORT, Led.FREQUENCY)
        self.green = GPIO.PWM(Led.GREEN_PORT, Led.FREQUENCY)
        self.blue = GPIO.PWM(Led.BLUE_PORT, Led.FREQUENCY)

        # start software PWM with 0.0%
        self.red.start(0.0)
        self.green.start(0.0)
        self.blue.start(0.0)
        return

    def _set_brightness(self, brightness):
        percent = Led.MAX_BRIGHTNESS * (brightness ** 2) * 100.0
        # set duty cycle
        self.red.ChangeDutyCycle(min(100.0, percent * self.color[Led.RED]))
        self.green.ChangeDutyCycle(min(100.0, percent * self.color[Led.GREEN]))
        self.blue.ChangeDutyCycle(min(100.0, percent * self.color[Led.BLUE]))

    def set(self, color, interval):
        # Color name to RGB value
        self.color = Led.COLORS[color]

        # interval in second
        self.interval = float(interval)

        # control resolution parameter
        if self.interval > 0.0:
            self.pitch = 1.0 / (Led.RESOLUTION * self.interval)

        # Reset phase
        self.phase = 0.0

    def run(self):
        if self.interval == 0.0:
            # No Blink
            self._set_brightness(0.5)
            time.sleep(Led.SPAN)
        else:
            for i in range(int(Led.RESOLUTION * Led.SPAN)):
                self.phase += self.pitch
                if self.phase >= 1.0:
                    self.phase = 0.0
                if self.phase < 0.5:
                    br = self.phase * 2.0
                else:
                    br = 1.0 - ((self.phase - 0.5) * 2.0)
                # keep a little light
                br += 0.0001
                self._set_brightness(br)
                time.sleep(1.0 / Led.RESOLUTION)

    def destroy(self):
        self.red.stop()
        self.green.stop()
        self.blue.stop()
        GPIO.cleanup()

if __name__ == ("__main__"):

    l = Led()
    l.set("Blue", 0.5)
    l.run()
    l.set("Black", 0)
    l.run()
    for interval in [0, 0.5, 1.0]:
        print("- Inrerval = %2.1f" % interval )
        for c in l.color_names():
            if c == "Black":
                continue
            print(c)
            l.set(c, interval)
            for i in range(max(1, int(interval * 2.0))):
                l.run()
    l.destroy()

Méthode d'exécution du test:

python


$ sudo ./led_deamon.py

led_deamon.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-


import time
import multiprocessing
import Queue
from led import Led


class LedDeamon(object):
    DOWN = {"color": "Magenta", "interval": 0}

    def __init__(self):
        self.queue = multiprocessing.Queue()
        self.lighting_mode = None

    def start(self):
        p = multiprocessing.Process(target=self._led_control, args=(self.queue, ))
        # Set deamon flug to kill process when parent process died
        p.daemon = True
        p.start()

    def set_mode(self, lightning_mode):
        self.queue.put(lightning_mode)

    # Child loop
    def _led_control(self, queue):
        count = 0
        lighting_mode = LedDeamon.DOWN
        self.led = Led()
        while True:
            # get mode from queue
            try:
                lighting_mode = self.queue.get(False)
                count = 0
                # print("lighting_mode = %s" % lighting_mode)
            except Queue.Empty:
                count += 1
                # parent seems dead
                if count > 80:
                    lighting_mode = LedDeamon.DOWN
            self._drive(lighting_mode)  # Drive for about 1 sec.

    def _drive(self, lighting_mode):
        if self.lighting_mode != lighting_mode:
            self.lighting_mode = lighting_mode
            self.led.set(lighting_mode["color"], lighting_mode["interval"])
            # print("lighting_mode = %s" % lighting_mode)
        self.led.run()

if __name__ == '__main__':
    mode_map = {
        "DOWN": {"color": "Magenta", "interval": 0},
        "ERR_UNACKED": {"color": "Red", "interval": 0.5},
        "WARN_UNACKED": {"color": "Yellow", "interval": 2},
        "ERR_ACKED": {"color": "Green", "interval": 4},
        "WARN_ACKED": {"color": "Green", "interval": 8},
        "NORMAL": {"color": "Blue", "interval": 8}}

    # Create and start LED Driver
    ld = LedDeamon()
    ld.set_mode(mode_map["NORMAL"])
    ld.start()
    time.sleep(8)
    ld.set_mode(mode_map["ERR_UNACKED"])
    time.sleep(8)
    ld.set_mode(mode_map["WARN_UNACKED"])
    time.sleep(8)
    ld.set_mode(mode_map["ERR_ACKED"])
    time.sleep(8)
    ld.set_mode(mode_map["WARN_ACKED"])
    time.sleep(8)
    ld.set_mode(mode_map["DOWN"])
    time.sleep(8)

Limites

prime

C'est ainsi qu'il brille lorsqu'un problème important survient. Lorsqu'il est combiné avec un carillon approprié, vous pouvez créer un sentiment d'urgence. (Je ne veux pas trop le voir ...) Red.gif

Le couvercle en forme de dôme qui recouvre la LED est une diversion du cache de la lumière LED qui a été vendu chez Daiso. En fait, la partie la plus difficile de la production de matériel était de trouver cette couverture. (Lol)

Calendrier suivant

La prochaine fois, j'écrirai sur le module Detector qui contrôle les notifications.

Recommended Posts

Raspberry Pi "Lampe de notification Honwaka" Partie 2
Raspberry Pi "Lampe de notification Honwaka" Partie 1
Raspberry Pi "Lampe de notification Honwaka" Partie 3
Multiplication matricielle sur GPU Raspberry Pi (partie 2)
pigpio sur Raspberry pi
Cython sur Raspberry Pi
Introduction de pyenv sur Raspberry Pi
Utilisez NeoPixel avec la tarte aux framboises
Installez OpenCV4 sur Raspberry Pi 3
Installez TensorFlow 1.15.0 sur Raspberry Pi
Test de la communication UART avec Raspberry Pi
Raspberry pi 1 modèle b, partie rouge noeud 17
MQTT sur Raspberry Pi et Mac
raspberry pi 4 centos7 installer sur docker
Installez ghoto2 sur Raspberry Pi (Remarque)
Essayez d'utiliser ArUco avec Raspberry Pi
Procédure d'installation d'OpenCV sur Raspberry Pi
Allumer / éteindre le Raspberry pi avec Arduino
Détecter l'état du commutateur avec Raspberry Pi 3
Installez OpenMedia Vault 5 sur Raspberry Pi 4
L Chika avec Raspberry Pi C #
Construisez wxPython sur Ubuntu 20.04 sur Raspberry Pi 4
Notification téléphonique lorsque le mouvement de la caméra de surveillance est détecté sur Raspberry Pi
Détectez la "luminosité" en utilisant python sur Raspberry Pi 3!
Démarrage USB sur Raspberry Pi 4 modèle B
Activer la communication série UART + avec Raspberry Pi
Adafruit Python BluefruitLE fonctionne sur Raspeye.
Accélérez l'apprentissage en profondeur avec le processeur Rasperry Pi 4
Définir l'espace d'échange sur Ubuntu sur Raspberry Pi
Programmation normale avec la programmation Node-RED avec Raspberry Pi 3
Utiliser le capteur Grove avec Raspberry Pi
Installez la version 64 bits du système d'exploitation (bate) sur Raspberry Pi
Installez docker-compose sur le système d'exploitation Raspberry Pi 64 bits
Exécutez un servomoteur en utilisant python sur Raspberry Pi 3
Travailler avec des capteurs dans Mathematica sur Raspberry Pi
Construire un environnement OpenCV-Python sur Raspberry Pi B +
Détectez la température à l'aide de python sur Raspberry Pi 3!
Comment installer NumPy sur Raspeye
Travailler avec le GPS en Python pour Raspberry Pi 3
Fabriquez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 3
Débutant du développement d'applications GUI Raspberry Pi facile, partie 1
Pourquoi detectMultiScale () est lent sur Raspberry Pi B +
Détectez les interrupteurs à glissière à l'aide de python sur Raspberry Pi 3!
Essayez d'utiliser le code QR avec Raspberry Pi
Détectez les commutateurs magnétiques à l'aide de python sur Raspberry Pi 3!
Profitez du travail électronique avec GPIO de Raspberry Pi
Allumez / éteignez votre PC avec Raspberry Pi
Débutant du développement d'applications GUI Raspberry Pi facile, partie 2
Grove - Capteur de température et d'humidité (DHT11) avec Raspberry Pi
Rendre DHT11 disponible avec Raspeye + python (Remarque)
Démarrage de la compilation croisée pour Raspberry Pi Zero sur Ubuntu
Sonnez le buzzer en utilisant python sur Raspberry Pi 3!
Créer un système de notification des visiteurs à l'aide de Raspberry Pi
Afficher la température du processeur toutes les 5 secondes sur Raspberry Pi 4
Introduction de Ceph avec Kubernetes sur Raspberry Pi 4B (ARM64)
Connectez-vous à MySQL avec Python sur Raspberry Pi
Construire un environnement de développement Python sur Raspberry Pi