如何纯python寻仙咔咔跑

十九届智能车百度组车模,随手寻个线先。 改良了以前遍历像素慢得扣的问题,用numpy解决了这个问题 #encoding: utf-8 import cv2 import numpy as np import serial import time import sys from simple_pid import PID p = PID(Kp=0.23 , Ki=0, Kd=0.01,setpoint=320, output_limits=(-50, 50)) left_start = 0 right_start = 640 up_start = 190 down_start…

使用IIC协议在Arduino和树莓派中传递字符串

写在前面 这篇文章是在树莓派上写的,正好写完代码 1 树莓派传输 1.1 前置工作 首先:打开树莓派的iic 如果你使用的是图形桌面,非常好,直接在左上角首选项>Raspberry Pi Configuration>Interfaces 里面把i2c打开就可以 如果你用的命令行,在终端输入sudo raspi-config 1.2 查看你的iic设备地址 先安装必要的工具:sudo apt-get install i2c-tools 查看所有iic设备的地址:i2cdetect -y 1 从i2c设备读出所有寄存器的值: sudo i2cdump -y 1 <设备地址> 往某一个iic设备中的某一个寄存器中写入某一个值:sudo i2cset -y 1 <设备地址&…

DIY激光雷达

前言:用arduino 和舵机和激光测距搓的,具体实现明天再写,好困啊\ Part1 什么是激光雷达 雷达很好理解(这里不讨论相控阵那种怪物),想象成旋转的测距仪。用电磁波发射与返回的时间差测得距离,而波长变化的测量甚至可以使用开普勒效应来得知被测物体的速度。 而我们因为没有能够在实验室这么小范围内还能正常定向发射的电磁波原(有也买不起,买得起也会被抓去谈话)所以退而求其次使用了激光测距的方法,原理与电磁波一模一样,都是电磁波嘛(笑。但是测量速度的功能就给砍了。 Part2 搓一个 那么对于角度的感知本来想用步进电机的,但是考虑到丢步的问题,还得用霍尔或者别的啥方法来校准,实在不太优雅,所以选择了舵机作为旋转的底座。 理论存在,实践可行,返回的数据包括角度与距离,那么只需要可视化这两个数据就可以啦,显示我们使用了一块oled的小屏幕,基本所有的东西都是自己以前做过的,所以非常好写。 #include <Wire.h> #include <Servo.h> #include <SparkFun_…

树莓派pico的无源蜂鸣器音乐库

实验室有人买了一大堆蜂鸣器,手边正好又有pico,就写了个库 class Play_music: ''' 使用蜂鸣器来在pico上面播放最多八个声道的音乐 using buzzer to play music on raspberry pico channel_1~8的gpio引脚将设置为0,2,4,6,8,10,12,14 the channel_1~8 is for gpio 0,2,4,6,8,10,12,14 请确保列表长度相同(我懒了) please make sure that the…

(还在写)电子DIY入门指北

前言 编者自己の话 什么是电子DIY?其实我也没法有个很好的定义,但是可以通过讲故事的方法来讲讲。 有没有看过你买的电脑的接口?一台新的,漂亮的,现代的电脑的接口。比如我的surface pro8除了充电和耳机就只有两个雷电4接口了。或者说叫做usb4接口。USB-Universal Serial Bus通用串行总线协议,从u盘到打印机,相当通用,相当好用,但是你能不能使用这个接口来物理意义地控制一些设备呢? 答案是否定的,在接口的进化中早已失去了那种直接与物理设备进行控制的功能,这是合理且美好的,但是不可避免地,会少很多好玩的事情。 在上古时代(也就是十来年前我还在上幼儿园之前)那个时候的电脑是有很多很丑陋的接口的 那个小小的梯形可不是vga接口哦,这些都是COM口(串口),怎么说捏,这个东西的协议可多了TTL、RS-232、RS-485一堆,一般用来连打印机,各种奇奇怪怪的工控设备之类的玩意,现在已经基本见不到了。因为“通用串行总线协议”统一了这一大堆东西。 但是总是存在一些爱好者觉得生活中的东…

基于esp32和VFD屏的天气小电视重制版

去年做了个基于oled屏幕的小电视,但是受限于技术力和屏幕尺寸限制,做出来的东西只能说是很不完善。 正好看到了vfd屏幕,很酷,决定做一个。 1 用u8g2库点亮vfd屏幕 1.1 u8g2库的安装 淘宝卖家给了个魔改过的u8g2库,我很不解,但是很好用(bushi vfd屏u8g2库 – 天鹅绒房间 (qwqpap.xyz) 关于u8g2库的安装这里简略说明 解压放在你arduino ide 的\Arduino\libraries\下就可以。 1.2 u8g2库的使用方法 首先我们需要屏幕驱动的名字,然后创建对应的对象就可以啦。 对于本例而言,我们使用一块分辨率 256*50, 驱动为GP1287AI的vfd屏幕,故你的代码应该开头包含这样一段 #include <U8g2lib.h> U8G2_GP1287AI_256X50_1_3W_HW_SPI u8g2(…

ESP32使用TFT屏幕全踩坑指南

写在前面 前几天买了个tft屏幕,一路使用心路很曲折,故把踩坑过程写出来,方便日后查看 是一个st7789,240*240分辨率的屏幕 1 物理连接 网上全是各种各样不同的教程,给我整麻了,后面摸索出来了。 GPIO23—-SDA GPIO18—-SCK GPIO4—-RES GPIO2—-DC VCC—-5V(3V3都可以) GND—-GND 似乎是线最好要等长,短一点更好,好像干扰还不小。 2 TFT_eSPI库的初始化 很像u8g2库的使用。 2.1 安装库, 如果你用的是arduino ide 可以直接在库管理里面搜这个库就有了,如果不是的话可以去这个链接下。 2.2 设置库 下一步就是找到项目文件夹下的libraries文件夹(也就是库文件存放的地方),打开TFT_eSPI文件夹,打开User_Setup_Select.…

基于ARDUINO的PID巡线小车

我丢一个github仓库在这里 文章结构 * l298n的使用 * 传感器数据的获得和处理 * Pid的使用 * 差速转向的方法 第一部分 l298n的使用 Part1 PWM(脉宽调制信号)的认识与arduino的实现 PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。 在本例中,主要的作用是用于控制L298N输出的电压来从而控制电机的转速 Part2:L298N的使用 关于怎么接线的问题,在本例中,我们对于上图的A/B相跳帽就不要拔下来,对输入1/2认为是控制通道A的电机转速…