Inhoudsopgave:
- Stap 1: Vereisten
- Stap 2: De hardware en software begrijpen
- Stap 3: De componenten instellen
- Stap 4: Coderen
Video: Kleur veranderend nachtlampje met behulp van Ardruino 101 - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
In dit project ga je een nachtlamp maken met behulp van ardruino, Adafruit neo rgb Strips en een 3D-printer.
Merk op dat dit intructable puur voor mijn schoolproject is. De code voor dit project is gebaseerd op een ander project. Dat gezegd hebbende, ik ben geen expert als het gaat om Ardruino.
Stap 1: Vereisten
Voor dit project heb je de volgende hardware en tools nodig:
Hardware:
1 - Een ardruino101 (in de VS) of een Genuino101 (voor buiten de VS).
2 - NeoPixel rgb ledstrips van adafruit (5 volt).
3 - A ardruino usb-connector (type B naar A-connector).
4 - Een software van Ardruino, Ardruino IDE In deze tutorial gebruiken we versie 1.8.5. Vereisten voor de softwarebibliotheek zijn: 101, Adafruit NeoPixel en Madgwick.
5 -En een object om uw hardware te huisvesten. In dit geval zal ik een 3D-printer gebruiken. Het bestand voor deze 3D-print bevindt zich in de beschrijvingen genaamd "Lamp Head". Merk op dat dit bestandsformaat niet klaar is voor 3D-afdrukken. Afhankelijk van uw 3D-printers moet u vooraf eerst de daarvoor bestemde 3D-printsoftware op het 3D-object uitvoeren. Soms wordt de schaal van de 3D-print gereset. zorg er dus voor dat de diameter is ingesteld op 11 cm bij 11 cm.
6 - Basis soldeerset.
Stap 2: De hardware en software begrijpen
Ardruin/Genuino101
Even ter verduidelijking Ardruino101 en genuino101 zijn precies hetzelfde naast de namen. Beide hebben dezelfde specificaties en gebruiken dezelfde software.
Ardruino101 beschikt over de basisspecificaties zoals de ardruino UNO en meer. Het belangrijkste kenmerk van ardruino101 is de versnellingsmeter en gyroscoop die we in ons project zullen gebruiken. Ook dit type ardruino heeft zijn unieke codebibliotheek genaamd CurrieIMU (Internal Measurement Units) die is opgenomen in de bibliotheekextensie 101.
Dat gezegd hebbende, laten we het hebben over de software.
Software en bibliotheken
Ardruino IDE gebruikt python als de belangrijkste broncode. het is ook de belangrijkste code-platvorm waar de meeste ardruino draait. Er zijn tal van tutorials online over het gebruik van deze software, dus ik raad je aan deze eerst te onderzoeken als dit programma nieuw voor je is.
Dat gezegd hebbende, zijn de bibliotheken die we gebruiken de volgende:
Vanuit het Schets-menu, > Bibliotheek opnemen > Bibliotheken beheren… Typ in het tekstinvoervak:
- 101 Standaard wordt de ardruino 101 niet automatisch opgenomen in de ardruino IDE. We hebben deze bibliotheekextensie nodig om ons ardruino-type te coderen.
-Adafruit NeoPixel om onze Neo-pixelstrips te coderen.
-Madgwick Om de ruwe data uit te lezen en deze data naar raw, pitch en roll te berekenen.
Neo RGB-strips
Het type dat ik ga gebruiken is een 5 volt of 5v type. Met deze 5v heb ik geen uitgebreide stroombron nodig om mijn strips te bedienen. In plaats daarvan zal ik mijn ardruino gebruiken als stroombron om de strips te bedienen en te verlichten.
Hier zijn enkele tips die u moet weten voordat u aan de slag gaat met deze strips.
Allereerst heb je een Neodigital RGB ledstrip van adafruit nodig. Dit soort strips is aanstuurbaar met behulp van codes. Vervolgens moet je weten dat er een achterkant en een voorkant op deze strips zit. Deze voor- en achterkant is belangrijk voor het solderen. Zorg ervoor dat u de voorkant soldeert waar de pijltoets van de punt af wijst.
Hier is een handleiding voor het gebruik ervan.
Er zijn 3 soldeerpunten waar u rekening mee moet houden. Aardverbinding (GND), Spanningsverbinding (V) en Pinverbinding (DIN).
Stap 3: De componenten instellen
Eerst moet u het onderdeel 3d printen dat u kunt vinden in de vereisten. In dit geval zal ik PLA gebruiken. Zorg ervoor dat de diameter van het totale object 11 cm bij 11 cm is. Dit zal ervoor zorgen dat de ardruino en de strips in de shpero passen. Merk op dat elke 3D-printer verschillende software gebruikt om het afdrukproces te berekenen. Dat gezegd hebbende, kan het bestand dat u gebruikt anders worden geschaald, dus houd daar rekening mee.
Controleer vervolgens na de afdruk of de componenten kunnen sluiten. De 3D-prints vormen samen een bol. Ze moeten mooi passen. Als de component verloren gaat, plak dan wat tape aan de binnenkant zodat de dop gevuld is. En als het te dik is, gebruik dan schuurpapier.
Ten derde zijn de skematichs voor de ardruino en de strips vrij eenvoudig. Je gebruikt 3 draden om de strips op de ardruino aan te sluiten. Merk op dat de enige plaatsen die ik soldeer op de strips zijn. niet op de Ardruino zelf.
GND gaat naar GND
DIN gaat naar een pin (in ons geval pin6 op de ardruino)
5V gaat naar 5V
Zorg ervoor dat het aantal ledstrips dat u gebruikt maximaal 30 is. Als dat niet het geval is, zal het de code niet correct uitvoeren. U kunt eenvoudig alle niet-gebruikte stroken knippen die worden weergegeven met een schaarteken.
Vierde Alles moet mooi in de bol passen. Je zou willen dat ik een snijpunt heb gemaakt tussen 1 van de 3D-print om door te kijken en een plastic doorkijkje op de bovenkant te plaatsen.
Stap 4: Coderen
Dus nu zou je alle benodigde componenten in je bibliotheek moeten hebben.
Hier is de code die je nodig hebt om het project uit te voeren. Het resultaat zou eruit moeten zien als de videolink die ik op deze pagina stuur.
De bron van deze code is hier te vinden. Dit project omvat ook de nodige stappen om de code en het algaritme achter het gebruik beter te begrijpen.
#include #include #include #include
#define PIN 6 // 11 pixels NeoPixel Strip
#define PIN1 7 // 1 pixel NeoPixel Strip #define NUMPIXELS 30 // Aantal pixels #define SAMPLE_RATE 25 // Sampling rate voor accelerometer en gyroscoop
// Madgwick-configuratie
Madgwick-filter; niet-ondertekende lange microsPerReading, microsVorige; vlotter accelScale, gyroScale;
// NeoPixel-configuratie
Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelsStatus = Adafruit_NeoPixel(1, 7, NEO_GRB + NEO_KHZ800);
// Kleurruimten
RGB-converter rgb-converter; dubbele h = 1; dubbele s = 1; dubbele v = 1; byte-rgb[3];
// Status bewegingslamp
// Staat 0 -> Selecteer tint - Pitch // Staat 1 -> Selecteer verzadiging - Roll // Staat 2 -> Selecteer waarde - Yaw // Staat 3 -> Fix kleur vluchtig int statusLamp = 0;
ongeldige setup() {
Serieel.begin(9600);
// start de IMU en filter
CurieIMU.begin(); CurieIMU.setGyroRate(SAMPLE_RATE); CurieIMU.setAccelerometerRate(SAMPLE_RATE); filter.begin(SAMPLE_RATE);
// Stel het bereik van de versnellingsmeter in op 2G
CurieIMU.setVersnellingsmeterBereik(2); // Stel het gyroscoopbereik in op 250 graden/seconde CurieIMU.setGyroRange (250);
CurieIMU.autoCalibrateAccelerometerOffset(X_AXIS, 0);
CurieIMU.autoCalibrate AccelerometerOffset (Y_AXIS, 0); CurieIMU.autoCalibrate AccelerometerOffset (Z_AXIS, 1); CurieIMU.autoCalibrateGyroOffset();
CurieIMU.attachInterrupt (gebeurtenisCallback);
CurieIMU.setDetectionThreshold(CURIE_IMU_TAP, 950); CurieIMU.interrupts(CURIE_IMU_TAP);
// initialiseer variabelen om updates te versnellen om de snelheid te corrigeren
microsPerReading = 1000000 / SAMPLE_RATE; microsVorige = micros();
// Init NeoPixel 11
pixels.begin(); pixels.show();
// Init NeoPixel 1
pixelsStatus.begin(); pixels.show();
// Toon status in px
setStatusPixel(statusLamp); }
lege lus() {
int aix, aiy, aiz; // versnellingsmeter int gix, giy, giz; vlotterbijl, ay, az; vlotter gx, gy, gz; drijven rollen, stampen, gieren; statische niet-ondertekende lange microsNow;
// controleer of het tijd is om gegevens te lezen en het filter bij te werken
microsNow = micros(); if (microsNow - microsPrevious >= microsPerReading) {
// lees onbewerkte gegevens van CurieIMU
CurieIMU.readMotionSensor (aix, aiy, aiz, gix, giy, giz);
// converteer van onbewerkte gegevens naar zwaartekracht en graden/seconde eenheden
ax = convertRawAcceleration(aix); ay = convertRawAcceleration(aiy); az = convertRawAcceleration(aiz); gx = convertRawGyro(gix); gy = convertRawGyro(giy); gz = convertRawGyro(giz);
// update het filter, dat de oriëntatie berekent
filter.updateIMU(gx, gy, gz, ax, ay, az);
// print de kop, pitch en roll
roll = filter.getRoll(); toonhoogte = filter.getPitch(); yaw = filter.getYaw();
// vorige keer verhogen, zodat we het juiste tempo aanhouden
microsVorige = microsVorige + microsPerReading;
// Alleen als Tint, Verzadiging of Waarde wordt gewijzigd
if (statusLamp select Hue if (pitch >= -90 && pitch <= 90 && statusLamp == 0) { // Transform angle pitch = pitch + 90; // Verkrijgt kleurcoördinaten van hoeken h = pitch / 180.0; }
// Hoekenbeperkingen
// alleen rollen -90º tot 90º = 180º // Status 1 -> selecteer Verzadiging if (roll >= -90 && roll <= 90 && statusLamp == 1) { // Transform angle roll = roll + 90; // Verkrijgt kleurcoördinaten van hoeken s = rol / 180,0; }
// Staat 2 -> selecteer Waarde
if (statusLamp == 2) { // yaw 0º tot 360º v = yaw / 360,0; }
// Converteren naar rgb
rgbConverter.hsvToRgb(h, s, v, rgb); /* Serial.print("Kleur: "); Seriële.print(h); Serieel.print(" - "); Serieafdruk(ken); Serieel.print(" - "); Serial.print(v); Serieel.println(" ");
Serial.print("Oriëntatie: ");
Serial.print(yaw); Serieel.print(" "); Serial.print (pitch); Serieel.print(" "); Serial.println(rol); */
// Verander de kleur van de pixels
for (int px = 0; px <NUMPIXELS; px++) { pixels.setPixelColor(px, pixels. Color(rgb[0], rgb[1], rgb[2])); pixels.show(); } }
// Toon status in px
setStatusPixel(statusLamp); } }
float convertRawAcceleration(int aRaw) {
// aangezien we 2G-bereik gebruiken // -2g-kaarten met een onbewerkte waarde van -32768 // +2g-kaarten met een onbewerkte waarde van 32767
zweven a = (aRaw * 2.0) / 32768.0;
retourneer een; }
float convertRawGyro(int gRaw) {
// aangezien we een bereik van 250 graden/seconden gebruiken // -250 kaarten tot een onbewerkte waarde van -32768 // +250 kaarten tot een onbewerkte waarde van 32767
zweven g = (gRaw * 250,0) / 32768.0;
retour g; }
statische ongeldige gebeurtenisCallback()
{ // Detecteer tik in alle assen if (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) { Serial.print ("Tik op gedetecteerde statusLamp: "); Serieel.println(statusLamp);
// Status wijzigen
statusLamp++;
// Init-status
if (statusLamp > 3) { statusLamp = 0; } } }
void setStatusPixel(int statusPx)
{ switch (statusPx) { case 0: pixelsStatus.setPixelColor(0, pixelsStatus. Color(150, 0, 0)); pixelsStatus.show(); pauze; geval 1: pixelsStatus.setPixelColor(0, pixelsStatus. Color(0, 150, 0)); pixelsStatus.show(); pauze; geval 2: pixelsStatus.setPixelColor(0, pixelsStatus. Color(0, 0, 150)); pixelsStatus.show(); pauze; geval 3: pixelsStatus.setPixelColor(0, pixelsStatus. Color(0, 0, 0)); pixelsStatus.show(); pauze;
}
}
Aanbevolen:
Meting van versnelling met behulp van ADXL345 en Particle Photon: 4 stappen
Meting van versnelling met behulp van ADXL345 en deeltjesfoton: De ADXL345 is een kleine, dunne, ultralaagvermogen, 3-assige versnellingsmeter met hoge resolutie (13-bits) meting tot ±16 g. Digitale uitvoergegevens zijn geformatteerd als 16-bits tweetallen en zijn toegankelijk via de digitale I2 C-interface. Het meet de
Upgrade de achtergrondverlichting van een VU-meter naar blauwe led met behulp van oude CFL-lamponderdelen: 3 stappen
Upgrade een VU-meterachtergrondverlichting naar blauwe led met behulp van oude CFL-lamponderdelen.: Tijdens het repareren van een oude Sony TC630 reel-to-reel bandrecorder, merkte ik dat een van de glazen bollen voor de achtergrondverlichting van de VU-meter kapot was. Geen hoeveelheid geleidende verf werkte omdat het lood onder het glasoppervlak was afgebroken. De enige vervanger die ik
Berekening van vochtigheid, druk en temperatuur met behulp van BME280 en Photon Interfacing: 6 stappen
Berekening van vochtigheid, druk en temperatuur met behulp van BME280 en Photon Interfacing. We komen verschillende projecten tegen die temperatuur-, druk- en vochtigheidsbewaking vereisen. We realiseren ons dus dat deze parameters eigenlijk een cruciale rol spelen bij het hebben van een schatting van de werkefficiëntie van een systeem bij verschillende atmosferische cond
Digitale klok met netwerktijd met behulp van de ESP8266: 4 stappen (met afbeeldingen)
Digitale netwerkklok met de ESP8266: we leren hoe we een schattige kleine digitale klok kunnen bouwen die communiceert met NTP-servers en de netwerk- of internettijd weergeeft. We gebruiken de WeMos D1 mini om verbinding te maken met een wifi-netwerk, de NTP-tijd te verkrijgen en deze weer te geven op een OLED-module. De video hierboven
Hoe u gebruikersniveaus van NUMA toevoegt aan uw exemplaar van N met behulp van NumADD Firefox AddOn: 4 stappen
Gebruikersniveaus van NUMA toevoegen aan uw exemplaar van N NumADD Firefox-add-on gebruiken: Elke gebruiker van Metanet's N-database op gebruikersniveau NUMA weet hoe onhandig de interface is voor het kopiëren van door gebruikers gemaakte niveaus naar uw exemplaar van het spel. NumADD, elimineert de noodzaak van kopiëren en plakken en maakt het overzetten van niveaus het werk van één muisklik