这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » DIY立方米

共2条 1/1 1 跳转至

DIY立方米

助工
2018-09-25 11:22:46     打赏

Example.jpg

如上图所示,该系统可以设置为读取最多3个不同的轴,一旦每个传感器读取相应的距离,最终仪表区域读数显示在1.44“TFT中。


该项目非常适合练习Arduino中不同硬件半导体的交互,并为家庭和工业设计更好的技术解决方案。


项目

该产品包括从简单的直线距离,平方米和高达立方米的测量。由于我们使用的是HC-SR04超声波传感器,距离不应超过3.5米到4米之间,特别是在注册测量的线路中应该没有障碍物


根据我们在TFT屏幕菜单中选择的测量值,LED将开始闪烁,指示每个传感器应指向的位置,以便每个距离记录平方米,立方米或简单线性距离的角度。之后,只需点击ROTARY ENCODER的中心即可开始收集(“MEDIR选项”)每个距离。单个3轴图形将显示每个测量值,并由每个保持开启的LED确认。根据菜单Mts2或Mts3中的选定选项,结果将显示在右上角。




代码说明


库<SPI.h>,<Adafruit_GFX-h>,<TFT_ILI9163C.h>和<RotaryEncoder.h>是让我们的硬件被识别和配置的主要基础。



    

arduino 



    

#include <SPI.h>

#include <Adafruit_GFX.h>

#include <TFT_ILI9163C.h>

#include <RotaryEncoder.h>



            

此段包含我们将在TFT屏幕图像IC显示中使用的颜色的预定义变量,以及存储波动数据的变量。



    

arduino 



    

// Color definitions

#define BLACK   0x0000

#define BLUE    0x001F

#define RED     0xF800

#define GREEN   0x07E0

#define CYAN    0x07FF

#define MAGENTA 0xF81F

#define YELLOW  0xFFE0  

#define WHITE   0xFFFF

#define ORANGE  0xF5A9

int menu_select= 0;

int menu_square= 0;

int menu_cubic = 0;

int menu_lineal= 0;

int menu_apaga = 0;

int mts2M      = 0;

int mts2P      = 0;

int mts3       = 0;

float lineal     = 0;

int SELECT     = 0;

int seleccion  = 0;

int aboutA = 0;

const int Echo_Alto    = 2;

const int Trigger_Alto = 3;

const int Echo_Ancho   = 4;

const int Trigger_Ancho= 5;

const int Echo_Largo   = 6;

const int Trigger_Largo= 7;

const int Led_An    = A5;

const int Led_L     = A4;

const int Led_Al    = A0;

const int Backlight = A1;


int ledState = LOW;   // ledState se usará para establecer el estado del LED

long previousMillis = 0;   // almacenará la última vez que el estado del LED

long interval = 500;



    

        

这条附加线定义了TFT引脚连接到Arduino的位置。此外,一些额外的变量是存储从超声波传感器读数测量的每个区域。最后,代码显示Rotary Encoder Pins位置连接到Arduino(A2,A3)的位置以及按钮的位置(Pin8)。



    

arduino 



    

#define __CS 10

#define __DC 9

#define __RST 12

long duration_L;

long duration_An;

long duration_Al;

float distance_L;

float distance_An;

float distance_Al;

float mtscuadrado =0;

float mtscubico =0;


RotaryEncoder encoder(A2, A3);


const int Push = 8;  // Botón push de Rotary encoder

TFT_ILI9163C tft = TFT_ILI9163C(__CS, __DC,__RST);



    

        

我们将TFT屏幕初始化,然后将Serial Com初始化为9600 BPS。在此之后,pinMode被设置为HC-SR04传感器和旋转编码器的每个数字和模拟Arduino引脚。最后,您将看到digitalWrite(Backlight,LOW)命令,因为此CUBE的正常状态处于待机模式。在底部代码被发送到VOID power()。



    

arduino 



    

void setup() {

  tft.begin();

  Serial.begin(9600);

  pinMode(Push, INPUT_PULLUP);

  pinMode(Trigger_Alto, OUTPUT);

  pinMode(Echo_Alto, INPUT);

  pinMode(Trigger_Ancho, OUTPUT);

  pinMode(Echo_Ancho, INPUT);

  pinMode(Trigger_Largo, OUTPUT);

  pinMode(Echo_Largo, INPUT);

  pinMode(Led_An, OUTPUT);

  pinMode(Led_Al, OUTPUT);

  pinMode(Led_L,  OUTPUT);

  pinMode(Backlight,OUTPUT);

  digitalWrite(Backlight, LOW);

  power();

  }



    

        


    

arduino 



    

void loop(){

  

  //tft.fillScreen();

  tft.setCursor(35, 20);

  tft.setTextColor(ORANGE); 

  tft.setTextSize(2);

  tft.println("CUBIC");

  tft.setTextSize(1);

  tft.setCursor(93, 13);

  tft.println("3");




高工
2022-06-06 09:05:08     打赏
2楼

谢谢分享,学习学习


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]