Cuprins:
- Provizii
- Pasul 1: Cum funcționează …
- Pasul 2: Încărcarea codului
- Pasul 3: Biblioteci necesare:
- Pasul 4: Conexiunile
- Pasul 5: Poftiți totul împreună
- Pasul 6: Îmbunătățiri suplimentare:
Video: Un robot care spune dacă un vânzător de electronice te înșeală sau nu: 6 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:41
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ă …
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
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:
Mască Covid-19 care vă țipă dacă vă atingeți fața: 4 pași
Mască Covid-19 care vă țipă dacă vă atingeți fața: nu vă puteți opri din a vă atinge fața? Lipiți aceste electronice pe o mască pe care o aveți și vi se va reaminti în permanență să nu faceți asta
Salvați-mi copilul: scaunul inteligent care trimite mesaje text dacă uitați copilul în mașină: 8 pași
Salvați copilul meu: scaunul inteligent care trimite mesaje text dacă uitați copilul în mașină: este instalat în mașini și, datorită unui detector plasat pe scaunul pentru copil, ne avertizează - prin SMS sau apel telefonic - dacă primim departe fără a aduce copilul cu noi
Robot de fotbal (sau fotbal, dacă locuiți pe cealaltă parte a iazului): 9 pași (cu imagini)
Robot de fotbal (sau fotbal, dacă locuiți pe cealaltă parte a iazului): Învăț robotică în tinker-robot-labs.tk Elevii mei au creat acești roboți care joacă fotbal (sau fotbal, dacă locuiți pe cealaltă parte a iaz). Scopul meu cu acest proiect a fost să-i învăț pe copii cum să interacționeze cu un robot prin Bluetooth
Bucătărie pentru copii care spune BEEP: 7 pași (cu imagini)
Bucătărie pentru copii care spune BEEP: Fiica mea de doi ani a primit o cerere „mică” pentru a treia zi de naștere. A vrut o bucătărie mică pe care scrie Beep. - Vrei ce? a fost răspunsul meu. „O bucătărie care spune bip, la fel ca bucătăria mami!”, A spus ea … Deci, asta a fost inspirația (eu
Joc de memorie cu atingere (Simon spune) - Dacă asta, atunci: 6 pași (cu imagini)
Memory Game With Touch (Simon Says) - If This Then That: Am făcut un joc de memorie cu tampoane tactile auto-realizate și un inel de neopixeli pentru un proiect școlar. Acest joc este similar cu Simon Says, cu excepția faptului că multe forme de intrare și feedback (sunete și efecte de lumină) în joc sunt diferite. Am programat sunete din Su