忍者ブログ

設備のマニアどっとこむ

設備、電子工作、DIYのブログ!

05/19

Sun

2019

ラズパイで仮想通貨取引Botの作成

いままで40万円程度に低迷していたビットコイン価格ですが、最近なんと倍の80万円超えに!!

これでマイニングを再開しようと思ったのですが…



この季節部屋が28度近くなってしまいます。5月でクーラーつけるのもあれだしなあ…。

ということで今あるビットコインを増やすことにしました。


といってもいつ買っていつ売るのがいいのかわからず・・。ずっと相場をみているのもも面倒なのでBotを作ってみました。 取引所はZaifです。




まずはアカウントをとって開発者向けAPIからkeyとsecretを取得します。



後でpythonコードに入力して使います。

次にラズパイでzaifapiをインストールします。

sudo pip3 install zaifapi

python2ではエラーが出るので注意してください。

あとは下記のようなコードを書きました。
from zaifapi import ZaifPublicStreamApi
import time
import subprocess
TARGET_CURRENCY_PAIR = 'btc_jpy'
zaif_stream = ZaifPublicStreamApi()
try:
    
    
    for stream in zaif_stream.execute(currency_pair=TARGET_CURRENCY_PAIR):
        time_str = stream['timestamp']
        last_price = stream['last_price']['price']
        
             
        print(time_str,last_price)
        
        if   last_price > 832000:
            GPIO.output(17, True)
            subprocess.check_call(['python3','sale.py'])
            time.sleep(500)
        if   last_price < 821000:
            GPIO.output(17, False)
            subprocess.check_call(['python3','buy.py'])
            time.sleep(500)
except KeyboardInterrupt:
    print('Bye')


このコードでは832000円以上で売却プログラム sale.pyを動かし、821000円以下で購入プログラム
buy.pyを動かします。

ちなみにsale.pyとbuy.pyはこんな具合です。※keyとsecretにzaifから取得したものを入力してください。


(sale.py)
from zaifapi import *
TARGET_CURRENCY_PAIR = 'btc_jpy'
zaif = ZaifPublicApi()
zaif.last_price('btc_jpy')
zaif_stream = ZaifPublicStreamApi()
key = '***************************'
secret = '*****************************'
for stream in zaif_stream.execute(currency_pair=TARGET_CURRENCY_PAIR):
        time_str = stream['timestamp']
        last_price = stream['last_price']['price']
        print(time_str, last_price)
        
        break
zaif = ZaifTradeApi(key, secret)
zaif.trade(currency_pair='btc_jpy',
           action='ask',
           amount=0.001,
           price=int(last_price))
(buy.py)
from zaifapi import *
TARGET_CURRENCY_PAIR = 'btc_jpy'
zaif = ZaifPublicApi()
zaif.last_price('btc_jpy')
zaif_stream = ZaifPublicStreamApi()
key = '***********************************'
secret = '**********************************'
for stream in zaif_stream.execute(currency_pair=TARGET_CURRENCY_PAIR):
        time_str = stream['timestamp']
        last_price = stream['last_price']['price']
        print(time_str, last_price)
        
        break
zaif = ZaifTradeApi(key, secret)
zaif.trade(currency_pair='btc_jpy',
           action='bid',
           amount=0.001,
           price=int(last_price))
購入・売却金額は price=int(last_price))としており現在値で指していきます。amount=0.001の数字が売買するビットコインです。

残高がなかったりするとエラーで止まりますが、とりあえず自動売買ができます。
下がってから購入し、上がってから売るので儲かる… ハズ笑

マネするときは自己責任でお願いします。というかそもそもラズパイでやる必要があるのかどうか・・。
















拍手[1回]

PR

05/12

Sun

2019

OpenCVとAWSで庭に来た猫の写真をアップロードする。

うちの庭には猫がしょっちゅう来るので来たらAWSのS3へアップロードするようなカメラを作ってみました。



まずはOpenCVで猫を認証できるようにします。 →こちらの記事参考にお願いします。
猫の学習モデルから画像を認識して画像を保存、AWSへアップロードしていきます。
→AWSの設定、アップロードはこちら


コード例としてはこんな具合です。
import sys
import cv2
import subprocess
import time
if __name__ == '__main__':
    try:
      
        #cascade_path = "/home/pi/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_default.xml" 顔
        cascade_path = "/home/pi/opencv-3.1.0/data/haarcascades/cascade.xml"#ネコ
        cascade = cv2.CascadeClassifier(cascade_path)
        capture = cv2.VideoCapture(0)
        if capture.isOpened() is False:
            raise IOError("VideoCapture could not open.")
       
        while True:
           
            ret, image = capture.read()
            if ret == False:
                continue
           
            facerect = cascade.detectMultiScale(image, scaleFactor=1.2, minNeighbors=2, minSize=(10, 10))
           
            color = (255, 255, 255)     
            for rect in facerect:
                cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2] + rect[2:4]), color, thickness=2)
                #GPIO.output(18, True)
                time.sleep(1)
                #GPIO.output(18, False)
                cv2.imwrite("img.png", image);
                subprocess.check_call(['python3','file2.py'])
                break
            
            cv2.imshow("FaceDetection", image)
            cv2.waitKey(1)
    except KeyboardInterrupt  :         
        print("\nCtl+C")
    except Exception as e:
        print(str(e))                   
    finally:
        capture.release()              
        cv2.destroyAllWindows()         
        for i in range (1,5):
            cv2.waitKey(10)             
        print("\nexit program")         
  
OpenCVで猫を認識したら画像を保存すると同時にfile2.pyというpythonファイルを実行しています。
 
subprocess.check_call(['python3','file2.py'])

冒頭でimport subprocessという一文も忘れないでください。

ちなみにfile2.pyはこうです。
import sys
import threading
import boto3
BUCKET_NAME = '*********************'
class ProgressCheck(object):
    def __init__(self, filename):
        self._filename = filename
        self._size = int(os.path.getsize(filename))
        self._seen_so_far = 0
        self._lock = threading.Lock()
    def __call__(self, bytes_amount):
        with self._lock:
            self._seen_so_far += bytes_amount
            percentage = (self._seen_so_far / self._size) * 100
            sys.stdout.write(
                    "\r%s / %s (%.2f%%)" % (
                        self._seen_so_far, self._size,
                        percentage))
            sys.stdout.flush()
def UploadToS3():
    # S3Connection
    s3 = boto3.resource('s3')
    s3.Object(BUCKET_NAME, 'img.png').upload_file('img.png')
   
UploadToS3()  
BUCKET_NAMEはS3のバゲットの名前です。

ファイル名はここで入力します
s3.Object(BUCKET_NAME, 'img.png').upload_file('img.png')
このファイルfile2.pyはOpenCVと同じフォルダに入れてください。

これで猫を認識したと同時にアップロードされます。S3のバゲットを公開していればどこからでも
ブラウザでチェックできます。

AWSを使うと簡単にラズパイと連携できます。おススメですよ!










拍手[0回]

05/03

Fri

2019

冷却塔清掃のコツ



大型のターボ冷凍機が現場にあればついてくる冷却塔・・。今回は清掃のコツをお教えしたいと思います。



えっ 業者にやらせてる? 最近多いですよね自分たちでやらない現場。
たまにはやったほうがいいですよ! 


 まずはなぜ冷却塔を清掃するのか説明します。

実は建築物環境衛生管理基準で定められています。
汚れの点検は一か月おき、清掃は最低年1回です。
メーカ水準は月一回、空研工業の冷却塔では本体に書いてあったりします。

まあ現場でちがいますが、1~3か月ごとに清掃しているのがほとんどかと思います。
定期的に実施しましょう。 掃除しないと…

・ストレーナがつまり、冷却水の流量がでない(最悪冷凍機止まるよ)
・プレート熱交や冷凍機本体のチューブ熱交が汚れて熱伝達が悪くなる(性能が落ちる)

といったことがおきてしまいますよ~


続いて準備です。
道具はこんな感じ。

ホースと散水ノズル 

手袋、マスクなどの保護具
デッキブラシ 
土嚢袋


準備ができたら、まず冷却塔ファンと冷却水ポンプの電源を切ります。
清掃中の誤動作防止のためです。ファンベルトがある場合はゆるみがないかこの機会に確認しておきましょう。


続いて冷却塔の水抜きです。 排水バルブを開いて冷却水を抜きます。
抜きながら清掃をすると時間の短縮になります。開いたバルブがわかるように養生テープで印をつけておいたほうがいいです。(冷却塔清掃後は復旧忘れが結構多いです)
屋上に設置する場合に気を付けなければいけないのですが、スケールを大量に排水すると排水口がつまります。土嚢袋でスケールだけ回収するようにしましょう。


水が抜けたら冷却塔の内部をデッキブラシでごしごしします。
冷却塔の内部はFRPでできているので踏むと割れます。注意して下さい。
ブラシが入らないところは水圧で汚れをとります。
清掃で忘れてはいけないのが導電率計です。センサーが汚れていると、冷却水をよけいにブローして水道代が無駄になります。必ず清掃しましょう。


冷却塔清掃のあとは水を張る前に配管ストレーナーの清掃をします。
ここは省略してもいいのですが、スケールが流れてつまりやすくなっている可能性が高いです。
フランジを外してストレーナーを清掃します。 あまりにも詰まる場合は、メッシュが細かすぎる場合があります。チェックしてください。


清掃が一通り終わったら今度は水を入れていきます。
排水バルブをしめて、給水のバルブを開けていきます。このときブローのバイパスバルブなど開けられるバルブを全部開けるとはやく水が溜まります。自分はホースも突っ込んで水をいれてました笑

水がたまったら今度は薬液を入れます。手などにかからない様に注意してください。
自動で薬液を注入するポンプがあればそれも確認して下さい。常時運転していると薬液が漏れてしまっていたりします。


↑こういう薬注ポンプでもれてたら一式更新です。

最後は冷却水ポンプで試運転します。 エアかみに注意して下さい。流量、電流を記録して問題ないことを確認してから冷凍機運転に入って下さい。

本当は冷却塔側面のフィンなども清掃したほうがいいんですが、そこは業者にお願いしてケルヒャーなんかでやったほうがいいと思います。年に1回ぐらいはお金をかけましょう!

そのほかビルメンなら知ってると思いますが…

・散水すると下水道料金が安くなるのでメータを読んでおきましょう。
・工場なんかで工水使ってると倍はよごれます。
・水質検査結果から薬液を再検討すると安くなるかも
・トイレ、食堂の排気ダクトが近くにあるとレジオネラが発生しやすくなる

参考になったでしょうか? これから夏場は作業がきつくなりますが頑張ってください!!

















拍手[0回]

05/02

Thu

2019

【DIY】アクリルとLEDで光るスタンド制作

近所の家電量販店でアクリル板のきれいなスタンドを見つけたのでマネして作ってみました。




材料は・・。

アクリル板 (厚さ5mm)

LED (できれば抵抗付き5V仕様のものが使いやすいです。秋月で買えます。)
土台(今回は3Dプリンタで作成、木でもいいと思います。)
ブレッドボード & 配線
arduinoなど(電源が供給できればなんでもいいです)


道具としては
アクリルカッター

紙やすり
3Dプリンタ

って具合です。


まずはアクリル版の表面の紙部分に定規で線を引いてその上から削ります。

キュー・・・・キュキュ・・・

5mmだとかなり根気がいりますが、厚さの1/3は削っていきます。
最後は机の角などでパキッと割れるはずです。

即断面はきれいにヤスリ掛けします。
(僕は不器用なので美大卒の奥さんにきれいにしてもらいました、さすが!)

続いて土台です。テッシュ箱のような形に作ります。


べつにこれはLEDがおさまればどんな素材でもいいと思います。
ちなみにLEDは横に並べるので端がとれるブレッドボードがいいです。



あとは光らせてアクリルを乗せるだけ。


青もまあまあいい感じです。
















拍手[0回]

04/14

Sun

2019

ラズパイとTkinterで温度のGUI監視

やっとというか、遂にというか温度監視をGUIでできました。pythonのGUIツールTkinterを使ってます。

今まではSlackでつぶやいたり、単発だったのですが、今回は連続監視です。


ラズパイと接続している素子はadt7410ってていう温度センサーでI2Cで通信しています。




↑↑マイニングマシンのグラボ排気をリアルタイムで計測しています。
けっこう素子の反応が良くて0.7秒毎でもいけそうです。(GUIはもっさりしますが)
import smbus
import time
import sys
import RPi.GPIO as GPIO
import tkinter as tk
GPIO.setmode(GPIO.BCM)
 
i2c = smbus.SMBus(1)
address = 0x48
root = tk.Tk()
root.geometry("600x300")
t = tk.Label(text='温度[℃]',font = ('', 70))
t.pack()
while True :
 block = i2c.read_i2c_block_data(address, 0x00, 12)
 temp = (block[0] << 8 | block[1]) >> 3
    
 
 print("Temperature:%6.2f" % (temp / 16.0))
 time.sleep(0.7)
               
 temp2 = (temp / 16.0)
 s = tk.Label(text=temp2,font = ('', 70))
 s.pack()
 s.update()
 s.forget()
root.mainloop()
 
正直、かなりTkinterは手ごわいです。update()とかforget()の使い方を間違えるとブラクラみたいになります笑 一度表示した数値を消して上書きするのは大変でした。

t = tk.Label(text='温度[℃]',font = ('', 70))
↑このあたりもtext=をいれないとAttributeError: 'Label' object has no attribute '_w'となったりします。
変数がNoneになった時に出るそうですが…

これをうまく使えばモニターで常時監視できそうです、温度以外ではビットコインをやってみました。



モニターによってはGPIOが死んでしまいますが…


もうちょっと勉強すればデジタルサイネージ、設備監視装置なんてできる・・・ かも。















拍手[0回]

翻訳(Translate)

AD

シェアしてね

プロフィール

HN:
アルティメット雅史
性別:
男性
自己紹介:
製油所、データセンター、化学工場を渡り歩いた設備のマニア
最近はarduino,Raspberry pi等の電子工作にハマる。
取得資格は電験3種、消防設備士甲4、2級ボイラー技士、危険物乙4、電工2種、技術士補(電気・電子)、エネ電、フォークリフトほか

カウンター

お問い合わせ

忍者アクセスランキング

Copyright © 設備のマニアどっとこむ : All rights reserved

TemplateDesign by KARMA7

忍者ブログ [PR]