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

DIY eenvoudigste IV9 Numitron-klok met Arduino

Componenten en benodigdheden

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ±5ppm, I2C real-time klok
× 1
TPIC6C595 schuifregister
× 4
IV9 Numitron-buis
× 4
LED (generiek)
× 2
Condensator 100 nF
× 4
1N4007 – Diode voor hoge spanning, hoge stroomsterkte
× 2
Schuifschakelaar
× 1
Weerstand 1k ohm
× 1

Benodigde gereedschappen en machines

Soldeerbout (algemeen)
Soldeerdraad, loodvrij

Apps en online services

Arduino IDE

Over dit project

Deze keer laat ik je zien hoe je een mooie retro-stijl Numitron buizenklok maakt. Naast de juiste tijd geeft het apparaat elke 30 seconden kort de datum, het jaar en de huidige temperatuur weer.

Ik kreeg het idee om dit horloge te maken van de gegeven Github-pagina:https://github.com/theremotheman/simple_numitron_clock_with_4_shift_registers_and_rtc3231.

Ik maakte het project eerst volgens de instructies op de site en ontdekte dat het veel gebreken bevatte.

Zo zag het eerste prototype met 74HC595 eruit

Voor 74HC595 IC De totale maximale stroom volgens de datasheet is 70 milliampère, die in dit geval meerdere malen wordt overschreden (ongeveer 160 milliampère voor cijfer 8), zodat het IC na een tijdje oververhit raakt en niet goed werkt. Een ander gebrek is dat er te veel vertragingen zijn in de lus van code, zodat de tijd slechts één keer in 60 seconden wordt gelezen. Op de afbeelding ziet u de voltooide klok die voornamelijk is gemaakt volgens de instructies op de bovenstaande pagina. In het begin werkt het volkomen normaal, maar na een tijdje worden willekeurige segmenten geactiveerd en kunnen IC's, numitrons of de microcontroller heel gemakkelijk verbranden. In het eerste geval werd het probleem opgelost door TPIC6C595 IC te gebruiken in plaats van 74HC595, die is bedoeld voor grotere stromen. Er moet ook voor worden gezorgd dat deze twee geïntegreerde schakelingen niet pin-compatibel zijn.

-------------------------------------------------- --------------------------------

https://www.pcbgogo.com/promo/from_MirkoPavleskiMK

-------------------------------------------------- ---------------------------------

En de nieuwe code is gemaakt met behulp van de millis()-functie in plaats van de delay()-functie, dus nu wordt de real-time klok constant gelezen. Ik heb ook een schakelaar toegevoegd die de lichtintensiteit van de numitrons verandert, en dus de levensduur. Zoals je kunt zien, is het apparaat relatief eenvoudig te bouwen en ik denk dat dit de eenvoudigste manier is om een ​​buizenklok te maken. Numitrons zijn goedkoop, gemakkelijk te verkrijgen en gebruiken geen extra hoogspanningsvoeding.

Er zijn maar een paar componenten nodig om deze klok te maken:

- Vier Numitron buizen IV9

- Vier geïntegreerde circuits TPIC6C595

- Arduino-microcontroller

- DS3231 Realtime klokmodule

- Twee LED's voor seconden

- Schakelaar

- en vier ontkoppelcondensatoren

De realtime-module bevat ook een thermometer, dus voor een nauwkeurigere weergave van de temperatuur bevindt deze zich buiten de doos, beschermd door een gaas. Ten eerste is het wenselijk om de realtime klok te synchroniseren met de pc-klok, en dat doen we met behulp van de DS1307RTC-bibliotheek. Dan uploaden we de code en daarmee is het toestel klaar. Het blijft om de code aan te passen zodat we de tijd kunnen instellen met behulp van knoppen en het zal in de volgende periode zijn als een projectupdate.

Ten slotte is de klok gemonteerd in een geschikte doos en is het een prachtige decoratie in elke vitrine.

Code

  • Arduino-code
Arduino-codeC/C++
#include  //rtc met temperatuur voor ds3231RTC_DS3231 rtc; //instelling welke rtc-module wordt gebruikt#include  //wiring#include  //time lib#include  //time function#include  //rtc #include #define led 7const int latchPin =13; //latchconst int clockPin =10; //clockconst int dataPin =11; //dataunsigned lange vorigeMillis =0; // slaat laatste keer op Led knipperde lang interval =30000; // interval waarmee knipperen (milliseconden) unsigned lange vorige MillisDiode =0; // slaat laatste keer op Led knipperde lang interval Diode =500; // interval waarmee moet knipperen (milliseconden) const int nums [12] ={ // instelling display-array - volgens documenten:pin1 is gebruikelijk, pin2 is punt (ongebruikt in schets), rest moet één voor één worden verbonden met schuifregisters een 0b10111110, //0 0b00000110, //1 0b01111010, //2 0b01101110, //3 0b11001110, //4 0b11101100, //5 0b11111100, //6 0b00001110, //7 0b11111110, //8 0b11101110, // 9 0b11001010, //st. 0b10111000 //celz.};int uur1; //uur eerste nummer in uur2; //uur tweede nummer in minuut1; //minuten eerste nummer in minuut2; // minuten tweede nummer in dag1; // dag eerste nummerint dag2; // dag tweede nummer in maand1; // maand eerste nummerint maand2; // maand tweede nummer in jaar1; // jaar eerste nummer - constante 2 in jaar2; // jaar tweede getal - constante 0 (wil je zo lang leven om het te veranderen?) in jaar3; //jaar derde nummer in jaar4; //jaar vierde getal in uurDecimaal; //decimaal ontleden van hourint minuteDecimal; //decimaal ontleden van minuteint dayDecimal; //decimaal ontleden van dayint maandDecimaal; // decimale ontleding van monthint year70; // jaar na unix epochint temp1; //eerste temperatuur nummerint temp2; // tweede temperatuurnummerint tempDecimal; // decimale ontleding van temperatuur (eerste twee cijfers) void setup () { pinMode (led, OUTPUT); pinMode (LatchPin, OUTPUT); // stel pinnen in om uit te voeren, zodat u het schuifregister pinMode (clockPin, OUTPUT) kunt regelen; // stel pinnen in om uit te voeren, zodat u het schuifregister pinMode (dataPin, OUTPUT) kunt besturen; // stel pinnen in om uit te voeren, zodat u het schuifregister Serial.begin (9600) kunt besturen; // initialiseer SPI:SPI.begin(); // zet de SS-pin laag om de chip te selecteren:digitalWrite(clockPin,LOW); }void loop() { tmElements_t tm; // naamgeving van DS1307RTC-bibliotheek RTC.read (tm); // lees rtc tijd/datum/jaar minuutDecimaal =tm.Minuut/10; //ontleden uitvoer om leesbaar (korter) te zijn door te delen door tien uurDecimaal =tm.Hour/10; // ontleden uitvoer om leesbaar (korter) te zijn door te delen door tien dayDecimal =tm.Day / 10; //ontleed uitvoer om leesbaar te zijn (korter) door te delen door tien monthsDecimal =tm.Month / 10; //ontleed uitvoer om leesbaar (korter) te zijn door te delen door tien jaar70 =tm.Jaar - 30; // geef het echte jaar weer door af te trekken van Unix epoch (1970) hour1 =hourDecimal; //simpel als dat uur2 =tm.Hour - 10 * hourDecimal; // maak berekeningen om alleen het tweede getal van twee cijfers weer te geven string minute1 =minuteDecimal; //eenvoudige minuut2 =tm.Minuut - 10 * minuutDecimaal; // maak berekeningen om alleen het tweede getal van twee cijfers weer te geven string day1 =dayDecimal; //eenvoudige dag2 =tm.Dag - 10 * dagdecimaal; // maak berekeningen om alleen het tweede nummer van een reeks van twee cijfers weer te geven maand1 =maanddecimaal; //eenvoudige maand2 =tm.Maand - 10 * maandDecimaal; // maak berekeningen om alleen het tweede nummer van de tweecijferige reeks year1 =2 weer te geven; //eerstejaarsnummer, moet je dat echt veranderen? heb je vliegende auto's en dergelijke? jaar2 =0; //nummer van het tweede jaar, als je dat moet veranderen, moet je in plaats daarvan met kleinkinderen spelen jaar3 =jaar70/10; //ontleed uitvoer om leesbaar te zijn (korter) door te delen door tien jaar4 =jaar70 - 10 * jaar3; // maak berekeningen om alleen het tweede nummer van de tweecijferige tekenreeks weer te geven tempDecimal =rtc.getTemperature()/10; // ontleden uitvoer om leesbaar (korter) te zijn door te delen door tien temp1 =tempDecimal; //simple temp2 =rtc.getTemperature() - 10 * tempDecimal; // maak berekeningen om alleen het tweede getal van een reeks van twee cijfers weer te geven if (millis() - previousMillisDiode>=intervalDiode) { previousMillisDiode =millis (); digitalWrite(led, !digitalRead(led)); // wijzig led-status}if (millis() - previousMillis>=interval) { previousMillis =millis (); digitalWrite (clockPin, LAAG); SPI.overdracht (0b00000000); SPI.overdracht (0b00000000); SPI.overdracht (0b00000000); SPI.overdracht (0b00000000); digitalWrite (clockPin, HOOG); vertraging (500); // numitron 0,5 sec uitgeschakeld om 'ademend' effect digitalWrite te maken (clockPin, LOW); SPI.overboeking (nums[maand2]); SPI.overboeking (nums[maand1]); SPI.overdracht (nums[day2]); SPI.overdracht (nums[day1]); digitalWrite (clockPin, HOOG); vertraging (1500); digitalWrite (clockPin, LAAG); SPI.overdracht (0b00000000); SPI.overdracht (0b00000000); SPI.overdracht (0b00000000); SPI.overdracht (0b00000000); digitalWrite (clockPin, HOOG); vertraging (500); // numitron 0,5 sec uitgeschakeld om 'ademend' effect digitalWrite te maken (clockPin, LOW); SPI.overdracht (nums[year4]); SPI.overschrijving (nums[jaar3]); SPI.overdracht (nums[year2]); SPI.overdracht (nums[year1]); digitalWrite (clockPin, HOOG); vertraging (1500); digitalWrite (clockPin, LAAG); SPI.overdracht (0b00000000); SPI.overdracht (0b00000000); SPI.overdracht (0b00000000); SPI.overdracht (0b00000000); digitalWrite (clockPin, HOOG); vertraging (500); // numitron 0,5 sec uitgeschakeld om 'ademend' effect digitalWrite te maken (clockPin, LOW); SPI.overdracht (0b10111000); SPI.overdracht (0b11001010); SPI.overdracht (nums[temp2]); SPI.overdracht (nums[temp1]); digitalWrite (clockPin, HOOG); vertraging (1500); digitalWrite (clockPin, LAAG); SPI.overdracht (0b00000000); SPI.overdracht (0b00000000); SPI.overdracht (0b00000000); SPI.overdracht (0b00000000); digitalWrite (clockPin, HOOG); vertraging (500); // numitron 0,5 sec uitgeschakeld om een ​​'ademend' effect te maken } else { digitalWrite (clockPin, LOW); SPI.overdracht (nums[minute2]); SPI.overdracht (nums[minute1]); SPI.overdracht (nums[uur2]); SPI.overdracht (nums[uur1]); digitalWrite (clockPin, HOOG); }}

Schema's


Productieproces

  1. Arduino-gyroscoopspel met MPU-6050
  2. Arduino klok met islamitische gebedstijden
  3. Hoofdklok
  4. Arduino Temp. Monitor en realtimeklok met 3.2-weergave
  5. DIY voltmeter met Arduino en een Nokia 5110-display
  6. MobBob:doe-het-zelf Arduino-robot bestuurd door Android-smartphone
  7. DIY eenvoudig meetwiel met roterende encoder
  8. IoT-meter met Arduino, Yaler en IFTTT
  9. Enkele LED Matrix Arduino Flip Clock
  10. DIY-luchtkwaliteitsmonitor met Sharp GP2Y1010AU0F-sensor
  11. Eenvoudige wekker met DS1302 RTC