3D打印机

四年前淘宝上买套件组装的3D打印机,开始一段时间用得比较多,最近一两年多都在吃灰,隔几个月偶尔打印点小东西。年前都开始出现问题,一直没解决。这几天准备打印点东西,结果是各种问题,慢慢解决逐个填坑。

最开始遇到的是 MINTEMP,网上搜了一下,各种原因都有。开机正常,一加热就出现MINTEMP,测过温度探头,没发现问题。只加热打印头不会出现,但是加热速度很慢。再结合屏幕出现闪烁的情况,怀疑电源出问题。果然一测输出电压只有6点几伏,幸好有备用的12V电源,更换后问题解决。

接下来打印的时候,打印质量下降太多,打印到中途喷嘴出丝不够连续。换了喷嘴、换了新的材料,结果又出现喉管松了。一系列折腾下来总算可以用了,质量还是不如之前,还要调整。

Linux下搞ESP8266的工具

虽然多在windows下用,但是偶尔也会用到Linux。记录一下,免得搞忘了。
esp8266和micropytho配合相当不错,Linux下刷固件的工具主要就是esptool.py,直接pip安装

擦除sudo esptool.py --port /dev/ttyUSB0 erase_flash

刷固件
sudo esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-20190125-v1.10.bin

串口工具用picocom,方便简单。sudo picocom /dev/ttyUSB0 -b 115200

其实在linux更方便一些吧,也可以更专注一些。

低成本实现远程开门

因为家里人经常忘带钥匙,结果就是要么我去送钥匙、要么他们来拿钥匙。一直想换智能门锁,家里是老式防盗门,淘了很久也没遇到合适的,反正就只需要一个远程开门的功能就行,指纹密码啥的不是刚需。这些年零零散散的淘了很多电子配件,一直都没怎么用,索性自己弄一个吧。

ESP12-F刷micropython,连接MQTT服务器控制步进电机的运动,通过机械结构拉开门锁(相当于是室内的人开门)。通过手机上的mqtt应用来实现远程开门。前提需要自建MQTT服务器,通过SSL认证和用户密码认证保证安全。还需要3D打印机做一些安装支架。
IMG_20190413_002403-副本.jpg

阅读剩余部分...

micropython驱动步进电机

为了驱动步进电机,找了N多源码,有些太过高深看不懂,所以找了个相对简单的(这里)改了一下,实测能驱动28BYJ-48,采用的ULN2003APG驱动板。

import time
from machine import Pin

speed = 2
STEPER_ROUND=512 #转动一圈(360度)的周期
ANGLE_PER_ROUND=STEPER_ROUND/360 #转动1度的周期
#print('ANGLE_PER_ROUND:',ANGLE_PER_ROUND)
p1 = Pin(16, Pin.OUT, value=0)
p2 = Pin(14, Pin.OUT, value=0)
p3 = Pin(12, Pin.OUT, value=0)
p4 = Pin(13, Pin.OUT, value=0)

def Front():
    global speed
       
    p1.value(1)
    p2.value(1)
    p3.value(0)
    p4.value(0)
    time.sleep_ms(speed)

    p1.value(0)
    p2.value(1)
    p3.value(1)
    p4.value(0)
    time.sleep_ms(speed)

    p1.value(0)
    p2.value(0)
    p3.value(1)
    p4.value(1)
    time.sleep_ms(speed)

    p1.value(1)
    p2.value(0)
    p3.value(0)
    p4.value(1)
    time.sleep_ms(speed)
     
def Back():
    global speed
     
    p1.value(1)
    p2.value(1)
    p3.value(0)
    p4.value(0)
    time.sleep_ms(speed)
     
    p1.value(1)
    p2.value(0)
    p3.value(0)
    p4.value(1)   
    time.sleep_ms(speed)
     
    p1.value(0)
    p2.value(0)
    p3.value(1)
    p4.value(1)
    time.sleep_ms(speed)
 
    p1.value(0)
    p2.value(1)
    p3.value(1)
    p4.value(0)
    time.sleep_ms(speed)
 
 
def Stop():
    p1.value(0)
    p2.value(0)
    p3.value(0)
    p4.value(0)
     
def Run(angle):
    global ANGLE_PER_ROUND
     
    val=ANGLE_PER_ROUND*abs(angle)
    if(angle>0):
        for i in range(0,val):
            Front()
    else:
        for i in range(0,val):
            Back()
    angle = 0
    Stop()
 
def main():
    SteperRun(180)
    SteperRun(-180)