Simulerade analog/digital omvandlare för RaspberryPi (3 / 3 steg)

Steg 3: Programmet



Funktionen RCtime() gör läsningen av sensorer. Jag försökte skriva det så allmänt som möjligt så det kan lyftas ut och används i andra program. Du kan hitta några gånger där vissa justeringar kommer att behöva göras för kalibrering. Exempel i loop funktion i den här raden "if(toggle) pwmWrite (ledPin, photocellReading * 4);" Jag multiplicera fotocellen läsning av 4. Dina resultat kan variera, jag har två av samma fotoceller och de beter sig annorlunda.

När jag först började arbeta med projektet gjorde jag min första experimentera på en Arduino. När jag hade det fungerar jag överförde det till RaspberryPi och det fungerade inte. Det tog mig lång tid att räkna ut vad som var fel. RaspberryPi är inget hot rod men det är många gånger snabbare än en Arduino. Lösningen blev att lägga till "delay(2)" i funktionen RCtime() för att ge kondensator tid att fullgöra.

Koden för blinkningshastighet använder millis() istället för delay() eftersom hela programmet stannar under en delay(). Med hjälp av millis() programmet håller igång och förändringar är omedelbar. "time" är en global variabel definieras under rubriken program och den innehåller. Det har initierats i funktionen setup(). Observera användningen av tiden, samt växla variabler och millis() funktionen i funktionen loop() för att se hur detta görs.

/***********************************************************************
* Filnamn ResCap.c
* Detta program visar ett sätt att simulera en analog läsa genom att mäta
* den tid det tar för att ladda en kondensator genom ett variabelt motstånd.
* Den använder en fotocell och en force känsliga motstånd men tekniken kommer
* arbeta för att läsa en potentiometer eller någon resistiv sensor.
***********************************************************************/

#include < stdio.h >
#include < stdlib.h >
#include < unistd.h >
#include < wiringPi.h >

int photocellPin = 0; Fotocell och kondensator ansluten till pin noll.
int fsrPin = 2; Force känsliga motstånd och kondensator ansluten till stift två.
int ledPin = 1; Lysdioden är ansluten till pin en.
int växla = 1; På/av delstaten LED.

osignerad länge; Spara tid att ställa in blinkningshastighet.

/***********************************************************************
* RCtime() - funktion, använder en digital pin för att mäta en resistiv sensor
* genom att först urladdning kondensator sedan mäta tiden tar det att
* Ladda kondensatorn genom ett variabelt motstånd. När spänningen
* löneförhöjningar till Vcc/2 stift går hög.
***********************************************************************/
int RCtime (int RCpin)
{
int PinVal = 0; Börja med noll.

pinMode (RCpin, OUTPUT); Ställ in pinkodsskydd åt utgång och dra till låg. (mark)
digitalWrite (RCpin, låg);

Delay(2); Ge tid att låta kondensator ansvarsfrihet.

pinMode (RCpin, indata); Nu ange PIN-koden till en ingång och...
medan (digitalRead(RCpin) == låg)
{/ / Räkna hur lång tid det tar för att stiga upp till hög.
PinVal ++; Steg att hålla reda på tiden.
om (PinVal == 30000)
{
bryta; om vi fick detta långt, motståndet är för höga,
} / / Inga indata till sensor, lämna loopen.
}
PinVal = PinVal/25; Dela av 25 för kalibrering.

om (PinVal > 1023) PinVal = 1023; Cap värdet på 1023.

återvända PinVal; Returnerar noll - 1023.
}

/**************************************************************************
* loop() - funktionen körs i en kontinuerlig slinga tills programmet stoppas.
*
* Mer arbetstryck på force känsliga motståndet gör lysdioden blinkar snabbare.
* Mer ljus på fotocellen gör den lätta dimmer.
**************************************************************************/
void loop(void)
{
int photocellReading = RCtime(photocellPin); Läs fotocell.
int fsrReading = RCtime(fsrPin); Läs kraft känsliga motstånd.

om (millis ()-tid > (fsrReading))
{
Toggle =! växla; Om den stämmer inte växla
tid = millis(); och återställa tiden.
}

IF(Toggle) pwmWrite (ledPin, photocellReading * 4);
annat pwmWrite (ledPin, 0);

printf ("fotocell %d - fsr %d\n", photocellReading, fsrReading); ta bort kommentar för felsökning.
}

/***********************************************************************
* setup() - funktionen drivs av Main () en gång när programmet startar.
***********************************************************************/
void setup(void)
{
wiringPiSetup(); Krävs.

pinMode (ledPin, PWM_OUTPUT);

tid = millis(); Spara tid att ställa in blinkningshastighet.
}

/***********************************************************************
* Main () - krävs
***********************************************************************/
int main(void)
{
Setup();

While(1)
{
loop();
}
}

Se Steg
Relaterade Ämnen

WOL klockan ESP8266-12naE + 60 LED WS2812B analog digital klocka

Detta instructable kommer att guida dig genom processen att ansluta följande delar för att skapa en intressant och korrekt analog / digital klocka som kommer att automatiskt ställa in tiden från internet.Delar som behövs:ESP8266-12naE modul (kan köpa...

Enkel & billigt Analog till Digital omvandlare

från tiden var ADC var dyra och sällsynta, kommer en hårdvara-programvara lösning för datainsamling för PCs. baserat på den gamla Joystick hamnen från den IBM-kompatibelt, en teknik som utlöser en monostable multivibrator resistiva givaren (termistor...

Arduino LCD-analog/digital input monitor.

Detta är hur man gör en arduino powered LCD-indata/utdata skärmSteg 1: material.Detta är de saker som du behöver.Arduino UNO.DFRobot 1602 LCD knappsatsen sköld (det behöver inte vara denna exakta typ, du måste bara veta pin-ute).Dator (med arduino ID...

Bygga en horisontell glidande kamerarigg (Analog/Digital)

inspiration för detta projekt kom från att titta på tilld av downhill cykling videor och undrar hur amaeture video/fotograferna fick sådan smidig skott. Efter lite forskning ett stativ monterad glidande var kamerarigg källan till de video/bilderna. S...

Analoga sensorer - beräkna nunnedok infördes genom en belastning eller dra ner Resistor

Har du någonsin haft den fruktansvärda känslan att lägga en belastning motstånd eller "dra" till din sensor är Messina upp alla dina analoga avläsningar?Du undrar kanske varför vi vill förstöra en perfekt bra krets genom att sätta i en belastnin...

ESP8266 ADC - analoga sensorer

ESP8266 moduler har kapacitet att utföra många användbara uppgifter. GPIO stift kan manipuleras baserat på digitala signaler att göra alla möjliga praktiska saker.Utökat firmware som NodeMCU har gjort dessa moduler mycket flexibelt och har omvandlat...

Tweet-a-watt - hur man gör en kvittrande kraftmätare...

Tweet-a-watt - hur man gör en kvittrande kraftmätare...Detta projekt dokumenterar mina äventyr i att lära hur tråd upp mitt hem för trådlöst strömförsörjning övervakning. Jag bor i en hyrd lägenhet så jag inte har hacka-tillgång till panelen mätaren...

Dual axis solar tracker med online energi monitor

Projektet var ett av mina sista projekt jag gjorde på min utbytesstudier i Finland.För detta projekt arbetat jag tillsammans med Fatbardh.Detta är en mycket större och mer avancerad version av ett av mina första projekt någonsin.Också en solar tracke...

MATIMI - övervakning och hjälpmedel teknik för personer med rörelsehinder

Som titeln antyder är kan detta projekt personer med motorisk funktionsnedsättning (partiell eller fullständig förlust av kontrollen över delar av kroppen till följd av sjukdom, trauma eller defekt) för att förvärva kontrollen över externa enheter oc...

RGB-Led klocka med Bluetooth Smart

Detta instructable visar hur du använder en Cypress-BLE-Devkit för att bygga en RGB-LED-klocka.Du behöver endast mycket få saker:RGB-LED-Strip med 30 eller 60 WS2812b-lysdioder.en grid-stil dator ombordnågra pins pin-header och lite tråd.en 5V kraftk...

Programmera MSP430-F2012 uC med Launchpad SBW

MSP430F2012 är en smart 16 MHz låg kostnad mikrokontroller från Texas Instruments med 10 GPIO (allmänna ändamål Input Output), Analog Digital omvandlare (DAC), I2C, PSI, datablad .Du kan använda den för att driva servon, stepeprs, motorer, lysdioder,...

Elektroniskt lås med one-wire iButton

i detta instructable kommer jag att presentera en liten liten krets som kan ersätta ett elektroniskt lås, elektriska apparat switch eller något liknande, till en bättre och svalare. Denna lilla styrelse kan försäkra er, ingen kommer någonsin ange dit...

Haunted ingången

Detta är en post mortem rapport att tjäna som inspiration för andra beslutsfattare, med några anteckningar om vad som gick rätt och vad gick inte så bra.Det finns en annan instructable kallas att göra en motoriserad hemlig ingång att 50% av mitt proj...

Växla läge Altoids iPOD laddare med 3 "AA" batterier

målet med detta projekt var att bygga en effektiv Altoids tin iPod (firewire) laddare som körs på 3 (uppladdningsbara) "AA" batterier. Projektet började som ett samarbete med Sky på PCB design och konstruktion, och jag på krets och firmware. Som...

Bilbatteri laddare med PIC12F683

Denna gång jag börjar med en enhet som jag redan byggt, tyvärr kommer det inte finnas några bilder från den faktiska bygget, bara en snabb artikel om hur jag tänkt mig det och hur det fungerar.En kort berättelse om hur hela börjadeMin farbror har en...

Bygga en puls Analyzer

#############################################################################################Ett meddelande från mig: Hej! Tack för att läsa min första instructables på att bygga en puls analyzer använder PIC24f i assembler. Jag har nästan avslutat p...

HDD klocka - persistens av vision

1. en hel POV klockor ute, varför är detta speciella?Jo, främst eftersom det är min. Det finns en hel del POV klockor ute på webben med alla möjliga display mekanismer, chassi, styrenheter. Det som jag bestämde mig för att bygga är inte precis en av...

Hur man bygger en Raspberry Pi noll Humanoid Robot med Java

Hej ska jag visa dig hur man gör en humanoid robot med pi nollSteg 1: delarden totala listan blir som följer för att driva sensorer och PI:* Raspberry PI noll + 16GB micro-SD kortMicro-usb hub + Wifi Dongle* AdaFruit Powerboost 1000 Basic* AdaFruit 1...

Enkel, skalbar Raspberry pi garden irrogation

Detta är ett av de projekt jag arbetar för närvarande på. Tanken bakom projektet är att bygga en enkel men ändå skalbar och eficiant trädgård irrogation, med så lite resurser som posible.Slutprodukten blir en IOT trädgård projekt, men jag ska uppdate...