#2023 10 15 派大星改
# object classifier boot.py
# generated by maixhub.com
from fpioa_manager import *
from modules import ultrasonic
from fpioa_manager import fm
from Maix import GPIO
import math
import struct
import sensor, image, lcd, time
import KPU as kpu
import gc, sys
from Maix import GPIO
from machine import UART
from machine import Timer,PWM
#
#
i= 8
# 定义超声波传感器的触发引脚和回响引脚
trig_pin = 0
echo_pin = 1 #控制串口通信
board_info_tx=15
board_info_rx=17
# 将GPIO口初始化为输入/输出模式
fm.register(trig_pin, fm.fpioa.GPIO0)
fm.register(echo_pin, fm.fpioa.GPIO1)
trig = GPIO(GPIO.GPIO0, GPIO.OUT)
echo = GPIO(GPIO.GPIO1, GPIO.IN)
tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM) #控制2个云台舵机
S1 = PWM(tim, freq=50, duty=0, pin=21)
tim = Timer(Timer.TIMER1, Timer.CHANNEL0, mode=Timer.MODE_PWM)
S2 = PWM(tim, freq=50, duty=0, pin=23) value = 0xFF
s = struct.pack('B', value)
list_of_values = [255]*3
s = struct.pack('3B', *list_of_values) #串口通信结束符 fm.register(board_info_tx,fm.fpioa.UART1_TX,force=True)
fm.register(board_info_rx,fm.fpioa.UART1_RX,force=True)
uart_A = UART(UART.UART1, 115200, 8, None, 1, timeout=1000, read_buf_len=4096)
#uart_A = UART(UART.UART1, 115200,read_buf_len=4096) def Servo_1(servo,angle):
S1.duty((angle+90)/180*10+2.5) #竖直舵机
def Servo_2(servo,angle):
S2.duty((angle+90)/270*10+2.5) #水平舵机
#超声波
def measure_distance():
trig.value(0) # 发送触发信号
time.sleep_ms(2)
trig.value(1)
time.sleep_us(10)
trig.value(0)
start_time = time.ticks_ms()
while echo.value() == 0 and time.ticks_diff(time.ticks_ms(), start_time) < 3000:
pass # 如果等待超时,返回错误代码 -1
if time.ticks_diff(time.ticks_ms(), start_time) >= 3000:
print("Error: no echo received!")
return -1 # 记录回响信号的时间戳
t1 = time.ticks_us()
while echo.value() == 1:
pass
t2 = time.ticks_us() print(t2)
# 计算距离(单位:厘米)
duration = t2 - t1
distance = duration * 0.017
print(distance)
if distance < 15: #距离判断
write_str = ("t20.bco=63488")
uart_A.write(write_str)
print("满载")
uart_A.write(s)
else:
write_str = ("t20.bco=34784")
uart_A.write(write_str)
print("未满载")
uart_A.write(s)
return def lcd_show_except(e):
import uio
err_str = uio.StringIO()
sys.print_exception(e, err_str)
err_str = err_str.getvalue()
img = image.Image(size=(224,224))
img.draw_string(0, 10, err_str, scale=1, color=(0xff,0x00,0x00))
lcd.display(img)
#开机启动
########################################################################################################################
def main(labels = None, model_addr="/sd/m.kmodel", sensor_window=(224, 224), lcd_rotation=0, sensor_hmirror=False, sensor_vflip=False):
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing(sensor_window)
sensor.set_hmirror(sensor_hmirror)
sensor.set_vflip(sensor_vflip)
sensor.run(1) lcd.init(type=1,invert=1) #小LCD屏幕
lcd.rotation(lcd_rotation)
lcd.clear(lcd.WHITE)
if not labels:
with open('labels.txt','r') as f:
exec(f.read())
if not labels:
print("no labels.txt")
img = image.Image(size=(320, 240))
img.draw_string(90, 110, "no labels.txt", color=(255, 0, 0), scale=2)
lcd.display(img)
return 1
try:
img = image.Image("startup.jpg")
lcd.display(img)
except Exception:
img = image.Image(size=(320, 240))
img.draw_string(90, 110, "loading model...", color=(255, 255, 255), scale=2)
lcd.display(img)
task = kpu.load(model_addr)
try:
####################################循环######################################################################################
a= 0
while(a<3):
print("启动")
write_str = ("page main") #跳到计数主屏幕
uart_A.write(write_str)
uart_A.write(s)
print(write_str)
a+=1 while(True):
Servo_1(S1, i)
Servo_2(S2, 0)
time.sleep_ms(500)
measure_distance() #满载检查
print("满载jianche ")
write_str = ("n5.val=0") #初始化串口屏幕
uart_A.write(write_str)
uart_A.write(s)
print(write_str)
while(True): img = sensor.snapshot()
t = time.ticks_ms()
fmap = kpu.forward(task, img)
t = time.ticks_ms() - t
plist=fmap[:]
pmax=max(plist) #判断最大置信度
if pmax < 0.4: #检测空物品
empty_str = "Not subject"
img.draw_string(0, 0, empty_str, scale=2)
lcd.display(img)
Servo_1(S1, i)
Servo_2(S2, 0)
break
max_index=plist.index(pmax)
img.draw_string(0,0, "%.2f : %s" %(pmax, labels[max_index].strip()), scale=2)
img.draw_string(0, 200, "t:%dms" %(t), scale=2)
lcd.display(img) if plist.index(pmax)==0 or plist.index(pmax)==6: #fruit "vegetable" 厨余垃圾
if pmax >= 0.5: time.sleep_ms(50) #等待垃圾掉落待静止的时间
Servo_2(S2,90)
time.sleep_ms(1000)
Servo_1(S1,-20)
time.sleep_ms(1500)
#write_str = ()
Servo_1(S1,i)
time.sleep_ms(400)
Servo_2(S2,0)
time.sleep_ms(1000)
uart_A.write("t7.txt=\"厨余垃圾\"")
print("厨余垃圾ok")
uart_A.write(s) time.sleep_ms(450) #舵机归位
Servo_1(S1,i)
time.sleep_ms(450)
break
#time.sleep_ms(500) #等待垃圾掉落待静止的时间 if plist.index(pmax)== 1 or plist.index(pmax)==2 or plist.index(pmax)== 7: #capsule 有害垃圾
if pmax >= 0.6: #0.5 time.sleep_ms(50) #时隔几秒后继续检测垃圾
#Servo_2(S2,90)
#time.sleep_ms(500)
Servo_1(S1,-30)
time.sleep_ms(1500)
#write_str = ()
uart_A.write("t7.txt=\"有害垃圾\"")
print("有害垃圾ok")
uart_A.write(s) time.sleep_ms(450) #舵机归位
Servo_1(S1,i)
Servo_2(S2,0)
time.sleep_ms(450)
break if plist.index(pmax)==4 or plist.index(pmax)==8: #bottle 可回收垃圾
if pmax >= 0.5: time.sleep_ms(50) #等待垃圾掉落待静止的时间
Servo_2(S2,180)
time.sleep_ms(1000)
Servo_1(S1,-20)
time.sleep_ms(1500)
#write_str = ()
Servo_1(S1,i)
time.sleep_ms(400)
Servo_2(S2,0)
time.sleep_ms(1000)
uart_A.write("t7.txt=\"可回收垃圾\"")
print("可回收垃圾ok")
uart_A.write(s)
time.sleep_ms(1200) #舵机归位
break if plist.index(pmax)==3 or plist.index(pmax)== 5 or plist.index(pmax)== 9: #cigarette 其他垃圾
if pmax >= 0.7: #0.5 time.sleep_ms(50) #等待垃圾掉落待静止的时间
Servo_2(S2,-90)
time.sleep_ms(1000)
Servo_1(S1,-20)
time.sleep_ms(1500)
#write_str = ()
Servo_1(S1,i)
time.sleep_ms(400)
Servo_2(S2,0)
time.sleep_ms(1000) uart_A.write("t7.txt=\"其他垃圾\"")
print("其他垃圾ok")
uart_A.write(s)
time.sleep_ms(450) #舵机归位
Servo_1(S1,i)
Servo_2(S2,0)
time.sleep_ms(500)
break
uart.deinit() # uart.deinit()和kpu.deinit(task)用于关闭UART和释放模型资源。
del uart
except Exception as e:
raise e
finally:
if not task is None:
kpu.deinit(task) if __name__ == "__main__":
try :
#labels = ["bottle", "brick", "capsule", "pill", "stone", "vegetable"]
#labels = ["chuyu", "dainci", "jiaolang", "shitou", "shuiping", "taoci", "yaobaozhung", "yilaguan"]
labels = ["chuyu", "dainci", "jiaolang", "shitou", "shuiping", "taoci", "xiaotudou", "yaobaozhung", "yilaguan", "zhuangtou"]
main(labels=labels, model_addr="/sd/m.kmodel")
except Exception as e:
sys.print_exception(e)
lcd_show_except(e)
finally:
gc.collect()

材料:陶晶驰串口屏,k210,云台,电动推杆,arduino uon ,超声波,

超声波代码:

import time
from fpioa_manager import fm
from Maix import GPIO # 定义超声波传感器的触发引脚和回响引脚
trig_pin = 0
echo_pin = 1 # 将GPIO口初始化为输入/输出模式
fm.register(trig_pin, fm.fpioa.GPIO0)
fm.register(echo_pin, fm.fpioa.GPIO1)
trig = GPIO(GPIO.GPIO0, GPIO.OUT)
echo = GPIO(GPIO.GPIO1, GPIO.IN) def measure_distance():
# 发送触发信号
trig.value(0)
time.sleep_ms(2)
trig.value(1)
time.sleep_us(10)
trig.value(0) # 等待回响信号
while echo.value() == 0:
pass
t1 = time.ticks_us() while echo.value() == 1:
pass
t2 = time.ticks_us() # 计算距离(单位:厘米)
duration = t2 - t1
distance = duration * 0.034 / 2
return distance while True:
distance = measure_distance()
print("Distance: %.2f cm" % distance)
time.sleep(1)

拍照代码:

import sensor, lcd
from Maix import GPIO
from fpioa_manager import fm
from board import board_info
import os, sys
import time
import image #### image size ####
set_windowing = (224, 224) #### sensor config #### sensor.reset(freq=22000000, dual_buff=False)
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA) # 320x240
try:
sensor.set_jb_quality(95) # for IDE display quality
except Exception:
pass # no IDE support
if set_windowing:
sensor.set_windowing(set_windowing) sensor.skip_frames() #### lcd config ####
lcd.init(type=1, freq=15000000)
lcd.rotation(2) #### boot key ####
boot_pin = 16 # board_info.BOOT_KEY
fm.register(boot_pin, fm.fpioa.GPIOHS0)
key = GPIO(GPIO.GPIOHS0, GPIO.PULL_UP) ###################################################### #### main ####
def capture_main(key):
def draw_string(img, x, y, text, color, scale, bg=None , full_w = False):
if bg:
if full_w:
full_w = img.width()
else:
full_w = len(text)*8*scale+4
img.draw_rectangle(x-2,y-2, full_w, 16*scale, fill=True, color=bg)
img = img.draw_string(x, y, text, color=color,scale=scale)
return img def del_all_images():
os.chdir("/sd")
images_dir = "cap_images"
if images_dir in os.listdir():
os.chdir(images_dir)
types = os.listdir()
for t in types:
os.chdir(t)
files = os.listdir()
for f in files:
os.remove(f)
os.chdir("..")
os.rmdir(t)
os.chdir("..")
os.rmdir(images_dir) # del_all_images()
os.chdir("/sd")
dirs = os.listdir()
images_dir = "cap_images"
last_dir = 0
for d in dirs:
if d.startswith(images_dir):
if len(d) > 11:
n = int(d[11:])
if n > last_dir:
last_dir = n
images_dir = "{}_{}".format(images_dir, last_dir+1)
print("save to ", images_dir)
if images_dir in os.listdir():
img = image.Image()
img = draw_string(img, 2, 200, "please del cap_images dir", color=lcd.WHITE,scale=1, bg=lcd.RED)
lcd.display(img)
sys.exit(1)
os.mkdir(images_dir)
last_cap_time = 0
last_btn_status = 1
save_dir = 0
save_count = 0
os.mkdir("{}/{}".format(images_dir, save_dir))
while(True):
img0 = sensor.snapshot()
if set_windowing:
img = image.Image()
img = img.draw_image(img0, (img.width() - set_windowing[0])//2, img.height() - set_windowing[1])
else:
img = img0.copy()
# img = img.resize(320, 240)
if key.value() == 0:
time.sleep_ms(30)
if key.value() == 0 and (last_btn_status == 1) and (time.ticks_ms() - last_cap_time > 500):
last_btn_status = 0
last_cap_time = time.ticks_ms()
else:
if time.ticks_ms() - last_cap_time > 5000:
img = draw_string(img, 2, 200, "release to change type", color=lcd.WHITE,scale=1, bg=lcd.RED)
else:
img = draw_string(img, 2, 200, "release to capture", color=lcd.WHITE,scale=1, bg=lcd.RED)
if time.ticks_ms() - last_cap_time > 2000:
img = draw_string(img, 2, 160, "keep push to change type", color=lcd.WHITE,scale=1, bg=lcd.RED)
else:
time.sleep_ms(30)
if key.value() == 1 and (last_btn_status == 0):
if time.ticks_ms() - last_cap_time > 5000:
img = draw_string(img, 2, 200, "change object type", color=lcd.WHITE,scale=1, bg=lcd.RED)
lcd.display(img)
time.sleep_ms(1000)
save_dir += 1
save_count = 0
dir_name = "{}/{}".format(images_dir, save_dir)
os.mkdir(dir_name)
else:
draw_string(img, 2, 200, "capture image {}".format(save_count), color=lcd.WHITE,scale=1, bg=lcd.RED)
lcd.display(img)
f_name = "{}/{}/{}.jpg".format(images_dir, save_dir, save_count)
img0.save(f_name, quality=95)
save_count += 1
last_btn_status = 1
img = draw_string(img, 2, 0, "will save to {}/{}/{}.jpg".format(images_dir, save_dir, save_count), color=lcd.WHITE,scale=1, bg=lcd.RED, full_w=True)
lcd.display(img)
del img
del img0 def main():
try:
capture_main(key)
except Exception as e:
print("error:", e)
import uio
s = uio.StringIO()
sys.print_exception(e, s)
s = s.getvalue()
img = image.Image()
img.draw_string(0, 0, s)
lcd.display(img)
main()

红外:

# Untitled - By: 凄雨冷夜孤人 - 周三 12月 2 2020

import sensor, image, lcd, time
import KPU as kpu
import gc, sys import time,machine
from machine import Timer
from board import board_info
from fpioa_manager import *
from fpioa_manager import fm
from Maix import GPIO
from machine import UART
import utime
#↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓UART
fm.register(0, fm.fpioa.UART1_TX, force=True)
fm.register(1, fm.fpioa.UART1_RX, force=True)
uart_A = UART(UART.UART1, 1200, 8, 0, 0, timeout=1000, read_buf_len=4096)
fm.register(2,fm.fpioa.GPIO4)
fm.register(3,fm.fpioa.GPIO5)
tiggerPin=GPIO(GPIO.GPIO5, GPIO.OUT)
tiggerPin.value(1)
slaveReset=GPIO(GPIO.GPIO4, GPIO.OUT)
slaveReset.value(1)
time.sleep(1)
slaveReset.value(0)
time.sleep_ms(1)
slaveReset.value(1)
time.sleep(1)
def UARTsendMessgae(write_str):
global tiggerPin
uart_A.write(write_str)#串口A发送
#print(write_str)
tiggerPin.value(0)
utime.sleep_ms(1)
tiggerPin.value(1)
#↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑UART
harmfulGarbage=("有害垃圾","battery",)#这些 数组 的 [0] 位置用于读出这些物品的类别 。[0]后的位置用于和识别结果比较以确定类别
kitchenGarbage=("厨余垃圾","fruit","vegatable")
reuseableGarbage=("可回收垃圾","bottle", "can")
otherGarbage=("其它垃圾","cigaret","brick")
freq1=100 #频率值 def angle_to_duty(angle,freq):#舵机角度换算为pwm占空比
ms=(angle*(2.47-0.45)/180)+0.45#2.47和0.45和0.45是实验观察调整得到的值,刚好使得输入0~90~180时,舵机臂在最正确的角度
duty=100*(ms/(1000/freq))
return duty
#记录系统时间以及时间差
t_1 = time.ticks_ms()
t_2 = time.ticks_ms()
ts=t_1-t_2 def detect(): #检测画面中的物品 并显示画面和信息
#全局变量
global t_1
global t_2
global ts
t_2=t_1
t_1 = time.ticks_ms()
ts=t_1-t_2
message[6]=str(ts)#这四行测得目前每张图的间隔134ms左右
img = sensor.snapshot() #捕获图像
#t = time.ticks_ms()
fmap = kpu.forward(task, img) #对捕获的图像进行物体检测
#t = time.ticks_ms() - t
plist=list(fmap[:])#将fmap转换为列表形式
plist[1]=0 #第一元素置为0(无物品)
pmax=max(plist)#找到最大的置信概率
max_index=plist.index(pmax) #找到最大置信概率对应的物体类别的索引 if(pmax>0.5): #视为有效
pass
else:#视为无效(未检测到)
max_index=1
imgDrawMessage(img) #可附加信息
#img.draw_string(0,0, "%.2f : %s" %(pmax, labels[max_index].strip()), scale=2, color=(255, 0, 0))
lcd.display(img)
#print(labels[max_index])
return labels[max_index] #返回物体类别 def detectEnsureing(originResult):#多次识别,结果和第一次识别都一样就确信识别结果正确,否则认为识别有错
garbageKind=originResult #初始化,设置为传入函数(第一次识别结果)
for ensureingTimes in range(5): #循环5次,多次识别
nowResult=detect()
if nowResult != originResult: #与最初结果相比较
garbageKind="no object"
#print("not ensure!")
break
#print("ensure!")
return garbageKind #返回最初结果或“no,,,,” message=[" "," "," "," "," "," "," "]
def imgDrawMessage(img):#把 需要与画面一起显示的信息 画在图片上
vPossion=0
for displayMessage in message:
img.draw_string(0,vPossion, b"%s" %(displayMessage.strip()), scale=2, color=(255, 0, 0),mono_space=1)
vPossion+=30 actionCount=0;
dict = {"fruit":"水果", "battery":"电池", "bottle": "瓶子","can":"易拉罐","vegatable":"菜叶等","cigaret":"烟头","brick":"砖瓦等"}
#["fruit", "no object", "battery", "bottle", "can", "vegatable", "cigaret", "brick"]
def action(garbageKind):#根据垃圾类型做出响应,舵机摆动
global actionCount #记录操作数
if garbageKind=="no object":
return #直接返回
#lcd.draw_string(100, 100,garbageKind, lcd.RED)
#time.sleep(1)
#for kindEnsure in range(5)
message[0]="处理中" #消息数组0更新为 处理中
#if garbageKind in harmfulGarbage:
for delayTimes in range(10):
detect() if (garbageKind in harmfulGarbage)and GarbageBin0.value():
actionCount+=1 #记录操作数
message[1]=harmfulGarbage[0] #将消息数组进行再次更新为对应的标签
detect() #检测标签
UARTsendMessgae(str(actionCount)+dict[garbageKind]+" "+"1"+"完成")
#调整角度
for i in range(92,20-1,-4):
pwm1.duty(angle_to_duty(i,freq1))
#print(i)
utime.sleep_ms(20)
while(detect() in harmfulGarbage):
servoShake(pwm1,(40,20))
pwm1.duty(angle_to_duty(20,freq1)) #elif garbageKind in kitchenGarbage:#带有桶满逻辑的条件是(garbageKind in kitchenGarbage)and GarbageBin0.value():
elif (garbageKind in kitchenGarbage)and GarbageBin1.value():
actionCount+=1
UARTsendMessgae(str(actionCount)+dict[garbageKind]+" "+"1"+"完成")
message[1]=kitchenGarbage[0] #将消息数组进行再次更新为对应的标签
detect() #检测
# 调整角度
for i in range(92,160+1,4):
pwm1.duty(angle_to_duty(i,freq1))
#print(i)
utime.sleep_ms(20)
while(detect()in kitchenGarbage):
servoShake(pwm1,(140,160))
pwm1.duty(angle_to_duty(160,freq1)) #elif garbageKind in reuseableGarbage:
elif (garbageKind in reuseableGarbage)and GarbageBin2.value():
actionCount+=1
UARTsendMessgae(str(actionCount)+dict[garbageKind]+" "+"1"+"完成")
message[1]=reuseableGarbage[0]
detect()
for i in range(92,160+1,4):
pwm2.duty(angle_to_duty(i,freq1))
#print(i)
utime.sleep_ms(20)
while(detect()in reuseableGarbage):
servoShake(pwm2,(160,140))
pwm2.duty(angle_to_duty(140,freq1))
#elif garbageKind in otherGarbage:
elif (garbageKind in otherGarbage)and GarbageBin3.value():
actionCount+=1
UARTsendMessgae(str(actionCount)+dict[garbageKind]+" "+"1"+"完成")
message[1]=otherGarbage[0]
detect()
for i in range(92,20-1,-4):
pwm2.duty(angle_to_duty(i,freq1))
#print(i)
utime.sleep_ms(20)
#time.sleep(1)
while(detect()in otherGarbage):
servoShake(pwm2,(40,20))
pwm2.duty(angle_to_duty(20,freq1))
for delayTimes in range(5):
detect()
message[0]="处理完成"
message[1]="无物品"
#恢复初始位置
pwm1.duty(angle_to_duty(89,freq1))
pwm2.duty(angle_to_duty(92,freq1)) #servoShakingCount=0
servoShakingState=False
def servoShake(servoName,twoAngle):
#让舵机在两个角度twoangel[0]或[1]之间来回摆,产生抖动效果。每进入一次这个函数,twoAngle[1]或[0]变为twoAngle[0]或[1]
#global servoShakingCount
global servoShakingState#全局变量 保留上次在这个函数里产生的值
servoName.duty(angle_to_duty(twoAngle[servoShakingState],freq1))
servoShakingState=not servoShakingState
#servoShakingState取反,下次进入函数时就是相反的值,产生重复进入这个函数时servoShakingState一次为0,一次为1,来回变化的效果 def checkGarbageFull():#检测四个红外对射管的输入,判断垃圾桶是否装满
if GarbageBin0.value()==0:
message[2]="有害垃圾已满" #将消息数组2的元素设置为“xxx已满”
# 从2开始,因为0,1已经在main中使用
else:
message[2]=" " if GarbageBin1.value()==0:
message[3]="厨余垃圾已满"
else:
message[3]=" " if GarbageBin2.value()==0:
message[4]="可回收垃圾已满"
else:
message[4]=" " if GarbageBin3.value()==0:
message[5]="其它垃圾已满"
else:
message[5]=" "
pass#另外三个垃圾桶的红外对射管,等机械结构确定后再接线 image.font_load(image.UTF8, 16, 16, 0x500000)
fm.register(17, fm.fpioa.GPIO0)
fm.register(16, fm.fpioa.GPIO1)
fm.register(15, fm.fpioa.GPIO2)
fm.register(14, fm.fpioa.GPIO3)
GarbageBin0=GPIO(GPIO.GPIO0, GPIO.IN,GPIO.PULL_UP)
GarbageBin1=GPIO(GPIO.GPIO1, GPIO.IN,GPIO.PULL_UP)
GarbageBin2=GPIO(GPIO.GPIO2, GPIO.IN,GPIO.PULL_UP)
GarbageBin3=GPIO(GPIO.GPIO3, GPIO.IN,GPIO.PULL_UP)
tim1= Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
tim2= Timer(Timer.TIMER0, Timer.CHANNEL1, mode=Timer.MODE_PWM)
pwm1= machine.PWM(tim1, freq=freq1, duty=angle_to_duty(89,freq1), pin=12)
pwm2= machine.PWM(tim2, freq=freq1, duty=angle_to_duty(92,freq1), pin=13)
task = kpu.load(0x300000)#,model_addr="/sd/m.kmodel",
def main(labels = None, sensor_window=(224, 224), lcd_rotation=0, sensor_hmirror=1, sensor_vflip=1):
sensor.reset(dual_buff=False)
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing(sensor_window)
sensor.set_auto_whitebal(1)
sensor.set_hmirror(sensor_hmirror)
sensor.set_vflip(sensor_vflip)
sensor.run(1)
lcd.init(type=1)
lcd.rotation(lcd_rotation)
lcd.clear(lcd.WHITE) img = image.Image(size=(320, 240))
img.draw_string(90, 110, "loading model...", color=(255, 255, 255), scale=2)
lcd.display(img) while(True):
#t = time.ticks_ms()
message[0]=" "
message[1]="无物品"
garbageKind=detect() #进行物体检测
checkGarbageFull() #检查垃圾桶是否已满,并且一直更新垃圾桶状态
if garbageKind !="no object":
message[0]="检测中" #更新消息数组状态
message[1]=" " #存储标签类型
garbageKind=detectEnsureing(garbageKind) #多次确认物体类型
#message[1]=garbageKind
action(garbageKind) #进行类型对应的操作
else:
#message[1]="no object"
pass
#t = time.ticks_ms()-t
#message[6]=str(t) kpu.deinit(task) #释放 if __name__ == "__main__":
try:
labels = ["fruit", "no object", "battery", "bottle", "can", "vegatable", "cigaret", "brick"]
main(labels=labels)# model_addr=0x300000
#main(labels=labels, model_addr="/sd/m.kmodel")
finally:
gc.collect()

项目地址:https://gitee.com/Zx11111111/2023.git

https://gitee.com/Zx11111111/2023.git

基于亚博k210+arduino 智能垃圾桶(23工训赛)的更多相关文章

  1. 亚博 Arduino智能小车实验报告

    亚博 Arduino智能小车实践报告 一.     程序安装准备 首先安装了Arduino板载USB转串口CH340驱动安装包, 若上述程序安装成功,则可以在我的电脑中找到相应的端口 本机端口号为CO ...

  2. 20135223/20135234/20135229小组——亚博 Arduino智能小车实践报告

    实验名称:Arduino智能小车组装和综合测试 实验小组成员:20135223何伟钦 20135234马启扬 20135229吕松鸿 实验日期:2015.10.27—2015.11.3 实验时长:24 ...

  3. Arduino智能小车制作报告

    Arduino智能小车制作报告 制作成员:20135224陈实  20135208贺邦  20135207王国伊 前提: Arduino,是一个开源的单板机控制器,采用了基于开放源代码的软硬件平台,构 ...

  4. Arduino智能小车实践学习报告

    Arduino智能小车实践学习报告 参与人员: 20135316 王剑桥 20135312 吴汉彦 20135319 朱锂 一. 背景了解: 单片机:将中央处理单元CPU(进行运算.控制).随机存储器 ...

  5. 基于ZigBee和STM32的智能家居控制系统的设计与实现(三)

    基于ZigBee和STM32的智能家居控制系统的设计与实现(三) 自从前两篇博客介绍了智能家居系统的基本实现机理后,收到了好多朋友的来信,和我讨论了好多的这方面的知识,在此很高兴,虽然自己做的这个所谓 ...

  6. 基于Z-WAVE 协议的LED智能照明系统的研究笔记

    LED调光基础: ☆:LED照明调光控制信号的方式有两种: 1. 通过PWM信号控制LED灯具开关电源的占空比从而实现调光: 2. 通过调光控制信号和交流电源供电线合用的两线式或三线式(例如LED相控 ...

  7. 基于Proteus仿真的Arduino学习(1)——Arduino Uno最小系统及LED的简单使用

    一.前言:  A.Arduino简介 Arduino是由一个欧洲开发团队于2005年冬季开发.其成员包括Massimo Banzi.David Cuartielles.Tom Igoe.Gianluc ...

  8. 项目总结--基于Cortex-A9平台的米兰花智能培育系统

    基于Cortex-A9平台的米兰花智能培育系统 1. 系统功能概述 本系统主要实现了模拟米兰花智能培育的过程.通过前端传感器采集相关环境因子数据经ZigBee组网发送到协调器汇总,网关通过串口读取协调 ...

  9. 【.NET Core项目实战-统一认证平台】基于jackcao博客使用VSCode开发及感悟One搭建开发环境

    原博客系列文章链接:https://www.cnblogs.com/jackcao/ 金焰的世界 感谢博主无私的奉献,感谢博主幼儿班的教学 基于jackcao博客使用VsCode开发及感悟One搭建开 ...

  10. 电竞行业年轻新潮流yabo055解读亚博电竞3.0时代

    据相关统计,目前我国电竞行业yabo055点康姆的电竞竞菜市场规模最少在百亿级别以上,这是在以前完全不能想象的.2018年,中国正式开始进入Gaming 3.0时代.想要投入电竞行业的人员越来越多,不 ...

随机推荐

  1. Rust 学习笔记:快速上手篇

    Rust 学习笔记:快速上手篇 这篇学习笔记将用于记录本人在快速上手 Rust 编程语言时所记录的学习心得与代码实例.为此,我会在本笔记库项目的Programming/LanguageStudy/目录 ...

  2. Java List集合根据某字段去重

    去重方法 单个字段为条件去重 /** * 单字段去重 * @param jackpotList1 新集合 * @param jackpotList 需要去重的集合 * @return */ priva ...

  3. vlunhub笔记(二)earth

    (一)信息收集 开始扫描目标机ip,目标机ip:192.168.241.135 arp-scan -l 直接访问目标  ip 192.168.241.135   发现400报错 只能先去考虑扫一下信息 ...

  4. 使用$test$plusargs提高RTL验收速度

    0 前言 这段时间在整合一个小ip,因为要验证每个feature是否可行,需要用testbench + C语言的方式进行仿真验证,由于每种feature不仅要在C语言中修改寄存器配置,还要再testb ...

  5. 利用pytorch准备数据集、构建与训练、保存与加载CNN模型

    本文的主要内容是利用pytorch框架与torchvision工具箱,进行准备数据集.构建CNN网络模型.训练模型.保存和加载自定义模型等工作.本文若有疏漏.需更正.改进的地方,望读者予以指正,如果本 ...

  6. 2023-08-14:用go语言写算法。给出两个长度相同的字符串 str1 和 str2 请你帮忙判断字符串 str1 能不能在 零次 或 多次 转化 后变成字符串 str2 每一次转化时,你可以将

    2023-08-14:用go语言写算法.给出两个长度相同的字符串 str1 和 str2, 请你帮忙判断字符串 str1 能不能在 零次 或 多次 转化 后变成字符串 str2, 每一次转化时,你可以 ...

  7. [ABC142E] Get Everything

    2023-02-18 题目 题目传送门 翻译 翻译 难度&重要性(1~10):5 题目来源 AtCoder 题目算法 状压dp 解题思路 我们令 \(S\) 表示当前箱子状态,\(P_i\) ...

  8. 如何通过拼多多订单API接口获取订单详情

    要获取拼多多订单详情,可以使用以下接口: 1. API名称:pdd.order.detail.get 接口说明:此接口用于查询某个订单的详情信息. API文档地址:前往注册 调用该接口需要提供以下参数 ...

  9. 面霸的自我修养:volatile专题

    王有志,一个分享硬核Java技术的互金摸鱼侠 加入Java人的提桶跑路群:共同富裕的Java人 今天是<面霸的自我修养>第4篇文章,我们一起来看看面试中会问到哪些关于volatile的问题 ...

  10. QA|requests接口请求失败而postman请求成功原因排查|Requests

    requests接口请求失败而postman请求成功原因 代码如下 1 def ihrm_login(login_data, url1): 2 """login_data ...