Pour mesurer et fixer dans le temps sur la mémoire flash des processus longs exprimés en courant et en tension, tels que la charge - décharge des batteries et des batteries. Il est possible de fixer simultanément la température.
Paramètres du signal d'entrée:
courant I = 25mka - 2a
tension U = 0 - 5V
température t = -30 - + 120gС
l'heure est réglée par la montre à quartz interne intégrée
Nutrition:
de la source 12v / 0.3a
Je consommation <70ma
Construction:
Le compteur est assemblé sur deux modules Arduino Nano connecté via le protocole ModBus, voir schéma. Un Arduino est monté sur une colonne montante avec des borniers. Les modules sont connectés via des connecteurs. Les fils et les modules eux-mêmes sont isolés des défauts thermo-cambriques.
Les signaux d'entrée sont acheminés via des bornes à vis
Sur le panneau avant, il y a un indicateur à cristaux liquides des paramètres mesurés et des LED indiquant la commutation d'une plage ou hors plage.
Le compteur est assemblé dans un boîtier 145x85x40.
Le capteur de température s'effectue à travers le connecteur. La transmission du signal est organisée sur une ligne à deux fils. Résistance d'alimentation dans le connecteur.
Pour faciliter la programmation, les connecteurs USB Arduino sont externes.
Schéma
Le schéma peut être téléchargé à partir du fichier Meter.rar
Deux Arduino ont été choisis pour deux raisons: Arduino Nano était disponible et pas assez sur une mémoire, et il est prévu d'ajouter des capteurs plus loin. De plus, je voulais maîtriser l'association Arduino, pour cela le protocole réseau ModBus a été sélectionné. ModBus définit un processeur maître - Maître et plusieurs esclaves - Esclave. Dans ce travail, il y a un esclave, sur lequel il y a une mesure de la température, de la tension et du courant. Sur Master - une horloge et un enregistrement dans un fichier. La mémoire de chair doit être inférieure à 4 Go et formatée en FAT.
Puisqu'il était prévu de mesurer des courants de μA à A, les courants sont mesurés dans 4 plages (voir le tableau des plages), l'esclave Arduino surveille la transition d'une plage à une autre, formant le code shunt correspondant pour le courant mesuré actuel de M1-2. Lorsque vous approchez de la bordure de la plage, la plage suivante est activée, c'est-à-dire que la clé actuelle est désactivée de T1-1 --- T2-2 et la suivante est activée. Dans ce cas, le shunt maximum = 100 ohms est constamment activé. En cas de dépassement de la valeur dans la plage, les LED D8, D9 sont allumées.
Division de la mesure de courant en plages
Uout_max = 5v KusOU = 20 Δ = Ish / 1024
Le gain de l'amplificateur opérationnel M1-2 est réglé sur 20, puis ne change pas. (Sur le panneau avant, il est monté par erreur).
La tension est mesurée par un suiveur sur l'OU M1-1.Les circuits d'entrée de l'ampli op et de l'Arduino sont protégés par des diodes (les diodes zener sont en Arduino, mais je ne connais pas les paramètres, il est donc préférable d'en faire trop).
LCD1602 est sélectionné comme indicateur. Il est connecté au maître Arduino. De plus, l'indicateur peut être connecté aux deux Arduino simplement en commutant les connecteurs Arduino. (Lorsque l'alimentation est coupée.) La connexion à l'esclave Arduino est indiquée par une ligne pointillée (qui a été utilisée lors de l'écriture de programmes). Avec la connexion principale (au maître) sur le LCD1602, 4 écrans peuvent être affichés en commutant le curseur de l'interrupteur à glissière p1-p2.
Screen1: par dessus les informations de service de l'échange entre Arduino: C est le nombre d'échanges entre Arduino, E est le nombre d'erreurs lors de l'échange de Sh- No. du shunt;
bas jour - mois.
Screen2: U1, I1, Shunt No., (0,00 en bas à droite réserve)
Screen3: U2, température, (ui veille)
Screen4: enregistrement SD activé, durée d'enregistrement en heures, numéro de ligne dans le fichier,
00- état de la plage de courant1 0-normal 1 hors plage, état de la plage de tension1, puissance fixe d'une source externe
Lorsqu'il est connecté à Slave - 2 écrans. Le commutateur p3 permet l'enregistrement dans la mémoire Micro Flesh.
L'alimentation est sélectionnée en 12v pour obtenir les caractéristiques linéaires de l'ampli-op (pour éviter les blocages aux bords de la plage). Pour la même raison, une tension négative du shaper à KR1006VI1 a été utilisée. L'utilisation d'un générateur Arduino produit une tension moins stable. Pour générer une puissance de 5 V, un convertisseur abaisseur a été utilisé, mais vous pouvez vous en passer en fournissant + 12V aux entrées VIN Arduino Nano.
La programmation conjointe Arduino a des fonctionnalités, car la communication avec l'ordinateur est occupée par le protocole ModBus. Pour charger un croquis dans l'un des Arduino, de l'autre, vous devez activer le signal de réinitialisation RST. Pour ce faire, utilisez les cavaliers Block S, Block M. Ou appuyez et maintenez les boutons de réinitialisation sur les modules Arduino jusqu'à ce que le téléchargement soit terminé, ce qui est moins pratique et il y a une chance d'endommager le téléchargement. Comme je prévois d'étendre mon périphérique USB Arduino, j'ai retiré le boîtier.
Le transistor T5 (FR024N) est censé être utilisé pour activer / désactiver un processus, par exemple, une charge-décharge d'une batterie. Bien qu'il ne soit pas impliqué.
Logiciel.
Il est au maximum mâché que les débutants (et moi-même) ne blessent pas et puissent servir de matériel de référence, mais ne prétendent pas être l'optimalité.
Les bibliothèques et les codes de programme se trouvent dans le fichier Izmeritel PRO.rar.
Esquisse pour le maître ModBus_Master10_SD_T_10_2. Esquisse pour l'esclave ModBus-Slave10_T_UI_10_2. Le reste de la bibliothèque.
Programmé dans l'environnement d'Arduino1.6.0. Il contient des bibliothèques SD, LiquidCrystal, Wire qui n'ont pas besoin d'être téléchargées.
L'heure en heures est définie dans la configuration comme suit. Réglez le temps réel et chargez l'esquisse. Mettez ensuite en commentaire les lignes de réglage de la date et de l'heure et rechargez l'esquisse.
Le résultat du programme sera l'indication de l'heure et de la date (heures), du courant, de la tension, de la température sur le LCD1602 et l'enregistrement de ces paramètres dans le fichier IZMER1.TXT dans la mémoire Micro Flesh. Le fichier contiendra un tableau de ce type:
0; 13/04/2019; 00:11:10; Zap (h) = 0,05; tc = 29,31; U1 = 1,71; I1 = 0,00; P1 = 0,00; U2 = 0,14; DiaI norma; DiaU norma; C = 762
1; 13/04/2019; 00:11:16; Zap (h) = 0,05; tc = 29,38; U1 = 1,79; I1 = 0,00; P1 = 0,00; U2 = 0,19; DiaI norma; DiaU norma; C = 788
2; 13/04/2019; 00:11:22; Zap (h) = 0,05; tc = 29,38; U1 = 1,54; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 813
3; 13/04/2019; 00:11:28; Zap (h) = 0,05; tc = 29,31; U1 = 1,30; I1 = 0,00; P1 = 0,00; U2 = 0,17; DiaI norma; DiaU norma; C = 839
4; 13/04/2019; 00:11:34; Zap (h) = 0,05; tc = 29,31; U1 = 1,90; I1 = 0,00; P1 = 0,00; U2 = 0,17; DiaI norma; DiaU norma; C = 864
5; 13/04/2019; 00:11:40; Zap (h) = 0,05; tc = 29,25; U1 = 1,53; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 890
6; 13/04/2019; 00:11:46; Zap (h) = 0,05; tc = 29,19; U1 = 2,03; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 915
7; 13/04/2019; 00:11:52; Zap (h) = 0,05; tc = 29,13; U1 = 1,81; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 941
8; 13/04/2019; 00:11:58; Zap (h) = 0,05; tc = 29,00; U1 = 1,30; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 966
9; 13/04/2019; 00:12:04; Zap (h) = 0,07; tc = 28,94; U1 = 1,25; I1 = 0,00; P1 = 0,00; U2 = 0,17; DiaI norma; DiaU norma; C = 992
10; 13/04/2019; 00:12:10; Zap (h) = 0,07; tc = 29,00; U1 = 1,85; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 1017
11; 13/04/2019; 00:12:16; Zap (h) = 0,07; tc = 29,00; U1 = 1,21; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 1043
12; 13/04/2019; 00:12:23; Zap (h) = 0,07; tc = 28,94; U1 = 1,55; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 1068
13; 13/04/2019; 00:12:29; Zap (h) = 0,07; tc = 28,88; U1 = 1,82; I1 = 0,00; P1 = 0,00; U2 = 0,16; DiaI norma; DiaU norma; C = 1094
14; 13/04/2019; 00:12:35; Zap (h) = 0,07; tc = 28,88; U1 = 1,30; I1 = 0,00; P1 = 0,00; U2 = 0,18; DiaI norma; DiaU norma; C = 1119
où se trouvent les colonnes n / a; Date le temps temps d'enregistrement en heures; température tension mesurée U1; courant mesuré I1; la deuxième tension mesurée U2; informations sur la sortie / absence de la plage de mesure; informations de service sur le nombre d'échanges entre Arduino.
L'intervalle d'enregistrement des mesures a été sélectionné pendant 6 secondes, il est facile de le changer en remplaçant la valeur de la constante #define CYCLE_TIME_F 3000 par une autre par la formule Tsec = Constante (ms) * 2/1000 dans Master.
De plus, ce tableau peut être présenté sous la forme de jolis graphiques.
Lors de l'écriture de programmes, j'ai utilisé du matériel. J'exprime ma gratitude à l'auteur.