Cuprins:

Un robot care spune dacă un vânzător de electronice te înșeală sau nu: 6 pași
Un robot care spune dacă un vânzător de electronice te înșeală sau nu: 6 pași

Video: Un robot care spune dacă un vânzător de electronice te înșeală sau nu: 6 pași

Video: Un robot care spune dacă un vânzător de electronice te înșeală sau nu: 6 pași
Video: Când faci promisiuni pentru Noul An #3chestii 2024, Iulie
Anonim
Un robot care spune dacă un vânzător de electronice te înșeală sau nu
Un robot care spune dacă un vânzător de electronice te înșeală sau nu

Anul trecut, eu și tatăl meu am mers la un magazin de robotică / electronică nou deschis, foarte aproape de locul în care locuim. Când am intrat acolo, era plin de electronice, serov-uri, senzori, zmeură pis și Arduinos. A doua zi, am mers la același magazin și am cumpărat mulți senori și 3 Arduino în valoare de aproximativ 150 USD. De îndată ce m-am dus acasă, nu au funcționat alte produse decât Arduino Mega. Am fost înșelați pentru aproximativ 130 USD, ceea ce înseamnă mult.

Așadar, am decis să creez un robot care poate testa aproximativ 12 senzori și 2 motoare (încă funcționează pe servo) și poate stabili dacă produsul este defect.

Hai să intrăm direct în el!

Provizii

1. Arduino UNO

2. Afișaj cu ecran tactil TFT de 2,4"

3. câteva fire de jumper

4. senzori și motoare pentru a le putea testa (aici am folosit - senzor de mișcare, senzor de gaz MQ6, senzor de sunet, potențiometru și senzor de nivel al apei)

Pasul 1: Cum funcționează …

Image
Image

Am programat un Arduino pentru a crea și o interfață interactivă cu un afișaj TFT. După cum știm, afișajul TFT are un singur pin liber, adică pinul A5. (dacă utilizați UNO). Deci, orice senzor care utilizează pini analogici pentru a citi datele sunt compatibili cu această configurare …

În interfața de utilizare, puteți schimba culoarea de fundal a desktopului și puteți deschide aplicația dezvoltată de Arduino de mine pentru a testa senzorii.

La deschiderea aplicației, puteți vedea 2 opțiuni, INPUT și OUTPUT. deci, dacă faceți clic pe Intrare, afișează 4 senzori (este compatibil cu 12, dar încă nu trebuie să-l programez deoarece am examene care se apropie de …. nici o dată:(. Oricine este liber să editeze codul …)

Și poate verifica, de asemenea, dacă servomotorul funcționează, conectându-l în slot.

uită-te:

Pasul 2: Încărcarea codului

Codul este un program de 600 de linii pe care l-am codificat meticulos în aproximativ 50 de ore. Are câteva bug-uri, așa că vă rog să o modificați și să mi-o trimiteți prin e-mail ([email protected]).

Încărcați codul și conectați scutul TFT la Arduino. Vă recomand să jucați cu interfața de utilizare, astfel încât să obțineți mai bine.

Codul:

#include

#include #include #include #define LCD_CS A3 #define LCD_CD A2 #define LCD_WR A1 #define LCD_RD A0 #define LCD_RESET A4 #define BLACK 0x0000 #define BLUE 0x001F #define NAVY 0x000F #define RED 0xF800 #define GREEN 0x07 #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #define LIGHTGREY 0xC618 #define PURPLE 0x780F #define OLIVE 0x7BE0 #define Selection #define YP A1 #define XM A2 #define YM 7 #DFine XP 6 160 #define TS_MAXX 160 #define TS_MAXY 970 TouchScreen ts = TouchScreen (XP, YP, XM, YM, 300); Adafruit_TFTLCD tft (LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); #define BOXSIZE 40 #define PENRADIUS 3 #define MINPRESSURE 10 #define MAXPRESSURE 1000 int sound; stat char = 6; int touch = 0; int color = BLACK; int redirect = 0; int ota; void setup () {Serial.begin (9600); tft.reset (); tft.setFont (& FreeMonoBoldOblique12pt7b); tft.begin (0x9325); tft.setRotation (45); tft.setTextSize (0,5); tft.fillScreen (ALB); tft.setCursor (60, 160); tft.setTextColor (NEGRU); tft.print („Glisați pentru a vă conecta”); } void loop () {senzor plutitorVoltaj; senzor plutitor Valoare; TSPoint p = ts.getPoint (); pinMode (XM, OUTPUT); pinMode (YP, OUTPUT); if (pz> MINPRESSURE && pz 240 && px 130 && py 240 && px 20 && py 240 && px 20 && py 160 && px 12 && py 240 && px 20 && py 240 && px 20 && py 40 && px 15 && py 150 && px 40 && py 150 && px 80 && py 150 && px 120 && py 150 && px 170 && py 90 && px 40 && py 90 && px 80 && py 90 && px 120 && py 150 && px 170 && py 150 && px 170 && py 150 && px 170 && py 150 && px 170 && py 150 && px 170 && py 100 && px 20 && py 200 && px 100 && py 100 && px 20 && py 100 && px 20 && py 100 && px 20 && py <100) {atingere = 26; }} if (atinge == 1 && state == 6) {tft.setRotation (0); tft.fillScreen (color); sunet = 0; tft.fillRect (200, 180, 80, 140, ALB); tft.drawRect (201, 181, 81, 141, NEGRU); tft.fillRect (80, 30, 100, 100, CYAN); tft.drawRect (81, 31, 101, 101, NEGRU); tft.fillRect (10, 30, 50, 100, NAVY); tft.drawRect (11, 31, 51, 101, NEGRU); tft.fillRect (10, 180, 30, 120, PURPLE); tft.drawRect (11, 181, 31, 121, NEGRU); tft.fillRect (45, 180, 30, 120, ALBASTRU); tft.drawRect (46, 181, 31, 121, NEGRU); tft.fillRect (80, 180, 30, 120, CYAN); tft.drawRect (81, 181, 31, 121, NEGRU); tft.fillRect (115, 180, 30, 120, VERDE); tft.drawRect (116, 181, 31, 121, NEGRU); tft.fillRect (150, 180, 30, 120, GALBEN); tft.drawRect (151, 181, 31, 121, NEGRU); tft.fillTriangle (210, 30, 210, 50, 220, 40, WHITE); tft.fillRect (200, 35, 12, 12, ALB); tft.drawTriangle (210, 30, 210, 50, 220, 40, NEGRU); tft.drawRect (200, 35, 12, 12, NEGRU); tft.drawCircle (210, 40, 14, ALB); //tft.fillTriange(a1, b1, a2, b2, c1, c2, RED); tft.setRotation (45); tft.setCursor (200, 20); tft.print („Setări”); tft.fillRoundRect (45, 75, 75, 75, 4, WHITE); tft.drawRoundRect (45, 75, 75, 75, 4, NEGRU); tft.fillRect (75, 75, 15, 30, NEGRU); tft.fillRect (75, 120, 15, 30, NEGRU); tft.fillRect (90, 105, 30, 15, NEGRU); tft.fillRect (45, 105, 30, 15, NEGRU); stare = 7; atingere = 0; ota = 0; } if (atinge == 2) {tft.fillScreen (WHITE); tft.setRotation (0); tft.fillTriangle (210, 30, 210, 50, 220, 40, WHITE); tft.fillRect (200, 35, 12, 12, ALB); tft.drawTriangle (210, 30, 210, 50, 220, 40, NEGRU); tft.drawRect (200, 35, 12, 12, NEGRU); tft.drawCircle (210, 40, 14, NEGRU); tft.setRotation (45); tft.fillTriangle (270, 40, 270, 20, 260, 30, NEGRU); tft.drawLine (300, 30, 270, 30, NEGRU); tft.setCursor (20, 200); tft.print („personalizare”); tft.setCursor (20, 170); tft.print („deconectare”); tft.setCursor (20, 140); tft.print („periferice”); tft.setCursor (20, 110); tft.print („Despre”); atingere = 1; stare = 2; } if (atinge == 10 && state == 2) {tft.fillScreen (WHITE); tft.setCursor (10, 160); tft.setTextColor (NEGRU); tft.print („Creat și dezvoltat”); tft.setCursor (100, 190); tft.print ("de:"); tft.setCursor (60, 220); tft.print („Un adolescent din India”); tft.setRotation (0); tft.fillTriangle (210, 30, 210, 50, 220, 40, WHITE); tft.fillRect (200, 35, 12, 12, ALB); tft.drawTriangle (210, 30, 210, 50, 220, 40, NEGRU); tft.drawRect (200, 35, 12, 12, NEGRU); tft.drawCircle (210, 40, 14, NEGRU); tft.setRotation (45); tft.fillTriangle (270, 40, 270, 20, 260, 30, NEGRU); tft.drawLine (300, 30, 270, 30, NEGRU); stare = 6; } if (atinge == 11 && state == 2) {tft.fillScreen (WHITE); tft.setCursor (60, 40); tft.print („Alegeți un”); tft.setCursor (40, 60); tft.print („culoarea de fundal”); tft.fillRect (60, 180, 45, 45, RED); tft.fillRect (120, 180, 45, 45, GALBEN); tft.fillRect (180, 180, 45, 45, ALBASTRU); tft.fillRect (240, 180, 45, 45, VERDE); tft.fillRect (60, 130, 45, 45, MAGENTA); tft.fillRect (120, 130, 45, 45, NAVY); tft.fillRect (180, 130, 45, 45, LIGHTGREY); tft.fillRect (240, 130, 45, 45, CYAN); tft.fillRect (60, 80, 45, 45, ALB); tft.drawRect (60, 80, 45, 45, NEGRU); tft.fillRect (120, 80, 45, 45, NEGRU); tft.fillRect (180, 80, 45, 45, OLIVE); tft.fillRect (240, 80, 45, 45, PURPLE); tft.setRotation (0); tft.fillTriangle (210, 30, 210, 50, 220, 40, WHITE); tft.fillRect (200, 35, 12, 12, ALB); tft.drawTriangle (210, 30, 210, 50, 220, 40, NEGRU); tft.drawRect (200, 35, 12, 12, NEGRU); tft.drawCircle (210, 40, 14, NEGRU); tft.setRotation (45); tft.fillTriangle (270, 40, 270, 20, 260, 30, NEGRU); tft.drawLine (300, 30, 270, 30, NEGRU); stare = 6; if (redir == 1) {color = WHITE; } if (redir == 2) {color = BLACK; } if (redir == 3) {color = OLIVE; } if (redir == 4) {color = PURPLE; } if (redir == 5) {color = MAGENTA; } if (redir == 6) {color = NAVY; } if (redir == 7) {color = LIGHTGREY; } if (redir == 8) {color = CYAN; } if (redir == 9) {color = RED; } if (redir == 10) {color = GALBEN; } if (redirecționare == 11) {culoare = ALBASTRU; } if (redir == 12) {culoare = VERDE; }} if (atinge == 26) {ota = 1; tft.fillScreen (ALB); tft.setRotation (0); tft.fillTriangle (210, 30, 210, 50, 220, 40, WHITE); tft.fillRect (200, 35, 12, 12, ALB); tft.drawTriangle (210, 30, 210, 50, 220, 40, NEGRU); tft.drawRect (200, 35, 12, 12, NEGRU); tft.drawCircle (210, 40, 14, NEGRU); tft.setRotation (45); tft.fillTriangle (270, 40, 270, 20, 260, 30, NEGRU); tft.drawLine (300, 30, 270, 30, NEGRU); tft.setRotation (1); tft.setCursor (30, 80); tft.print ("Intrare"); tft.setCursor (30, 150); tft.print („Ieșire”); tft.drawRect (25, 130, 90, 30, NEGRU); tft.drawRect (25, 60, 90, 30, NEGRU); if (p.x> 190 && p.x 30 && p.y <90) {tft.setCursor (150, 220); tft.print („Nivelul apei”); tft.setCursor (150, 170); tft.print („Nivelul gazului”); tft.setCursor (150, 120); tft.print („Distanță”); tft.setCursor (150, 70); tft.print („Sunet”); atingere = 1; stare = 2; }}} while (sunet == 1) {tft.fillScreen (ALB); sensorValue = analogRead (A5); senzorVoltaj = senzorValor; tft.setCursor (60, 160); tft.print (sensorVoltage); Serial.println ("Nivel de sunet ="); Serial.println (sensorVoltage); întârziere (1000); if (sunet == 0) {pauză; }}}}

Pasul 3: Biblioteci necesare:

  • Adafruit_GFX.h
  • Adafruit_TFTLCD.h
  • TouchScreen.h

Linkuri Github pentru același lucru:

github.com/adafruit/Adafruit-GFX-Library

github.com/adafruit/TFTLCD-Library

github.com/adafruit/Adafruit_TouchScreen

Pasul 4: Conexiunile

Poftiți totul împreună
Poftiți totul împreună

Ai nevoie de 6 fire jumper. 3 masculi și 3 femele. lipiți-le direct pe placa Arduino astfel:

Pasul 5: Poftiți totul împreună

Introduceți firele în arduino (consultați imaginea), folosiți un pistol de lipit, dacă este necesar …

Apoi, atașați scutul TFT, apoi testați senzorii.

Vă mulțumim că ați derulat până la capăt. Asigurați-vă că votați pentru mine dacă ați considerat că acest proiect a fost unic și util

Ești fericit și ai grijă de escrocii electronici?

Pasul 6: Îmbunătățiri suplimentare:

  • Mai multă compatibilitate cu senzorii
  • Codul servomotor trebuia terminat
  • O altă aplicație care poate interfața cu modulele Bluetooth, astfel încât să putem controla un robot alimentat cu Bluetooth.
  • Corectarea erorilor

Recomandat: