Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

UltrasonicEyes

Componenten en benodigdheden

Ultrasone sensor - HC-SR04 (algemeen)
× 2
Arduino Nano R3
× 1
Fotoweerstand
× 1
Maxim Integrated 8x8 LED Matrix MAX7219
× 2
Soldeerloze breadboard halve grootte
× 1
Jumperdraden (algemeen)
× 1
Weerstand 330 ohm
× 1

Apps en online services

Arduino IDE

Over dit project

Ik wilde een eigenzinnig project maken met behulp van enkele 8x8 matrix-LED's en enkele ultrasone sensoren... iets anders dan wat andere mensen gewoonlijk maken met ultrasoon geluid - en ik wilde dat het leuk en speels zou zijn.

Dus creëerde ik wat ik noem UltrasonicEyes - een leuk project waarbij je ergens in de buurt zit waar mensen zich verplaatsen en het zal rondkijken naar waar mensen zijn, en knipperen en nou ja, je wordt gewoon raar op een leuke en griezelige manier!

Wat hebben we nodig?

Ultrasone sensormodules zijn ontworpen om obstakels te detecteren en om te bepalen hoe ver het obstakel is, dus ze hebben over het algemeen een detectieafstand van maximaal 3-4 meter, wat een goede afstand is voor dit project om in een woonkamer of kantoor te worden geplaatst gebied.

Ik gebruik 2x HC-SR04-modules die ik van e-Bay heb opgehaald. Je vindt ze supergoedkoop.

De modules zijn vrij eenvoudig te gebruiken en hebben slechts 3 of 4 draden nodig om verbinding te maken met een Arduino-microcontroller.

De 8x8 led-matrixmodules die ik heb gekozen om te gebruiken, maken chaining mogelijk, dus er hoeft er maar één op de Arduino te worden aangesloten en de tweede module maakt verbinding met de eerste.

De modules gebruiken SPI, dus we hebben maar 5 draden nodig om naar de Arduino te gaan om de oogbeelden op beide schermen te bedienen.​ We hebben er natuurlijk twee nodig!

OPMERKING: De verstrekte code gebruikt Hardware SPI , dus als je een ander Arduino-bord gebruikt dan de Nano, controleer dan welke van de pinnen Hardware SPI-pinnen zijn voor MOSI en SCK en sluit ze dienovereenkomstig aan!

Je hebt ook een of andere Arduino-compatibele microcontroller nodig. Ik gebruik een Nano (compatibel) omdat hij klein genoeg is om in de case te passen, USB heeft voor voeding/programmering van de firmware en hij heeft een stapel GPIO's om ook alles aan te sluiten.

Ik heb alles op een proto-board gesoldeerd dat even groot is als een half breadboard, maar ik raad je aan om eerst alles op een half breadboard te bouwen, omdat op die manier het project niet hoeft te worden gesoldeerd en gemakkelijk uit elkaar kan worden getrokken of gewijzigd.

De laatste dingen die je nodig hebt, zijn een LDR (Photo-weerstand) voor het detecteren van licht, een weerstand van 330 ohm en een heleboel breadboard-draden, zowel mannelijk naar vrouwelijk als vrouwelijk naar vrouwelijk.

OPMERKING: U kunt in dit project alle kleurendraden gebruiken... er is geen vereiste om dezelfde kleuren te gebruiken die ik specificeer, maar , het is altijd een goede gewoonte om rood en zwart te gebruiken voor POWER en GND, en andere kleuren te gebruiken voor andere bedrading, omdat het supereenvoudig is om te identificeren welke draden stroom hebben en welke draden worden gebruikt voor gegevens en signalen.

Alles bij elkaar

Laten we beginnen door de Nano aan het einde op het breadboard aan te sluiten, zodat de USB aan de rand hangt, maar alle pinnen nog steeds op het bord aangesloten blijven.

POWER- en GND-aansluitingen

Sluit nu een zwarte draad van de GND-aansluiting op de Nano aan op de GND-rail op het breadboard. Doe nu hetzelfde met een rode draad en verbind de 3V (of 5V als dat alles is) met de POWER-rail op het breadboard.

Terwijl we aan de GND en POWER werken, kunnen we een zwarte draad aansluiten tussen de twee GND-rails aan elke kant van het breadboard. Doe hetzelfde met een rode draad en de twee POWER-rails.

*Opmerking: Sommige matrix-LED-panelen hebben mogelijk 5V nodig in plaats van 3,3V, afhankelijk van het merk. Als je merkt dat je onbetrouwbare resultaten hebt, probeer dan de 5V-pin van de Arduino te gebruiken.

Laten we de ultrasone sensoren aansluiten

Sluit een zwarte draad tussen de GND-pinnen op elk van de ultrasone sensoren aan op de GND-rail op het breadboard. Doe hetzelfde met een rode draad en de VCC (POWER)-pinnen op de sensoren en de POWER-rail op het breadboard.

Laten we nu de volgende witte en blauwe draden aansluiten:

  • Witte draad van de TRIG-pin op sensor 1 naar digitale pin 2 op de Arduino
  • Blauwe draad van de ECHO-pin op sensor 1 naar digitale pin 3 op de Arduino
  • Witte draad van de TRIG-pin op sensor 2 naar digitale pin 4 op de Arduino
  • Blauwe draad van de ECHO-pin op sensor 2 naar digitale pin 5 op de Arduino

Goed werk! Dat zijn de ultrasone sensoren waar voor gezorgd wordt!

De twee 8x8 LED-matrixdisplays aansluiten

Sluit een zwarte draad aan tussen de inkomende GND-pin op een van de LED-matrixdisplays en de GND-rail op het breadboard. Doe hetzelfde met een rode draad en de inkomende VCC (POWER)-pin op het display en de POWER-rail op het breadboard.

Sluit een zwarte draad aan tussen de uitgaande GND-pin van display één en de inkomende GND-pin op display twee. Doe hetzelfde met een rode draad en de uitgaande VCC-pin op display één en de inkomende VCC-pin op display 2.

Terwijl we de draden tussen de 2 schermen verbinden, laten we dat deel afmaken...

  • Sluit een gele draad aan tussen de uitgaande SCK (klok)-pin op display één en de inkomende SCK-pin op display twee.
  • Sluit een blauwe draad aan tussen de uitgaande MOSI (Data)-pin op display één en de inkomende MOSI-pin op display twee.
  • Sluit een witte draad aan tussen de uitgaande CS (Select)-pin op display één en de inkomende CS-pin op display twee.

Geweldig! Laten we nu de rest van het scherm aansluiten op het breadboard...

  • Sluit een gele draad aan tussen de inkomende SCK-pin op display één en digitale pin 13 op de Arduino.
  • Sluit een blauwe draad aan tussen de inkomende MOSI-pin op display één en digitale pin 11 op de Arduino.
  • Sluit een witte draad aan tussen de inkomende CS-pin op display één en digitale pin 10 op de Arduino.

ONTHOUD: De verstrekte code gebruikt Hardware SPI , dus als je een ander Arduino-bord gebruikt dan de Nano, controleer dan welke van de pinnen Hardware SPI-pinnen zijn voor MOSI en SCK en sluit ze dienovereenkomstig aan!

Goed gedaan. Nu op naar de laatste bedradingsstappen...

De LDR en weerstand aansluiten om omgevingslicht te detecteren

Voordat we deze draden aansluiten, waarom doen we deze stap zelfs? Nou, ik ben blij dat je het vraagt! De LDR die op de Arduino is aangesloten, stelt ons in staat om te detecteren of het licht of donker is rond UltrasonicEyes en we gaan die informatie gebruiken om de LED-displays dienovereenkomstig te verlichten of te dimmen.

We willen niet dat de schermen 's nachts super helder zijn, zoals bij donkerder licht, we kunnen de schermen nog steeds vrij goed zien als de helderheid rond de 30% is, maar bij daglicht of in een lichte kamer moeten we de helderheid hoger zetten om maak de displays beter zichtbaar.

Oké, laten we deze laatste stap voltooien, zodat we verder kunnen gaan met het in de 3D-behuizing te plaatsen!

Sluit de LDR aan over 2 rijen pinnen op het breadboard, net als in het bedradingsschema hierboven. Laat ruimte over om de weerstand te plaatsen en een draad die naar de Arduino gaat.

Sluit de weerstand van 330 ohm aan tussen een rij pinnen aan één kant van de LDR en de GND-rail van het breadboard.

Sluit een rode draad tussen de rij pinnen aan de andere kant van de LDR aan op de POWER-rail van het breadboard.

Laten we ten slotte een bruine draad aansluiten tussen de rij pinnen waarop de weerstand van 330 ohm is aangesloten en analoge pin 5 (A5) op de Arduino. Het moet een analoge pin zijn omdat we een waarde tussen 0 en 255 uit de LDR (lichtsterkte) moeten lezen in plaats van alleen 0 en 1, zoals we zouden krijgen van een digitale pin.

Laten we het aanzetten en de code uploaden

Oké, dat is het, we zijn allemaal bedraad. Tijd om de USB-kabel tussen de Arduino en uw computer aan te sluiten en de UltrasonicEyes-schets hieronder te uploaden om te zien dat alles werkt.

Zodra het is ingeschakeld en de code is geüpload, loop je rond voor je sensoren of beweeg je je handen ervoor en kijk wat er gebeurt!

Wil je het meer permanent maken?

Wilt u uw UltrasonicEyes permanenter maken? Bekijk hier mijn video over het nemen van de breadboard-versie en het solderen op een proto-board...

En print vervolgens de 2 delen van de behuizing op een 3D-printer en monteer ze zoals ik deed in de video!

Ik ben ook aan het kijken om UltrasonicEyes uit te breiden met een capacitieve aanraakknop (of gewone knop) om door verschillende oogvormen te bladeren... je kunt mijn experimenten hier bekijken...

Je kunt de rest van mijn projecten en video's bekijken op... onverwachtemaker.com

Volg mij op Twitter, Facebook, Instagram &Tindie

https://www.patreon.com/unexpectedmaker

Dat is het!

Code

  • Ultrasone ogen
Ultrasone ogenC/C++
#include  // We gebruiken dit om de 8x8 LED-matrixschermen te bedienen - U moet deze bibliotheek installeren vanuit de bibliotheekbeheerder als u deze nog niet heeft.#include  // We gebruiken NewPing om de ultrasone sensoren te bedienen - U moet deze bibliotheek installeren vanuit de bibliotheekmanager als u deze nog niet heeft.// definieer pinnen die zijn bevestigd aan LED-matrixdisplay 1//#define CLK_PIN 13 / / We gebruiken hardware-SPI - zorg ervoor dat u de CLK-pin hebt aangesloten op de hardware CLK-pin op uw apparaat//#define DATA_PIN 11 // We gebruiken hardware-SPI - zorg ervoor dat u de MOSI-pin hebt aangesloten op de hardware MOSI-pin op uw apparaat#define CS_PIN 10 // Chip Selecteer pin#define MAX_DEVICES 2 // aantal displays - we hebben er 2 nodig, één voor elk oog#define LIGHT A5 // We gebruiken analoge pin 5 om de lichtwaarde van de LDR te lezen/ / We gebruiken hardware SPI die automatisch MD_MAX72XX mx =MD_MAX72XX(CS_PIN, MAX_DEVICES); // Initialiseer de 2 matrixdisplays#define t1 2 // Triggerpin op ultrasone sensor 1#define e1 3 // Echopin op ultrasone sensor 1#define t2 4 // Triggerpin op ultrasone sensor 2#define e2 5 // Echo pin op ultrasone sensor 2#define maxDist 400 // de maximale afstand voor de ultrasone pulse NewPing eyeR (t2, e2, maxDist); // Initialiseer ultrasone sensor 2NewPing eyeL (t1, e1, maxDist); // Ultrasone sensor initialiseren 1// We volgen de huidige toestand van het systeem met deze integer-variabele, op deze manier kunnen we na een knippering onze ogen weer uitkijken naar de laatste richting waarin ze zich bevonden// Mogelijke toestanden zijn:0:Vooruit kijken// 1:Rechts kijken// 2:Links kijken in currentState =-1; // We slaan de tijd en afstand voor de pings voor elke ultrasone sensor op in deze variabelen long duration1, duration2;int distance1, distance2;// We willen dat het knipperen willekeurig wordt ingevoegd in de cyclefloat nextBlink =millis() + 1000;// We slaan de huidige lichtintensiteit op in deze variabele float lightAmount =0;uint8_t eye_forward[COL_SIZE] ={ 0b00111100, 0b01000010, 0b01011010, 0b10101101, 0b10111101, 0b10011001, 0b01000010, 0b00111100};uint8_t eye_right] ={001B01ZE00110,0100000, 0b11011001, 0b11111001, 0b10110001, 0b01000010, 0b00111100};uint8_t eye_left[COL_SIZE] ={ 0b00111100, 0b01000010, 0b01001110, 0b10010111, 0b10011111, 0b10001101, 0b01000010, 0b00111100,011000000SI 0b10111101, 0b1100011, 0b01111110, 0b00111100};void setup(){ // Initialiseer de Matrix Display-bibliotheek mx.begin(); // Stel de pin-modi in voor Ultrasone sensor 1 pinMode (t1, OUTPUT); pinMode (e1, INPUT); // Stel de pin-modi in voor Ultrasone sensor 2 pinMode (t2, OUTPUT); pinMode (e2, INPUT); // Stel elke triggerpin op de ultrasone sensoren in om te beginnen bij LAAG digitalWrite (t1, LAAG); digitalWrite (t2, LOW);// Stel de pin-modus voor de LDR in op een INPUT pinMode (LIGHT, INPUT); // Begin met de ogen die vooruit kijken ShowEye_Forward(); currentState =0;}void loop (){ // lees het huidige lichtniveau in lightAmount =analogRead (LIGHT); // zorg ervoor dat de lichtwaarde binnen het bereik ligt van de maximale intensiteit van de displays lightAmount =(lightAmount / 255) * MAX_INTENSITY; // stel de intensiteit in mx.control (MD_MAX72XX::INTENSITY, lightAmount); // Ping het linkeroog met een recursie van 5 distance1 =eyeL.ping_median( 5); // Vertraging 500 ms voordat we het rechteroog pingen, zodat we geen tegenstrijdige resultaten krijgen delay (500); // Ping het rechteroog met een recursie van 5 distance2 =eyeR.ping_median( 5 ); // Controleer of het tijd is om een ​​knippering in te voegen if ( nextBlink  0) { ShowEye_Right(); huidige Staat =1; } // Als afstand2 nu groter is dan afstand1 en afstand2 ook groter is dan 0, dan willen we anders naar links kijken if ( distance1  0 ) { ShowEye_Left(); huidige Staat =2; } // vertraag de lus met 250 ms om ervoor te zorgen dat de ogen de tijd hebben om vertraging (250) correct weer te geven;}/************************* ***********//*********** MAX7219 Spullen ***********//****** ***********************************/void ShowEye_Right(){ // Wis de displays mx.clear(); // Stel de huidige helderheid van het scherm in mx.control (MD_MAX72XX::INTENSITY, lightAmount); // Loop door elke rij van de displays voor (uint8_t row=0; row  

Aangepaste onderdelen en behuizingen

Print met elke 3D-printer, geen specifieke instellingen vereist. Print met elke 3D-printer, geen specifieke instellingen vereist.

Schema's

ultrasoniceyes_final_Th84xpUyB2.fzz

Productieproces

  1. UFO-aanval!
  2. Slimme jaloezieën
  3. 3D RGB Arduclock
  4. MyRiver
  5. Iron Man
  6. Eenvoudige obstakelsensor met Arduino
  7. Joystick-spel
  8. Vind mij
  9. Arduino-luchtbevochtigerbediening
  10. Little Rover
  11. Arduino-joystick